summaryrefslogtreecommitdiff
path: root/addons/sale_coupon/tests/test_program_without_code_operations.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/sale_coupon/tests/test_program_without_code_operations.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/sale_coupon/tests/test_program_without_code_operations.py')
-rw-r--r--addons/sale_coupon/tests/test_program_without_code_operations.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/addons/sale_coupon/tests/test_program_without_code_operations.py b/addons/sale_coupon/tests/test_program_without_code_operations.py
new file mode 100644
index 00000000..b2bd4629
--- /dev/null
+++ b/addons/sale_coupon/tests/test_program_without_code_operations.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.sale_coupon.tests.common import TestSaleCouponCommon
+
+
+class TestProgramWithoutCodeOperations(TestSaleCouponCommon):
+ # Test some basic operation (create, write, unlink) on an immediate coupon program on which we should
+ # apply or remove the reward automatically, as there's no program code.
+
+ def test_immediate_program_basic_operation(self):
+
+ # 2 products A are needed
+ self.immediate_promotion_program.write({'rule_min_quantity': 2.0})
+ order = self.empty_order
+ # Test case 1 (1 A): Assert that no reward is given, as the product B is missing
+ order.write({'order_line': [
+ (0, False, {
+ 'product_id': self.product_A.id,
+ 'name': '1 Product A',
+ 'product_uom': self.uom_unit.id,
+ 'product_uom_qty': 1.0,
+ })
+ ]})
+ order.recompute_coupon_lines()
+ self.assertEqual(len(order.order_line.ids), 1, "The promo offer shouldn't have been applied as the product B isn't in the order")
+
+ # Test case 2 (1 A 1 B): Assert that no reward is given, as the product B is not present in the correct quantity
+ order.write({'order_line': [
+ (0, False, {
+ 'product_id': self.product_B.id,
+ 'name': '2 Product B',
+ 'product_uom': self.uom_unit.id,
+ 'product_uom_qty': 1.0,
+ })
+ ]})
+ order.recompute_coupon_lines()
+ self.assertEqual(len(order.order_line.ids), 2, "The promo offer shouldn't have been applied as 2 product A aren't in the order")
+
+ # Test case 3 (2 A 1 B): Assert that the reward is given as the product B is now in the order
+ order.write({'order_line': [(1, order.order_line[0].id, {'product_uom_qty': 2.0})]})
+ order.recompute_coupon_lines()
+ self.assertEqual(len(order.order_line.ids), 3, "The promo offert should have been applied, the discount is not created")
+
+ # Test case 4 (1 A 1 B): Assert that the reward is removed as we don't buy 2 products B anymore
+ order.write({'order_line': [(1, order.order_line[0].id, {'product_uom_qty': 1.0})]})
+ order.recompute_coupon_lines()
+ self.assertEqual(len(order.order_line.ids), 2, "The promo reward should have been removed as the rules are not matched anymore")
+ self.assertEqual(order.order_line[0].product_id.id, self.product_A.id, "The wrong line has been removed")
+ self.assertEqual(order.order_line[1].product_id.id, self.product_B.id, "The wrong line has been removed")
+
+ # Test case 5 (1 B): Assert that the reward is removed when the order is modified and doesn't match the rules anymore
+ order.write({'order_line': [
+ (1, order.order_line[0].id, {'product_uom_qty': 2.0}),
+ (2, order.order_line[0].id, False)
+ ]})
+ order.recompute_coupon_lines()
+ self.assertEqual(len(order.order_line.ids), 1, "The promo reward should have been removed as the rules are not matched anymore")
+ self.assertEqual(order.order_line.product_id.id, self.product_B.id, "The wrong line has been removed")