Skip to content

Commit 0c577d5

Browse files
committed
[ADD] sale_order_confirm_partial: add tests
1 parent c449bef commit 0c577d5

File tree

2 files changed

+220
-0
lines changed

2 files changed

+220
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Copyright (C) 2024 Cetmix OÜ
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
from . import test_sale_order_confirm_partial
Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
# Copyright (C) 2024 Cetmix OÜ
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
from odoo import exceptions
4+
from odoo.tests import TransactionCase, tagged
5+
6+
7+
@tagged("post_install", "-at_install", "test_task")
8+
class TestSaleOrderConfirmPartial(TransactionCase):
9+
@classmethod
10+
def setUpClass(cls):
11+
super().setUpClass()
12+
cls.env["ir.config_parameter"].set_param(
13+
"sale_order_confirm_partial.enabled", True
14+
)
15+
cls.sale_order = cls.env["sale.order"].create(
16+
{
17+
"name": "SO-TEST",
18+
"partner_id": cls.env.ref("base.res_partner_1").id,
19+
"pricelist_id": cls.env.ref("product.list0").id,
20+
"order_line": [
21+
(
22+
0,
23+
0,
24+
{
25+
"product_id": cls.env.ref("product.product_product_6").id,
26+
"product_uom_qty": 10,
27+
"price_unit": 100,
28+
},
29+
),
30+
(
31+
0,
32+
0,
33+
{
34+
"product_id": cls.env.ref("product.product_product_7").id,
35+
"product_uom_qty": 7,
36+
"price_unit": 200,
37+
},
38+
),
39+
],
40+
}
41+
)
42+
43+
def test_confirmation_with_save_unconfirmed_all(self):
44+
self.env["ir.config_parameter"].set_param(
45+
"sale_order_confirm_partial.save_unconfirmed", True
46+
)
47+
# Confirm SO partially
48+
self.env["sale.order.confirm.partial"].create(
49+
{"sale_order_id": self.sale_order.id, "mode": "all"}
50+
).action_confirm()
51+
52+
# Check SO state
53+
self.assertEqual(self.sale_order.state, "sale", "Sale order is not confirmed")
54+
55+
# Since we have confirmed all of the lines, there is no need to save
56+
# the unconfirmed part of SO
57+
unconfirmed_so = self.env["sale.order"].search([("name", "like", "SO-TEST-U")])
58+
self.assertFalse(
59+
unconfirmed_so,
60+
"Unconfirmed part of SO has been created when all of lines were confirmed.",
61+
)
62+
63+
# Check original order lines quantities
64+
# (they should stay the same)
65+
self.assertEqual(
66+
self.sale_order.order_line[0].product_uom_qty,
67+
10,
68+
"Original order line 1 qty is wrong",
69+
)
70+
self.assertEqual(
71+
self.sale_order.order_line[1].product_uom_qty,
72+
7,
73+
"Original order line 2 qty is wrong",
74+
)
75+
76+
def test_confirmation_with_save_unconfirmed_selected(self):
77+
self.env["ir.config_parameter"].set_param(
78+
"sale_order_confirm_partial.save_unconfirmed", True
79+
)
80+
# Confirm SO partially
81+
self.env["sale.order.confirm.partial"].create(
82+
{
83+
"sale_order_id": self.sale_order.id,
84+
"mode": "selected",
85+
"line_ids": [
86+
(
87+
0,
88+
0,
89+
{
90+
"so_line_id": self.sale_order.order_line[0].id,
91+
"confirmed_qty": 4,
92+
},
93+
),
94+
],
95+
}
96+
).action_confirm()
97+
98+
# Check SO state
99+
self.assertEqual(self.sale_order.state, "sale", "Sale order is not confirmed")
100+
101+
# Since we have confirmed selected line, we need to save
102+
# the unconfirmed part of SO
103+
unconfirmed_so = self.env["sale.order"].search([("name", "like", "SO-TEST-U")])
104+
self.assertTrue(
105+
unconfirmed_so,
106+
"Unconfirmed part of SO hasn't been created when order was confirmed partially.",
107+
)
108+
# Check unconfirmed SO status
109+
self.assertEqual(
110+
unconfirmed_so.state, "cancel", "Unconfirmed SO is not in cancel state"
111+
)
112+
# Check unconfirmed order lines quantities
113+
# (they should be equal to statement original_qty - confirmed_qty)
114+
self.assertEqual(
115+
unconfirmed_so.order_line[0].product_uom_qty,
116+
6,
117+
"Unconfirmed part of order line 1 qty is wrong",
118+
)
119+
self.assertEqual(
120+
unconfirmed_so.order_line[1].product_uom_qty,
121+
7,
122+
"Unconfirmed part of order line 2 qty is wrong",
123+
)
124+
125+
# Check original order lines quantities
126+
# (they should be reduced accordingly to the confirmed quantities)
127+
self.assertEqual(
128+
self.sale_order.order_line[0].product_uom_qty,
129+
4,
130+
"Original order line 1 qty is wrong",
131+
)
132+
self.assertEqual(
133+
self.sale_order.order_line[1].product_uom_qty,
134+
0,
135+
"Original order line 2 qty is wrong",
136+
)
137+
138+
def test_confirmation_without_save_unconfirmed_selected(self):
139+
# Confirm SO partially
140+
self.env["sale.order.confirm.partial"].create(
141+
{
142+
"sale_order_id": self.sale_order.id,
143+
"mode": "selected",
144+
"line_ids": [
145+
(
146+
0,
147+
0,
148+
{
149+
"so_line_id": self.sale_order.order_line[0].id,
150+
"confirmed_qty": 4,
151+
},
152+
),
153+
],
154+
}
155+
).action_confirm()
156+
157+
# Check SO state
158+
self.assertEqual(self.sale_order.state, "sale", "Sale order is not confirmed")
159+
160+
# Since we have confirmed selected line, we need to save
161+
# the unconfirmed part of SO (but it's disabled)
162+
unconfirmed_so = self.env["sale.order"].search([("name", "like", "SO-TEST-U")])
163+
self.assertFalse(
164+
unconfirmed_so,
165+
"Unconfirmed part of SO has been created but settings option is disabled.",
166+
)
167+
168+
# Check original order lines quantities
169+
# (they should be reduced accordingly to the confirmed quantities)
170+
self.assertEqual(
171+
self.sale_order.order_line[0].product_uom_qty,
172+
4,
173+
"Original order line 1 qty is wrong",
174+
)
175+
self.assertEqual(
176+
self.sale_order.order_line[1].product_uom_qty,
177+
0,
178+
"Original order line 2 qty is wrong",
179+
)
180+
181+
def test_sale_order_confirm_errors(self):
182+
# Try to create confirmation for quantity less the zero
183+
with self.assertRaises(exceptions.ValidationError):
184+
self.env["sale.order.confirm.partial"].create(
185+
{
186+
"sale_order_id": self.sale_order.id,
187+
"mode": "selected",
188+
"line_ids": [
189+
(
190+
0,
191+
0,
192+
{
193+
"so_line_id": self.sale_order.order_line[0].id,
194+
"confirmed_qty": -4,
195+
},
196+
),
197+
],
198+
}
199+
)
200+
# Try to create confirmation for quantity greater than original quantity
201+
with self.assertRaises(exceptions.ValidationError):
202+
self.env["sale.order.confirm.partial"].create(
203+
{
204+
"sale_order_id": self.sale_order.id,
205+
"mode": "selected",
206+
"line_ids": [
207+
(
208+
0,
209+
0,
210+
{
211+
"so_line_id": self.sale_order.order_line[0].id,
212+
"confirmed_qty": 15,
213+
},
214+
),
215+
],
216+
}
217+
)

0 commit comments

Comments
 (0)