diff --git a/addons/website_sale_loyalty/controllers/main.py b/addons/website_sale_loyalty/controllers/main.py index 514adc86fce..6f83d49660e 100644 --- a/addons/website_sale_loyalty/controllers/main.py +++ b/addons/website_sale_loyalty/controllers/main.py @@ -91,7 +91,7 @@ class WebsiteSale(main.WebsiteSale): if reward_sudo in rewards: coupon = coupon_ if code == coupon.code and ( - program_sudo.trigger == 'with_code' + (program_sudo.trigger == 'with_code' and program_sudo.program_type != 'promo_code') or (program_sudo.trigger == 'auto' and program_sudo.applies_on == 'future') ): return self.pricelist(code) diff --git a/addons/website_sale_loyalty/static/tests/tours/test_apply_discount_code.js b/addons/website_sale_loyalty/static/tests/tours/test_apply_discount_code.js new file mode 100644 index 00000000000..4ea2f584f67 --- /dev/null +++ b/addons/website_sale_loyalty/static/tests/tours/test_apply_discount_code.js @@ -0,0 +1,61 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import tourUtils from '@website_sale/js/tours/tour_utils'; + +registry.category("web_tour.tours").add('apply_discount_code_program_multi_rewards', { + test: true, + url: '/shop?search=Super%20Chair', + steps: () => [ + { + content: 'select Super Chair', + extra_trigger: '.oe_search_found', + trigger: '.oe_product_cart a:contains("Super Chair")', + }, + { + content: 'Add Super Chair into cart', + trigger: 'a:contains(Add to cart)', + }, + tourUtils.goToCart(), + { + content: 'insert discount code', + extra_trigger: 'form[name="coupon_code"]', + trigger: 'form[name="coupon_code"] input[name="promo"]', + run: 'text 12345' + }, + { + content: 'validate the promo code', + trigger: 'form[name="coupon_code"] .a-submit', + }, + { + content: 'check reward', + trigger: '.alert:contains("10% on Super Chair")', + isCheck: true, + }, + { + content: 'claim reward', + trigger: '.alert:contains("10% on Super Chair") .btn:contains("Claim")', + }, + { + content: 'check claimed reward', + trigger: 'div>strong:contains("10% on Super Chair")', + isCheck: true, + }, + // Try to reapply the same promo code + { + content: 'insert discount code', + extra_trigger: 'form[name="coupon_code"]', + trigger: 'form[name="coupon_code"] input[name="promo"]', + run: 'text 12345' + }, + { + content: 'validate the promo code', + trigger: 'form[name="coupon_code"] .a-submit', + }, + { + content: 'check refused message', + trigger: '.alert-danger:contains("This promo code is already applied")', + isCheck: true, + }, + ], +}); diff --git a/addons/website_sale_loyalty/tests/test_shop_sale_coupon.py b/addons/website_sale_loyalty/tests/test_shop_sale_coupon.py index 50f27cfcb40..cce84d8c4fc 100644 --- a/addons/website_sale_loyalty/tests/test_shop_sale_coupon.py +++ b/addons/website_sale_loyalty/tests/test_shop_sale_coupon.py @@ -170,7 +170,7 @@ class TestUi(TestSaleProductAttributeValueCommon, HttpCase): @tagged('post_install', '-at_install') -class TestWebsiteSaleCoupon(TransactionCase): +class TestWebsiteSaleCoupon(HttpCase): @classmethod def setUpClass(cls): @@ -259,3 +259,39 @@ class TestWebsiteSaleCoupon(TransactionCase): order._gc_abandoned_coupons() self.assertEqual(len(order.applied_coupon_ids), 0, "The coupon should've been removed from the order as more than 4 days") + + def test_02_apply_discount_code_program_multi_rewards(self): + """ + Check the triggering of a promotion program based on a promo code with multiple rewards + """ + self.env['loyalty.program'].search([]).write({'active': False}) + chair = self.env['product.product'].create({ + 'name': 'Super Chair', 'list_price': 1000, 'website_published': True + }) + self.discount_code_program_multi_rewards = self.env['loyalty.program'].create({ + 'name': 'Discount code program', + 'program_type': 'promo_code', + 'applies_on': 'current', + 'trigger': 'with_code', + 'rule_ids': [(0, 0, { + 'code': '12345', + 'reward_point_amount': 1, + 'reward_point_mode': 'order', + })], + 'reward_ids': [ + (0, 0, { + 'reward_type': 'discount', + 'discount': 10, + 'discount_applicability': 'specific', + 'required_points': 1, + 'discount_product_ids': chair, + }), + (0, 0, { + 'reward_type': 'discount', + 'discount': 50, + 'discount_applicability': 'order', + 'required_points': 1, + }), + ], + }) + self.start_tour('/', 'apply_discount_code_program_multi_rewards', login='admin') diff --git a/addons/website_sale_loyalty/views/website_sale_templates.xml b/addons/website_sale_loyalty/views/website_sale_templates.xml index 881e49aab64..456927bdcd3 100644 --- a/addons/website_sale_loyalty/views/website_sale_templates.xml +++ b/addons/website_sale_loyalty/views/website_sale_templates.xml @@ -42,7 +42,7 @@