diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_form/static/tests | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_form/static/tests')
| -rw-r--r-- | addons/website_form/static/tests/tours/website_form_editor.js | 438 |
1 files changed, 438 insertions, 0 deletions
diff --git a/addons/website_form/static/tests/tours/website_form_editor.js b/addons/website_form/static/tests/tours/website_form_editor.js new file mode 100644 index 00000000..97708dcc --- /dev/null +++ b/addons/website_form/static/tests/tours/website_form_editor.js @@ -0,0 +1,438 @@ +odoo.define('website_form_editor.tour', function (require) { + 'use strict'; + + const rpc = require('web.rpc'); + const tour = require("web_tour.tour"); + + const selectButtonByText = function (text) { + return [{ + content: "Open the select", + trigger: `we-select:has(we-button:contains("${text}")) we-toggler`, + }, + { + content: "Click on the option", + trigger: `we-select we-button:contains("${text}")`, + }]; + }; + const selectButtonByData = function (data) { + return [{ + content: "Open the select", + trigger: `we-select:has(we-button[${data}]) we-toggler`, + }, { + content: "Click on the option", + trigger: `we-select we-button[${data}]`, + }]; + }; + const addField = function (data, name, type, label, required, hidden) { + const ret = [{ + content: "Select form", + extra_trigger: '.s_website_form_field', + trigger: 'section.s_website_form', + }, { + content: "Add field", + trigger: 'we-button[data-add-field]', + }, + ...selectButtonByData(data), + { + content: "Wait for field to load", + trigger: `.s_website_form_field[data-type="${name}"], .s_website_form_input[name="${name}"]`, //custom or existing field + run: function () {}, + }]; + let testText = '.s_website_form_field'; + if (required) { + testText += '.s_website_form_required'; + ret.push({ + content: "Mark the field as required", + trigger: 'we-button[data-name="required_opt"] we-checkbox', + }); + } + if (hidden) { + testText += '.s_website_form_field_hidden'; + ret.push({ + content: "Mark the field as hidden", + trigger: 'we-button[data-name="hidden_opt"] we-checkbox', + }); + } + if (label) { + testText += `:has(label:contains("${label}"))`; + ret.push({ + content: "Change the label text", + trigger: 'we-input[data-set-label-text] input', + run: `text ${label}`, + }); + } + if (type !== 'checkbox' && type !== 'radio' && type !== 'select') { + let inputType = type === 'textarea' ? type : `input[type="${type}"]`; + testText += `:has(${inputType}[name="${name}"]${required ? '[required]' : ''})`; + } + ret.push({ + content: "Check the resulting field", + trigger: testText, + run: function () {}, + }); + return ret; + }; + const addCustomField = function (name, type, label, required, hidden) { + return addField(`data-custom-field="${name}"`, name, type, label, required, hidden); + }; + const addExistingField = function (name, type, label, required, hidden) { + return addField(`data-existing-field="${name}"`, name, type, label, required, hidden); + }; + + tour.register("website_form_editor_tour", { + test: true, + }, [ + // Drop a form builder snippet and configure it + { + content: "Enter edit mode", + trigger: 'a[data-action=edit]', + }, { + content: "Drop the form snippet", + trigger: '#oe_snippets .oe_snippet:has(.s_website_form) .oe_snippet_thumbnail', + run: 'drag_and_drop #wrap', + }, { + content: "Check dropped snippet and select it", + extra_trigger: '.s_website_form_field', + trigger: 'section.s_website_form', + }, + ...selectButtonByText('Send an E-mail'), + { + content: "Form has a model name", + trigger: 'section.s_website_form form[data-model_name="mail.mail"]', + }, { + content: "Complete Recipient E-mail", + trigger: '[data-field-name="email_to"] input', + run: 'text_blur test@test.test', + }, + ...addExistingField('date', 'text', 'Test Date', true), + + ...addExistingField('record_name', 'text', 'Awesome Label', false, true), + + ...addExistingField('body_html', 'textarea', 'Your Message', true), + + ...addExistingField('recipient_ids', 'checkbox'), + + ...addCustomField('one2many', 'checkbox', 'Products', true), + { + content: "Change Option 1 label", + trigger: 'we-list table input:eq(0)', + run: 'text Iphone', + }, { + content: "Change Option 2 label", + trigger: 'we-list table input:eq(1)', + run: 'text Galaxy S', + }, { + content: "Change first Option 3 label", + trigger: 'we-list table input:eq(2)', + run: 'text Xperia', + }, { + content: "Click on Add new Checkbox", + trigger: 'we-list we-button.o_we_list_add_optional', + }, { + content: "Change added Option label", + trigger: 'we-list table input:eq(3)', + run: 'text Wiko Stairway', + }, { + content: "Check the resulting field", + trigger: ".s_website_form_field.s_website_form_custom.s_website_form_required" + + ":has(.s_website_form_multiple[data-display='horizontal'])" + + ":has(.checkbox:has(label:contains('Iphone')):has(input[type='checkbox'][required]))" + + ":has(.checkbox:has(label:contains('Galaxy S')):has(input[type='checkbox'][required]))" + + ":has(.checkbox:has(label:contains('Xperia')):has(input[type='checkbox'][required]))" + + ":has(.checkbox:has(label:contains('Wiko Stairway')):has(input[type='checkbox'][required]))", + run: function () {}, + }, + ...selectButtonByData('data-multi-checkbox-display="vertical"'), + { + content: "Check the resulting field", + trigger: ".s_website_form_field.s_website_form_custom.s_website_form_required" + + ":has(.s_website_form_multiple[data-display='vertical'])" + + ":has(.checkbox:has(label:contains('Iphone')):has(input[type='checkbox'][required]))" + + ":has(.checkbox:has(label:contains('Galaxy S')):has(input[type='checkbox'][required]))" + + ":has(.checkbox:has(label:contains('Xperia')):has(input[type='checkbox'][required]))" + + ":has(.checkbox:has(label:contains('Wiko Stairway')):has(input[type='checkbox'][required]))", + run: function () {}, + }, + + ...addCustomField('selection', 'radio', 'Service', true), + { + content: "Change Option 1 label", + trigger: 'we-list table input:eq(0)', + run: 'text After-sales Service', + }, { + content: "Change Option 2 label", + trigger: 'we-list table input:eq(1)', + run: 'text Invoicing Service', + }, { + content: "Change first Option 3 label", + trigger: 'we-list table input:eq(2)', + run: 'text Development Service', + }, { + content: "Click on Add new Checkbox", + trigger: 'we-list we-button.o_we_list_add_optional', + }, { + content: "Change last Option label", + trigger: 'we-list table input:eq(3)', + run: 'text Management Service', + }, { + content: "Mark the field as not required", + trigger: 'we-button[data-name="required_opt"] we-checkbox', + }, { + content: "Check the resulting field", + trigger: ".s_website_form_field.s_website_form_custom:not(.s_website_form_required)" + + ":has(.radio:has(label:contains('After-sales Service')):has(input[type='radio']:not([required])))" + + ":has(.radio:has(label:contains('Invoicing Service')):has(input[type='radio']:not([required])))" + + ":has(.radio:has(label:contains('Development Service')):has(input[type='radio']:not([required])))" + + ":has(.radio:has(label:contains('Management Service')):has(input[type='radio']:not([required])))", + run: function () {}, + }, + + ...addCustomField('many2one', 'select', 'State', true), + + // Customize custom selection field + { + content: "Change Option 1 Label", + trigger: 'we-list table input:eq(0)', + run: 'text Germany', + }, { + content: "Change Option 2 Label", + trigger: 'we-list table input:eq(1)', + run: 'text Belgium', + }, { + content: "Change first Option 3 label", + trigger: 'we-list table input:eq(2)', + run: 'text France', + }, { + content: "Click on Add new Checkbox", + trigger: 'we-list we-button.o_we_list_add_optional', + }, { + content: "Change last Option label", + trigger: 'we-list table input:eq(3)', + run: 'text Canada', + }, { + content: "Remove Germany Option", + trigger: '.o_we_select_remove_option:eq(0)', + }, { + content: "Check the resulting snippet", + trigger: ".s_website_form_field.s_website_form_custom.s_website_form_required" + + ":has(label:contains('State'))" + + ":has(select[required]:hidden)" + + ":has(.s_website_form_select_item:contains('Belgium'))" + + ":has(.s_website_form_select_item:contains('France'))" + + ":has(.s_website_form_select_item:contains('Canada'))" + + ":not(:has(.s_website_form_select_item:contains('Germany')))", + run: function () {}, + }, + + ...addExistingField('attachment_ids', 'file', 'Invoice Scan'), + + // Edit the submit button using linkDialog. + { + content: "Double click submit button to edit it", + trigger: '.s_website_form_send', + run: 'dblclick', + }, { + content: "Check that no URL field is suggested", + trigger: 'form:has(#o_link_dialog_label_input:hidden)', + run: () => null, + }, { + content: "Check that preview element has the same style", + trigger: '.o_link_dialog_preview:has(.s_website_form_send.btn.btn-lg.btn-primary)', + run: () => null, + }, { + content: "Change button's style", + trigger: 'label:has(input[name="link_style_color"][value="secondary"])', + run: () => { + $('input[name="link_style_color"][value="secondary"]').click(); + $('select[name="link_style_shape"]').val('rounded-circle').change(); + $('select[name="link_style_size"]').val('sm').change(); + }, + }, { + content: "Check that preview is updated too", + trigger: '.o_link_dialog_preview:has(.s_website_form_send.btn.btn-sm.btn-secondary.rounded-circle)', + run: () => null, + }, { + content: "Save changes from linkDialog", + trigger: '.modal-footer .btn-primary', + }, { + content: "Check the resulting button", + trigger: '.s_website_form_send.btn.btn-sm.btn-secondary.rounded-circle', + run: () => null, + }, + // Save the page + { + trigger: 'body', + run: function () { + $('body').append('<div id="completlyloaded"></div>'); + }, + }, + { + content: "Save the page", + trigger: "button[data-action=save]", + }, + { + content: "Wait reloading...", + trigger: "html:not(:has(#completlyloaded)) div", + } + ]); + + tour.register("website_form_editor_tour_submit", { + test: true, + },[ + { + content: "Try to send empty form", + extra_trigger: "form[data-model_name='mail.mail']" + + "[data-success-page='/contactus-thank-you']" + + ":has(.s_website_form_field:has(label:contains('Your Name')):has(input[type='text'][name='Your Name'][required]))" + + ":has(.s_website_form_field:has(label:contains('Email')):has(input[type='email'][name='email_from'][required]))" + + ":has(.s_website_form_field:has(label:contains('Your Question')):has(textarea[name='Your Question'][required]))" + + ":has(.s_website_form_field:has(label:contains('Subject')):has(input[type='text'][name='subject'][required]))" + + ":has(.s_website_form_field:has(label:contains('Test Date')):has(input[type='text'][name='date'][required]))" + + ":has(.s_website_form_field:has(label:contains('Awesome Label')):hidden)" + + ":has(.s_website_form_field:has(label:contains('Your Message')):has(textarea[name='body_html'][required]))" + + ":has(.s_website_form_field:has(label:contains('Products')):has(input[type='checkbox'][name='Products'][value='Iphone'][required]))" + + ":has(.s_website_form_field:has(label:contains('Products')):has(input[type='checkbox'][name='Products'][value='Galaxy S'][required]))" + + ":has(.s_website_form_field:has(label:contains('Products')):has(input[type='checkbox'][name='Products'][value='Xperia'][required]))" + + ":has(.s_website_form_field:has(label:contains('Products')):has(input[type='checkbox'][name='Products'][value='Wiko Stairway'][required]))" + + ":has(.s_website_form_field:has(label:contains('Service')):has(input[type='radio'][name='Service'][value='After-sales Service']:not([required])))" + + ":has(.s_website_form_field:has(label:contains('Service')):has(input[type='radio'][name='Service'][value='Invoicing Service']:not([required])))" + + ":has(.s_website_form_field:has(label:contains('Service')):has(input[type='radio'][name='Service'][value='Development Service']:not([required])))" + + ":has(.s_website_form_field:has(label:contains('Service')):has(input[type='radio'][name='Service'][value='Management Service']:not([required])))" + + ":has(.s_website_form_field:has(label:contains('State')):has(select[name='State'][required]:has(option[value='Belgium'])))" + + ":has(.s_website_form_field.s_website_form_required:has(label:contains('State')):has(select[name='State'][required]:has(option[value='France'])))" + + ":has(.s_website_form_field:has(label:contains('State')):has(select[name='State'][required]:has(option[value='Canada'])))" + + ":has(.s_website_form_field:has(label:contains('Invoice Scan')))" + + ":has(.s_website_form_field:has(input[name='email_to'][value='test@test.test']))", + trigger: ".s_website_form_send" + }, + { + content: "Check if required fields were detected and complete the Subject field", + extra_trigger: "form:has(#s_website_form_result.text-danger)" + + ":has(.s_website_form_field:has(label:contains('Your Name')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Email')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Your Question')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Subject')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Test Date')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Your Message')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Products')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Service')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('State')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('Invoice Scan')):not(.o_has_error))", + trigger: "input[name=subject]", + run: "text Jane Smith" + }, + { + content: "Update required field status by trying to Send again", + trigger: ".s_website_form_send" + }, + { + content: "Check if required fields were detected and complete the Message field", + extra_trigger: "form:has(#s_website_form_result.text-danger)" + + ":has(.s_website_form_field:has(label:contains('Your Name')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Email')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Your Question')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Subject')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('Test Date')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Your Message')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Products')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Service')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('State')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('Invoice Scan')):not(.o_has_error))", + trigger: "textarea[name=body_html]", + run: "text A useless message" + }, + { + content: "Update required field status by trying to Send again", + trigger: ".s_website_form_send" + }, + { + content: "Check if required fields was detected and check a product. If this fails, you probably broke the cleanForSave.", + extra_trigger: "form:has(#s_website_form_result.text-danger)" + + ":has(.s_website_form_field:has(label:contains('Your Name')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Email')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Your Question')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Subject')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('Test Date')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Your Message')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('Products')).o_has_error)" + + ":has(.s_website_form_field:has(label:contains('Service')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('State')):not(.o_has_error))" + + ":has(.s_website_form_field:has(label:contains('Invoice Scan')):not(.o_has_error))", + trigger: "input[name=Products][value='Wiko Stairway']" + }, + { + content: "Complete Date field", + trigger: ".s_website_form_datetime [data-toggle='datetimepicker']", + }, + { + content: "Check another product", + trigger: "input[name='Products'][value='Xperia']" + }, + { + content: "Check a service", + trigger: "input[name='Service'][value='Development Service']" + }, + { + content: "Complete Your Name field", + trigger: "input[name='Your Name']", + run: "text chhagan" + }, + { + content: "Complete Email field", + trigger: "input[name=email_from]", + run: "text test@mail.com" + }, + { + content: "Complete Subject field", + trigger: 'input[name="subject"]', + run: 'text subject', + }, + { + content: "Complete Your Question field", + trigger: "textarea[name='Your Question']", + run: "text magan" + }, + { + content: "Send the form", + trigger: ".s_website_form_send" + }, + { + content: "Check form is submitted without errors", + trigger: "#wrap:has(h1:contains('Thank You!'))" + } + ]); + + tour.register("website_form_editor_tour_results", { + test: true, + }, [ + { + content: "Check mail.mail records have been created", + trigger: "body", + run: function () { + var mailDef = rpc.query({ + model: 'mail.mail', + method: 'search_count', + args: [[ + ['email_to', '=', 'test@test.test'], + ['body_html', 'like', 'A useless message'], + ['body_html', 'like', 'Service : Development Service'], + ['body_html', 'like', 'State : Belgium'], + ['body_html', 'like', 'Products : Xperia,Wiko Stairway'] + ]], + }); + var success = function(model, count) { + if (count > 0) { + $('body').append('<div id="website_form_editor_success_test_tour_'+model+'"></div>'); + } + }; + mailDef.then(_.bind(success, this, 'mail_mail')); + } + }, + { + content: "Check mail.mail records have been created", + trigger: "#website_form_editor_success_test_tour_mail_mail" + } + ]); + + return {}; +}); |
