Files
stock-logistics-warehouse/stock_cubiscan/tests/test_cubiscan_wizard.py
2020-08-27 10:03:46 +02:00

143 lines
4.7 KiB
Python

# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from cubiscan.cubiscan import CubiScan
from mock import patch
from odoo.tests.common import SavepointCase
class TestCubiscanWizard(SavepointCase):
@staticmethod
def get_measure_result(length, width, height, weight):
return {
"origin": "1",
"location": "dev001",
"length": (length, None),
"width": (width, None),
"height": (height, None),
"space_metric": True,
"weight": (weight, None),
"dim_weight": (weight, None),
"weight_metric": True,
"factor": 1,
"intl_unit": True,
}
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.device_obj = cls.env["cubiscan.device"]
cls.cs_wizard = cls.env["cubiscan.wizard"]
PackType = cls.env["product.packaging.type"]
pack_type_data = [
("internal", 3, 1, 0),
("retail", 10, 1, 1),
("transport", 20, 1, 1),
("pallet", 30, 1, 1),
]
for name, seq, gtin, req in pack_type_data:
PackType.create(
{
"name": name,
"code": name.upper(),
"sequence": seq,
"has_gtin": gtin,
"required": req,
}
)
cls.device = cls.device_obj.create(
{
"name": "Test Device",
"device_address": "192.168.21.42",
"port": 4242,
"state": "ready",
}
)
cls.wizard = cls.cs_wizard.create({"device_id": cls.device.id})
cls.product_1 = cls.env.ref("product.product_product_6")
cls.product_2 = cls.env.ref("product.product_product_7")
cls.product_1.barcode = "424242"
PackType.cron_check_create_required_packaging()
def test_product_onchange(self):
self.wizard.product_id = self.product_1.id
self.assertEqual(len(self.wizard.line_ids), 0)
self.wizard.onchange_product_id()
self.assertEqual(len(self.wizard.line_ids), 6)
def test_product_onchange_barcode(self):
self.assertFalse(self.wizard.product_id)
self.assertFalse(self.wizard.line_ids)
self.wizard.on_barcode_scanned("424242")
self.assertEqual(self.wizard.product_id, self.product_1)
self.assertEqual(len(self.wizard.line_ids), 6)
def test_cubiscan_measures(self):
self.wizard.product_id = self.product_1.id
self.wizard.onchange_product_id()
with patch.object(CubiScan, "_make_request") as request:
for idx, line in enumerate(self.wizard.line_ids):
request.return_value = TestCubiscanWizard.get_measure_result(
2 ** idx, 1, 1, 2 ** idx
)
line.cubiscan_measure()
self.assertEqual(
line.read(["lngth", "width", "height", "max_weight", "volume"])[0],
{
"id": line.id,
"lngth": (2 ** idx) * 1000,
"width": 1000,
"height": 1000,
"max_weight": 2.0 ** idx,
"volume": 2.0 ** idx,
},
)
self.wizard.action_save()
mm_uom = self.env.ref("stock_cubiscan.product_uom_mm")
self.assertEqual(
self.product_1.read(
[
"product_length",
"product_width",
"product_height",
"weight",
"volume",
"dimensional_uom_id",
]
)[0],
{
"id": self.product_1.id,
"product_length": 1000,
"product_width": 1000,
"product_height": 1000,
"weight": 1.0,
"volume": 1.0,
"dimensional_uom_id": (mm_uom.id, mm_uom.name),
},
)
packagings = self.product_1.packaging_ids.sorted()
self.assertEqual(len(packagings), 5)
for idx, packaging in enumerate(packagings, 1):
self.assertEqual(
packaging.read(["lngth", "width", "height", "max_weight", "volume"])[0],
{
"id": packaging.id,
"lngth": (2 ** idx) * 1000,
"width": 1000,
"height": 1000,
"max_weight": 2.0 ** idx,
"volume": 2.0 ** idx,
},
)