diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js index 891a1742d90..0f351b8be5e 100644 --- a/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js +++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js @@ -9,7 +9,7 @@ tour.register('sale_product_configurator_advanced_tour', { url: "/web", test: true, }, [tour.STEPS.SHOW_APPS_MENU_ITEM, { - trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]', + trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]', // Note: The module sale_management is mandatory edition: 'community' }, { trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]', @@ -37,7 +37,7 @@ tour.register('sale_product_configurator_advanced_tour', { $input.trigger(keyDownEvent); } }, { - trigger: 'ul.ui-autocomplete a:contains("Customizable Desk")', + trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")', run: 'click' }, { trigger: 'span:contains("Custom")', @@ -103,14 +103,14 @@ tour.register('sale_product_configurator_advanced_tour', { extra_trigger: '.oe_optional_products_modal', run: function () {} //check }, { - trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("Conference Chair (CONFIG) (Steel)")', + trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("Conference Chair (TEST) (Steel)")', run: function () { optionVariantImage = $('.oe_optional_products_modal .js_product:eq(1) img.variant_image').attr('src'); } }, { trigger: '.oe_optional_products_modal .js_product:eq(1) input[data-value_name="Aluminium"]', }, { - trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("Conference Chair (CONFIG) (Aluminium)")', + trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("Conference Chair (TEST) (Aluminium)")', run: function () { var newVariantImage = $('.oe_optional_products_modal .js_product:eq(1) img.variant_image').attr('src'); if (newVariantImage !== optionVariantImage) { @@ -126,7 +126,7 @@ tour.register('sale_product_configurator_advanced_tour', { extra_trigger: '.oe_optional_products_modal', run: 'click' }, { - trigger: 'td.o_data_cell:contains("Customizable Desk (CONFIG) (Custom, White, PAV9, PAV5, PAV1)")', + trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Custom, White, PAV9, PAV5, PAV1)")', extra_trigger: 'div[name="order_line"]', in_modal: false, run: function (){} //check diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js index d5de6358294..907cc86382a 100644 --- a/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js +++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js @@ -28,7 +28,7 @@ tour.register('sale_product_configurator_edition_tour', { $input.trigger(keyDownEvent); } }, { - trigger: 'ul.ui-autocomplete a:contains("Customizable Desk")', + trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")', run: 'click' }, { trigger: '.configurator_container span:contains("Steel")', @@ -49,7 +49,7 @@ tour.register('sale_product_configurator_edition_tour', { extra_trigger: '.oe_optional_products_modal', run: 'click' }, { - trigger: 'td.o_data_cell:contains("Customizable Desk (CONFIG) (Aluminium, White)")', + trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Aluminium, White)")', extra_trigger: 'div[name="order_line"]', run: function (){} // check added product }, { @@ -94,7 +94,7 @@ tour.register('sale_product_configurator_edition_tour', { }, { trigger: '.o_sale_product_configurator_edit', }, { - trigger: 'td.o_data_cell:contains("Customizable Desk (CONFIG) (Custom, Black)")', + trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Custom, Black)")', extra_trigger: 'div[name="order_line"]', run: function (){} // check updated product }, { @@ -148,7 +148,7 @@ tour.register('sale_product_configurator_edition_tour', { run: function () { // used to check that the description does not contain a custom value anymore if ($('td.o_data_cell:contains("Custom: another nice custom value")').length === 0){ - $('td.o_data_cell:contains("Customizable Desk (CONFIG) (Steel, Black)")').html('tour success'); + $('td.o_data_cell:contains("Customizable Desk (TEST) (Steel, Black)")').html('tour success'); } } }, { diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js index c3ccafaf427..c68fc9debec 100644 --- a/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js +++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js @@ -28,7 +28,7 @@ tour.register('sale_product_configurator_optional_products_tour', { $input.trigger(keyDownEvent); } }, { - trigger: 'ul.ui-autocomplete a:contains("Customizable Desk")', + trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")', run: 'click' }, { trigger: '.o_sale_product_configurator_add' diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js index 4e38e5ce5fa..ff761c0b540 100644 --- a/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js +++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js @@ -48,7 +48,7 @@ tour.STEPS.SHOW_APPS_MENU_ITEM, $input.trigger(keyDownEvent); } }, { - trigger: 'ul.ui-autocomplete a:contains("Customizable Desk")', + trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")', run: 'click' }, { content: "check price is correct (USD)", @@ -66,7 +66,7 @@ tour.STEPS.SHOW_APPS_MENU_ITEM, trigger: '.o_sale_product_configurator_add:not(.disabled)' }, { content: "check we are on the add modal", - trigger: '.td-product_name:contains("Customizable Desk (CONFIG) (Steel, White)")', + trigger: '.td-product_name:contains("Customizable Desk (TEST) (Steel, White)")', extra_trigger: '.oe_optional_products_modal', run: 'click' }, { diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js index 9c145ce0c71..4c1b68da988 100644 --- a/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js +++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js @@ -29,7 +29,7 @@ tour.register('sale_product_configurator_single_custom_attribute_tour', { $input.trigger(keyDownEvent); } }, { - trigger: 'ul.ui-autocomplete a:contains("Customizable Desk")', + trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")', run: 'click' }, { trigger: '.configurator_container span:contains("Aluminium")', diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js index 6de323a10f3..d1857944ae7 100644 --- a/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js +++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js @@ -32,7 +32,7 @@ tour.register('sale_product_configurator_tour', { $input.trigger(keyDownEvent); } }, { - trigger: 'ul.ui-autocomplete a:contains("Customizable Desk")', + trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")', run: 'click' }, { trigger: '.configurator_container span:contains("Steel")', @@ -71,12 +71,12 @@ tour.register('sale_product_configurator_tour', { }, // check that 3 products were added to the SO { - trigger: 'td.o_data_cell:contains("Customizable Desk (CONFIG) (Aluminium, White)")', + trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Aluminium, White)")', extra_trigger: 'div[name="order_line"]', in_modal: false, run: function (){} }, { - trigger: 'td.o_data_cell:contains("Conference Chair (CONFIG) (Aluminium)")', + trigger: 'td.o_data_cell:contains("Conference Chair (TEST) (Aluminium)")', extra_trigger: 'div[name="order_line"]', in_modal: false, run: function (){} diff --git a/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py b/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py index 6e63bcebbb1..3b962f52d87 100644 --- a/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py +++ b/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py @@ -1,11 +1,107 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +import base64 + import odoo.tests +from odoo.modules.module import get_module_resource @odoo.tests.tagged('post_install', '-at_install') class TestUi(odoo.tests.HttpCase): + + def setUp(self): + super(TestUi, self).setUp() + + # Setup attributes and attributes values + self.product_attribute_1 = self.env['product.attribute'].create({ + 'name': 'Legs', + 'sequence': 10, + }) + product_attribute_value_1 = self.env['product.attribute.value'].create({ + 'name': 'Steel', + 'attribute_id': self.product_attribute_1.id, + 'sequence': 1, + }) + product_attribute_value_2 = self.env['product.attribute.value'].create({ + 'name': 'Aluminium', + 'attribute_id': self.product_attribute_1.id, + 'sequence': 2, + }) + product_attribute_2 = self.env['product.attribute'].create({ + 'name': 'Color', + 'sequence': 20, + }) + product_attribute_value_3 = self.env['product.attribute.value'].create({ + 'name': 'White', + 'attribute_id': product_attribute_2.id, + 'sequence': 1, + }) + product_attribute_value_4 = self.env['product.attribute.value'].create({ + 'name': 'Black', + 'attribute_id': product_attribute_2.id, + 'sequence': 2, + }) + + # Create product template + self.product_product_4_product_template = self.env['product.template'].create({ + 'name': 'Customizable Desk (TEST)', + 'standard_price': 500.0, + 'list_price': 750.0, + }) + + # Generate variants + self.env['product.template.attribute.line'].create([{ + 'product_tmpl_id': self.product_product_4_product_template.id, + 'attribute_id': self.product_attribute_1.id, + 'value_ids': [(4, product_attribute_value_1.id), (4, product_attribute_value_2.id)], + }, { + 'product_tmpl_id': self.product_product_4_product_template.id, + 'attribute_id': product_attribute_2.id, + 'value_ids': [(4, product_attribute_value_3.id), (4, product_attribute_value_4.id)], + + }]) + + # Apply a price_extra for the attribute Aluminium + self.product_product_4_product_template.attribute_line_ids[0].product_template_value_ids[1].price_extra = 50.40 + + + # Add a Custom attribute + product_attribute_value_7 = self.env['product.attribute.value'].create({ + 'name': 'Custom', + 'attribute_id': self.product_attribute_1.id, + 'sequence': 3, + 'is_custom': True + }) + self.product_product_4_product_template.attribute_line_ids[0].write({'value_ids': [(4, product_attribute_value_7.id)]}) + + # Disable the aluminium + black product + self.product_product_4_product_template.product_variant_ids[3].active = False + + # Setup a first optional product + img_path = get_module_resource('product', 'static', 'img', 'product_product_11-image.png') + img_content = base64.b64encode(open(img_path, "rb").read()) + self.product_product_11_product_template = self.env['product.template'].create({ + 'name': 'Conference Chair (TEST)', + 'image_1920': img_content, + 'list_price': 16.50, + }) + + self.env['product.template.attribute.line'].create({ + 'product_tmpl_id': self.product_product_11_product_template.id, + 'attribute_id': self.product_attribute_1.id, + 'value_ids': [(4, product_attribute_value_1.id), (4, product_attribute_value_2.id)], + }) + self.product_product_4_product_template.optional_product_ids = [(4, self.product_product_11_product_template.id)] + + # Setup a second optional product + self.product_product_1_product_template = self.env['product.template'].create({ + 'name': 'Chair floor protection', + 'list_price': 12.0, + }) + self.product_product_11_product_template.optional_product_ids = [(4, self.product_product_1_product_template.id)] + + def test_01_product_configurator(self): # To be able to test the product configurator, admin user must have access to "variants" feature, so we give him the right group for that self.env.ref('base.user_admin').write({'groups_id': [(4, self.env.ref('product.group_product_variant').id)]}) @@ -63,7 +159,7 @@ class TestUi(odoo.tests.HttpCase): 'attribute_id': product_attribute.id } for i in range(1, 11) for product_attribute in product_attributes]) - product_template = self.env.ref("product.product_product_4_product_template") + product_template = self.product_product_4_product_template self.env['product.template.attribute.line'].create([{ 'attribute_id': product_attribute.id, @@ -104,7 +200,7 @@ class TestUi(odoo.tests.HttpCase): 'attribute_id': product_attributes[0].id }]) - product_template = self.env.ref("product.product_product_4_product_template") + product_template = self.product_product_4_product_template self.env['product.template.attribute.line'].create([{ 'attribute_id': product_attributes[0].id, @@ -131,14 +227,14 @@ class TestUi(odoo.tests.HttpCase): # Add a 15% tax on desk tax = self.env['account.tax'].create({'name': "Test tax", 'amount': 15}) - self.env.ref('product.product_product_4_product_template').taxes_id = tax + self.product_product_4_product_template.taxes_id = tax # Remove tax from Conference Chair and Chair floor protection - self.env.ref('sale_product_configurator.product_product_1_product_template').taxes_id = None - self.env.ref('product.product_product_11_product_template').taxes_id = None + self.product_product_1_product_template.taxes_id = None + self.product_product_11_product_template.taxes_id = None # Make sure pricelist rule exist - product_template = self.env.ref('product.product_product_4_product_template') + product_template = self.product_product_4_product_template pricelist = self.env.ref('product.list0') if not pricelist.item_ids.filtered(lambda i: i.product_tmpl_id == product_template and i.applied_on == '1_product' and i.price_discount == 20): @@ -161,12 +257,15 @@ class TestUi(odoo.tests.HttpCase): """ # add an optional product to the office chair and the custo desk for testing purposes - office_chair = self.env.ref('product.product_product_12') - custo_desk = self.env.ref('product.product_product_4') + office_chair = self.env['product.product'].create({ + 'name': 'Office Chair Black', + }) + + custo_desk = self.product_product_4_product_template.product_variant_ids[0] office_chair.update({ - 'optional_product_ids': [(6, 0, [self.env.ref('sale_product_configurator.product_product_1_product_template').id])] + 'optional_product_ids': [(6, 0, [self.product_product_1_product_template.id])] }) custo_desk.update({ - 'optional_product_ids': [(6, 0, [self.env.ref('product.product_product_12_product_template').id, self.env.ref('product.product_product_11_product_template').id])] + 'optional_product_ids': [(6, 0, [office_chair.product_tmpl_id.id, self.product_product_11_product_template.id])] }) self.start_tour("/web", 'sale_product_configurator_optional_products_tour', login="admin")