forked from Mapan/odoo17e
173 lines
7.5 KiB
Python
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")
|