1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/website_sale_loyalty/tests/test_sale_coupon_multiwebsite.py
2024-12-10 09:04:09 +07:00

173 lines
7.5 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.sale_loyalty.tests.common import TestSaleCouponNumbersCommon
from odoo.addons.website.tools import MockRequest
from odoo.exceptions import UserError
from odoo.tests import tagged
@tagged('-at_install', 'post_install')
class TestSaleCouponMultiwebsite(TestSaleCouponNumbersCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.website = cls.env['website'].browse(1)
cls.website2 = cls.env['website'].create({'name': 'website 2'})
def test_01_multiwebsite_checks(self):
""" Ensure the multi website compliance of programs and coupons, both in
backend and frontend.
"""
order = self.empty_order
self.env['sale.order.line'].create({
'product_id': self.largeCabinet.id,
'name': 'Large Cabinet',
'product_uom_qty': 2.0,
'order_id': order.id,
})
def _remove_reward():
order.order_line.filtered('is_reward_line').unlink()
self.assertEqual(len(order.order_line.ids), 1, "Program should have been removed")
def _apply_code(code, backend=True):
try:
self._apply_promo_code(order, code)
except UserError as e:
if backend:
raise e
# ==========================================
# ========== Programs (with code) ==========
# ==========================================
# 1. Backend - Generic
_apply_code(self.p1.rule_ids.code)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic promo program")
_remove_reward()
# 2. Frontend - Generic
with MockRequest(self.env, website=self.website):
_apply_code(self.p1.rule_ids.code, False)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic promo program (2)")
_remove_reward()
# make program specific
self.p1.website_id = self.website.id
# 3. Backend - Specific - sale_ok disabled
self.p1.sale_ok = False
with self.assertRaises(UserError):
_apply_code(self.p1.rule_ids.code) # the program is not enabled for Sales (backend)
# 3.5. Backend - Specific - sale_ok enabled
self.p1.sale_ok = True
_apply_code(self.p1.rule_ids.code)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is enabled for Sales(backend)")
_remove_reward()
# 4. Frontend - Specific - Correct website
order.website_id = self.website.id
with MockRequest(self.env, website=self.website):
_apply_code(self.p1.rule_ids.code, False)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a specific promo program for the correct website")
_remove_reward()
# 5. Frontend - Specific - Wrong website
self.p1.website_id = self.website2.id
with MockRequest(self.env, website=self.website):
_apply_code(self.p1.rule_ids.code, False)
self.assertEqual(len(order.order_line.ids), 1, "Should not get the reward as wrong website")
# ==============================
# =========== Coupons ==========
# ==============================
order.website_id = False
self.env['loyalty.generate.wizard'].with_context(active_id=self.discount_coupon_program.id).create({
'coupon_qty': 4,
'points_granted': 1,
}).generate_coupons()
coupons = self.discount_coupon_program.coupon_ids
# 1. Backend - Generic
_apply_code(coupons[0].code)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic coupon program")
_remove_reward()
# 2. Frontend - Generic
with MockRequest(self.env, website=self.website):
_apply_code(coupons[1].code, False)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic coupon program (2)")
_remove_reward()
# make program specific
self.discount_coupon_program.website_id = self.website.id
# 3. Backend - Specific - sale_ok disabled
self.discount_coupon_program.sale_ok = False
with self.assertRaises(UserError):
_apply_code(coupons[2].code) # the program is not enabled for Sales (backend)
# 3.5. Backend - Specific - sale_ok enabled
self.discount_coupon_program.sale_ok = True
_apply_code(coupons[2].code)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is enabled for Sales(backend)")
_remove_reward()
# 4. Frontend - Specific - Correct website
order.website_id = self.website.id
with MockRequest(self.env, website=self.website):
_apply_code(coupons[2].code, False)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a specific coupon program for the correct website")
_remove_reward()
# 5. Frontend - Specific - Wrong website
self.discount_coupon_program.website_id = self.website2.id
with MockRequest(self.env, website=self.website):
_apply_code(coupons[3].code, False)
self.assertEqual(len(order.order_line.ids), 1, "Should not get the reward as wrong website")
# ========================================
# ========== Programs (no code) ==========
# ========================================
order.website_id = False
self.p1.website_id = False
self.p1.rule_ids.code = False
self.p1.trigger = 'auto'
self.p1.rule_ids.mode = 'auto'
# 1. Backend - Generic
all_programs = self.env['loyalty.program'].search([])
self._auto_rewards(order, all_programs)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic promo program")
# 2. Frontend - Generic
with MockRequest(self.env, website=self.website):
self._auto_rewards(order, all_programs)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic promo program (2)")
# make program specific
self.p1.website_id = self.website.id
# 3. Backend - Specific
self.p1.sale_ok = False
self._auto_rewards(order, all_programs)
self.assertEqual(len(order.order_line.ids), 1, "The program is not enabled for Sales (backend)")
# 3.5. Backend - Specific - sale_ok enabled
self.p1.sale_ok = True
self._auto_rewards(order, all_programs)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a generic promo program")
# 4. Frontend - Specific - Correct website
order.website_id = self.website.id
with MockRequest(self.env, website=self.website):
self._auto_rewards(order, all_programs)
self.assertEqual(len(order.order_line.ids), 2, "Should get the discount line as it is a specific promo program for the correct website")
# 5. Frontend - Specific - Wrong website
self.p1.website_id = self.website2.id
with MockRequest(self.env, website=self.website):
self._auto_rewards(order, all_programs)
self.assertEqual(len(order.order_line.ids), 1, "Should not get the reward as wrong website")