From ae3ed36c8ae8d6e76a42df0f6e62db396ec137f7 Mon Sep 17 00:00:00 2001 From: "Anita (anko)" Date: Tue, 26 Mar 2024 17:28:23 +0100 Subject: [PATCH] [FIX] website_sale_loyalty: ewallet application fix Due to 994ee3f commit, ewallet could no longer be applied. Part-of: odoo/odoo#159356 --- .../website_sale_loyalty/controllers/main.py | 4 +- addons/website_sale_loyalty/tests/__init__.py | 1 + .../tests/test_ewallet.py | 61 +++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 addons/website_sale_loyalty/tests/test_ewallet.py diff --git a/addons/website_sale_loyalty/controllers/main.py b/addons/website_sale_loyalty/controllers/main.py index a590780449d7f..d71189044c7ed 100644 --- a/addons/website_sale_loyalty/controllers/main.py +++ b/addons/website_sale_loyalty/controllers/main.py @@ -92,7 +92,9 @@ def claim_reward(self, reward_id, code=None, **post): coupon = coupon_ if code == coupon.code and ( (program_sudo.trigger == 'with_code' and program_sudo.program_type != 'promo_code') - or (program_sudo.trigger == 'auto' and program_sudo.applies_on == 'future') + or (program_sudo.trigger == 'auto' + and program_sudo.applies_on == 'future' + and program_sudo.program_type not in ('ewallet', 'loyalty')) ): return self.pricelist(code) if coupon: diff --git a/addons/website_sale_loyalty/tests/__init__.py b/addons/website_sale_loyalty/tests/__init__.py index cd32bf5ba49d1..5b7ac8ff03bdb 100644 --- a/addons/website_sale_loyalty/tests/__init__.py +++ b/addons/website_sale_loyalty/tests/__init__.py @@ -5,3 +5,4 @@ from . import test_shop_sale_coupon from . import test_website_sale_loyalty_delivery from . import test_free_product_reward +from . import test_ewallet diff --git a/addons/website_sale_loyalty/tests/test_ewallet.py b/addons/website_sale_loyalty/tests/test_ewallet.py new file mode 100644 index 0000000000000..677ff9c74461d --- /dev/null +++ b/addons/website_sale_loyalty/tests/test_ewallet.py @@ -0,0 +1,61 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import http, Command +from odoo.tests import tagged, HttpCase +from odoo.addons.website.tools import MockRequest +from odoo.addons.website_sale_loyalty.controllers.main import WebsiteSale +from odoo.addons.website_sale.tests.common import WebsiteSaleCommon + +@tagged('post_install', '-at_install') +class TestEwallet(HttpCase, WebsiteSaleCommon): + + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.WebsiteSaleController = WebsiteSale() + cls.website = cls.env['website'].browse(1) + + cls.topup = cls.env['product.product'].create({ + 'name': 'Ewallet Top up', + 'list_price': 50.0, + 'website_published': True, + }) + + cls.ewallet_program = cls.env['loyalty.program'].create([{ + 'name': 'E-wallet Card Program', + 'program_type': 'ewallet', + 'trigger': 'auto', + 'applies_on': 'future', + 'rule_ids': [Command.create({ + 'reward_point_mode': 'money', + 'reward_point_amount': 10, + 'product_ids': cls.topup, + })], + 'reward_ids': [Command.create({ + 'discount_mode': 'per_point', + 'discount': 1, + 'discount_applicability': 'order', + })], + }]) + installed_modules = set(cls.env['ir.module.module'].search([ + ('state', '=', 'installed'), + ]).mapped('name')) + for _ in http._generate_routing_rules(installed_modules, nodb_only=False): + pass + + def test_ewallet(self): + self.env['loyalty.generate.wizard'].create({ + 'program_id': self.ewallet_program.id, + 'coupon_qty': 1, + 'points_granted': 10, + }).generate_coupons() + + self.ewallet_program.coupon_ids[0].partner_id = self.env.user.partner_id + + order = self.empty_cart + with MockRequest(self.env, website=self.website, sale_order_id=order.id): + self.WebsiteSaleController.cart_update_json(self.consumable_product.id, set_qty=1) + self.assertEqual(order.amount_total, 20) + self.WebsiteSaleController.claim_reward(self.ewallet_program.reward_ids[0].id) + self.assertEqual(order.amount_total, 10)