From abf32b8b21394491040e5c11c1fea809c1d7c62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Mon, 19 Nov 2018 08:18:28 +0000 Subject: [REF] *: update js test suite to use helpers This rev. introduces robust helpers to use in the JS tests suite to interact with DOM and components, and starts using them (almost) everywhere. All the helpers are exposed though testUtils.js. There are 2 kinds of helpers: 1. Assertions ------------- * assert.containsNone, containsN, containsOnce check that the DOM (or a specific part of the DOM) contains a `selector`. It generates a correct error message automatically. ex: assert.strictEqual(form.$('.o_form_editable'), 1, "msg"); -> assert.containsOnce(form, '.o_form_editable'); * assert.isVisible, isNotVisible check that the DOM has an element visible or not. They also check that the element is actually in the DOM (before most tests didn't verify this). * assert.hasClass, doesNotHaveClass, hasAttrVAlue, check specific properties of a DOM element, and also validate that it is applied on a single existing DOM element (before most tests didn't verify this). ex: assert.notOk(form.$('button').hasClass('btn-primary')); -> assert.doesNotHaveClass(form.$('button'), 'btn-primary'); 2. Utilities ------------ The goal of the utilities is to centralize the definition of many standard components and interactions, ensuring that when we refactor the JS framework, we do not need to change all the tests. Existing mock utilities (addMockEnvironment, intercept, path, patchDate, unpatch and fieldsViewGet) are moved to 'testUtils.mock.*'. Existing DOM utilities are moved to 'testUtils.dom.*'. New dom utilities are created for opendDatePicker, click, clickFirst and clickLast. Helper `click` verifies that there is exactly 1 element visible in the DOM you click on, `clickFirst` and `clickLast` verify that there are more than one element on the DOM. ex: form.$('button').click(); -> testUtils.dom.click(form.$('button')); New Form utilities: (testUtils.form.*) clickEdit, clickSave, clickCreate, clickDiscard, all clicks on the control panel buttons of the form. `reload` reloads the form data. New modal, graph, kanban and pivot utils (testUtils.pivot.*, testUtils.kanban.*, etc.). New fields utils: (testUtils.fields.*) * editInput, editSelect: allow to change the value of a field, using a selector to identify it. They validate that the input exists and trigger the change event automatically. * editAndTrigger: allow to modify a field and trigger specific events after the value change * many2one (testUtils.fields.many2one.*) clickOpenDropdown, clickHighlightedItem, clickItem, searchAndClickItem: use a field name instead of a selector and do all the complex mechanism to open, filter and highlight many2one fields. Joint work with aab, dam, ged, mge, svs and vsc. --- .../web/static/tests/widgets/data_export_tests.js | 30 ++++++++++++---------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'addons/web/static/tests/widgets/data_export_tests.js') diff --git a/addons/web/static/tests/widgets/data_export_tests.js b/addons/web/static/tests/widgets/data_export_tests.js index 4569a5a6290..40b59157b02 100644 --- a/addons/web/static/tests/widgets/data_export_tests.js +++ b/addons/web/static/tests/widgets/data_export_tests.js @@ -104,18 +104,19 @@ QUnit.module('widgets', { }; }, }; - list.$('thead th.o_list_record_selector input').click(); - list.sidebar.$('a:contains(Export)').click(); + testUtils.dom.click(list.$('thead th.o_list_record_selector input')); + testUtils.dom.click(list.sidebar.$('.o_dropdown_toggler_btn:contains(Action)')); + testUtils.dom.click(list.sidebar.$('a:contains(Export)')); assert.strictEqual($('.modal').length, 1, "a modal dialog should be open"); assert.strictEqual($('span.o_tree_column:contains(Activities)').length, 1, "the Activities field should be in the list of exportable fields"); // select the field Description, click on add, then export and close - $('.modal span:contains(Description)').click(); - $('.modal .o_add_field').click(); - $('.modal span:contains(Export To File)').click(); - $('.modal span:contains(Close)').click(); + testUtils.dom.click($('.modal span:contains(Description)')); + testUtils.dom.click($('.modal .o_add_field')); + testUtils.dom.click($('.modal span:contains(Export To File)')); + testUtils.dom.click($('.modal span:contains(Close)')); list.destroy(); framework.blockUI = blockUI; @@ -183,28 +184,29 @@ QUnit.module('widgets', { }; // Open the export modal - list.$('thead th.o_list_record_selector input').click(); - list.sidebar.$('a:contains(Export)').click(); + testUtils.dom.click(list.$('thead th.o_list_record_selector input')); + testUtils.dom.click(list.sidebar.$('.o_dropdown_toggler_btn:contains(Action)')); + testUtils.dom.click(list.sidebar.$('a:contains(Export)')); assert.strictEqual($('.modal').length, 1, "a modal dialog should be open"); // Select 'Activities' in fields to export assert.strictEqual($('.modal select.o_fields_list option').length, 0, "the fields list should be empty"); - $('.modal .o_export_tree_item:contains(Activities)').click(); - $('.modal button:contains(Add)').click(); + testUtils.dom.click($('.modal .o_export_tree_item:contains(Activities)')); + testUtils.dom.click($('.modal button:contains(Add)')); assert.strictEqual($('.modal select.o_fields_list option').length, 1, "there should be one item in the fields list"); // Save fields list - $('.modal a:contains(Save fields list)').click(); - $('.modal .o_save_list > input').val('fields list').trigger('input'); - $('.modal .o_save_list > button').click(); + testUtils.dom.click($('.modal a:contains(Save fields list)')); + testUtils.fields.editInput($('.modal .o_save_list > input'), 'fields list'); + testUtils.dom.click($('.modal .o_save_list > button')); assert.verifySteps(['build_search_data', 'create'], "create should have been called"); // Close the modal and destroy list - $('.modal button span:contains(Close)').click(); + testUtils.dom.click($('.modal button span:contains(Close)')); list.destroy(); // restore create function -- cgit v1.2.3