Files
stock-logistics-warehouse/stock_packaging_calculator/tests/test_packaging_calc.py
2021-05-11 16:45:31 +02:00

197 lines
6.7 KiB
Python

# Copyright 2020 Camptocamp SA
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl)
from odoo.tests import SavepointCase
from .utils import make_pkg_values
class TestCalc(SavepointCase):
at_install = False
post_install = True
maxDiff = None
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.uom_unit = cls.env.ref("uom.product_uom_unit")
cls.product_a = cls.env["product.product"].create(
{
"name": "Product A",
"uom_id": cls.uom_unit.id,
"uom_po_id": cls.uom_unit.id,
}
)
cls.pkg_box = cls.env["product.packaging"].create(
{"name": "Box", "product_id": cls.product_a.id, "qty": 50, "barcode": "BOX"}
)
cls.pkg_big_box = cls.env["product.packaging"].create(
{
"name": "Big Box",
"product_id": cls.product_a.id,
"qty": 200,
"barcode": "BIGBOX",
}
)
cls.pkg_pallet = cls.env["product.packaging"].create(
{
"name": "Pallet",
"product_id": cls.product_a.id,
"qty": 2000,
"barcode": "PALLET",
}
)
def test_contained_mapping(self):
self.assertEqual(
self.product_a.packaging_contained_mapping,
{
str(self.pkg_pallet.id): [make_pkg_values(self.pkg_big_box, qty=10)],
str(self.pkg_big_box.id): [make_pkg_values(self.pkg_box, qty=4)],
str(self.pkg_box.id): [make_pkg_values(self.uom_unit, qty=50)],
},
)
# Update pkg qty
self.pkg_pallet.qty = 4000
self.assertEqual(
self.product_a.packaging_contained_mapping,
{
str(self.pkg_pallet.id): [make_pkg_values(self.pkg_big_box, qty=20)],
str(self.pkg_big_box.id): [make_pkg_values(self.pkg_box, qty=4)],
str(self.pkg_box.id): [make_pkg_values(self.uom_unit, qty=50)],
},
)
def test_calc_1(self):
"""Test easy behavior 1."""
expected = [
make_pkg_values(self.pkg_pallet, qty=1),
make_pkg_values(self.pkg_big_box, qty=3),
make_pkg_values(self.pkg_box, qty=1),
make_pkg_values(self.uom_unit, qty=5),
]
self.assertEqual(self.product_a.product_qty_by_packaging(2655), expected)
def test_calc_2(self):
"""Test easy behavior 2."""
expected = [
make_pkg_values(self.pkg_big_box, qty=1),
make_pkg_values(self.pkg_box, qty=3),
]
self.assertEqual(self.product_a.product_qty_by_packaging(350), expected)
def test_calc_3(self):
"""Test easy behavior 3."""
expected = [
make_pkg_values(self.pkg_box, qty=1),
make_pkg_values(self.uom_unit, qty=30),
]
self.assertEqual(self.product_a.product_qty_by_packaging(80), expected)
def test_calc_6(self):
"""Test fractional qty is lost."""
expected = [
make_pkg_values(self.pkg_box, qty=1),
]
self.assertEqual(self.product_a.product_qty_by_packaging(50.5), expected)
def test_calc_filter(self):
"""Test packaging filter."""
expected = [
make_pkg_values(self.pkg_big_box, qty=13),
make_pkg_values(self.pkg_box, qty=1),
make_pkg_values(self.uom_unit, qty=5),
]
self.assertEqual(
self.product_a.with_context(
_packaging_filter=lambda x: x != self.pkg_pallet
).product_qty_by_packaging(2655),
expected,
)
def test_calc_name_get(self):
"""Test custom name getter."""
expected = [
make_pkg_values(self.pkg_pallet, qty=1, name="FOO " + self.pkg_pallet.name),
make_pkg_values(
self.pkg_big_box, qty=3, name="FOO " + self.pkg_big_box.name
),
make_pkg_values(self.pkg_box, qty=1, name="FOO " + self.pkg_box.name),
make_pkg_values(self.uom_unit, qty=5, name=self.uom_unit.name),
]
self.assertEqual(
self.product_a.with_context(
_packaging_name_getter=lambda x: "FOO " + x.name
).product_qty_by_packaging(2655),
expected,
)
def test_calc_custom_values(self):
"""Test custom values handler."""
expected = [
{"my_qty": 1, "foo": self.pkg_pallet.name},
{"my_qty": 3, "foo": self.pkg_big_box.name},
{"my_qty": 1, "foo": self.pkg_box.name},
{"my_qty": 5, "foo": self.uom_unit.name},
]
self.assertEqual(
self.product_a.with_context(
_packaging_values_handler=lambda pkg, qty_per_pkg: {
"my_qty": qty_per_pkg,
"foo": pkg.name,
}
).product_qty_by_packaging(2655),
expected,
)
def test_calc_sub1(self):
"""Test contained packaging behavior 1."""
expected = [
make_pkg_values(
self.pkg_pallet,
qty=1,
contained=[make_pkg_values(self.pkg_big_box, qty=10)],
),
make_pkg_values(
self.pkg_big_box,
qty=3,
contained=[make_pkg_values(self.pkg_box, qty=4)],
),
make_pkg_values(
self.pkg_box, qty=1, contained=[make_pkg_values(self.uom_unit, qty=50)],
),
make_pkg_values(self.uom_unit, qty=5, contained=None),
]
self.assertEqual(
self.product_a.product_qty_by_packaging(2655, with_contained=True),
expected,
)
def test_calc_sub2(self):
"""Test contained packaging behavior 2."""
self.pkg_box.qty = 30
expected = [
make_pkg_values(
self.pkg_pallet,
qty=1,
contained=[make_pkg_values(self.pkg_big_box, qty=10)],
),
make_pkg_values(
self.pkg_big_box,
qty=3,
contained=[
make_pkg_values(self.pkg_box, qty=6),
make_pkg_values(self.uom_unit, qty=20),
],
),
make_pkg_values(
self.pkg_box, qty=1, contained=[make_pkg_values(self.uom_unit, qty=30)],
),
make_pkg_values(self.uom_unit, qty=25, contained=None),
]
self.assertEqual(
self.product_a.product_qty_by_packaging(2655, with_contained=True),
expected,
)