mirror of
https://github.com/bringout/oca-edi.git
synced 2026-04-18 11:52:01 +02:00
116 lines
4.8 KiB
Python
116 lines
4.8 KiB
Python
# Copyright 2023 ALBA Software S.L.
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)
|
|
|
|
|
|
from odoo.tests.common import TransactionCase
|
|
from odoo.tools import file_open
|
|
|
|
|
|
def _get_file_content(filename):
|
|
path = "base_edifact/tests/files/" + filename
|
|
with file_open(path, "rb") as fd:
|
|
return fd.read()
|
|
|
|
|
|
class TestBaseEdifact(TransactionCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.base_edifact_model = cls.env["base.edifact"]
|
|
cls.product = cls.env.ref("product.product_product_1")
|
|
cls.product.barcode = "9783898"
|
|
cls.product.default_code = "12767"
|
|
|
|
def test_pydifact_obj(self):
|
|
edifact_docu = _get_file_content("Retail_EDIFACT_ORDERS_sample1.txt")
|
|
obj = self.base_edifact_model.pydifact_obj(edifact_docu)
|
|
# [1]: to get the list messages, [0]: to get the first list value of the segments
|
|
self.assertEqual(obj[1]["segments"][0]["BGM"][1], "1AA1TEST")
|
|
|
|
def test_pydifact_obj_latin1(self):
|
|
edifact_docu = _get_file_content("test_orders_-_no_ean_in_LIN_segments.txt")
|
|
obj = self.base_edifact_model.pydifact_obj(edifact_docu)
|
|
# [1]: to get the list messages, [3]: to get the third list value of the segments
|
|
self.assertEqual(obj[1]["segments"][3]["NAD"][3], "Suppliér1")
|
|
|
|
def test_map2odoo_address(self):
|
|
"""Address segment
|
|
DP. Party to which goods should be delivered, if not identical with
|
|
consignee.
|
|
NAD+DP+5550534000086::9+++++++DE'
|
|
NAD segment: ['DP', ['5550534022101', '', '9'], '', '', '', '', '', '', 'ES']
|
|
"""
|
|
seg = ["DP", ["5550534000086", "", "9"], "", "", "", "", "", "", "ES"]
|
|
address = self.base_edifact_model.map2odoo_address(seg)
|
|
self.assertEqual(address["type"], "delivery")
|
|
self.assertEqual(address["partner"], {"gln": "5550534000086"})
|
|
self.assertEqual(address["address"]["country_code"], "ES")
|
|
|
|
def test_map2odoo_currency(self):
|
|
seg = ("2", "EUR", "9")
|
|
currency = self.base_edifact_model.map2odoo_currency(seg)
|
|
self.assertEqual(currency["iso"], "EUR")
|
|
self.assertEqual(currency["symbol"], "€")
|
|
|
|
def test_map2odoo_product(self):
|
|
seg = ("1", "", ["9783898", "EN"])
|
|
product = self.base_edifact_model.map2odoo_product(seg)
|
|
self.assertEqual(product["barcode"], "9783898")
|
|
|
|
def test_map2odoo_product_srv(self):
|
|
seg = ("1", "", ["12767", "SRV"])
|
|
product = self.base_edifact_model.map2odoo_product(seg)
|
|
self.assertEqual(product["code"], "12767")
|
|
|
|
def test_map2odoo_product_no_lin_has_pia(self):
|
|
seg = ("1", "", ["", "EN"])
|
|
pia = ["5", ["12767", "SA", "", "9"]]
|
|
product = self.base_edifact_model.map2odoo_product(seg, pia)
|
|
self.assertEqual(product["code"], "12767")
|
|
|
|
def test_map2odoo_product_no_lin_and_no_pia(self):
|
|
seg = ("1", "", ["", "EN"])
|
|
product = self.base_edifact_model.map2odoo_product(seg)
|
|
self.assertEqual(product, {})
|
|
|
|
def test_map2odoo_qty(self):
|
|
seg = (["21", "2"],)
|
|
qty = self.base_edifact_model.map2odoo_qty(seg)
|
|
self.assertEqual(qty, 2.0)
|
|
|
|
def test_map2odoo_unit_price(self):
|
|
# Test with Price qualifier is AAA
|
|
seg = (["AAA", "19.75"],)
|
|
unit_price = self.base_edifact_model.map2odoo_unit_price(seg)
|
|
self.assertEqual(unit_price, 19.75)
|
|
# Test with no unit price
|
|
unit_price = self.base_edifact_model.map2odoo_unit_price()
|
|
self.assertEqual(unit_price, 0.0)
|
|
|
|
def test_map2odoo_date(self):
|
|
# Test with date format YYYY-MM-DD HH:MM
|
|
date_str = ["137", "202303201433", "203"]
|
|
date = self.base_edifact_model.map2odoo_date(date_str)
|
|
self.assertEqual(str(date), "2023-03-20")
|
|
|
|
def test_map2odoo_description(self):
|
|
seg = ["F", "79", ["", "", "", "Description"]]
|
|
description = self.base_edifact_model.map2odoo_description(seg)
|
|
self.assertEqual(description, "Description")
|
|
|
|
def test_create_segment(self):
|
|
segment = self.base_edifact_model.create_segment("DTM", ["171", False, "102"])
|
|
self.assertEqual(str(segment), "'DTM' EDI segment: [['171', '', '102']]")
|
|
|
|
def test_create_interchange(self):
|
|
sender_edifact = ["40410", "14"]
|
|
recipient_edifact = ["40411", "14"]
|
|
control_ref = 10
|
|
syntax_identifier = ["UNOC", "3"]
|
|
interchange = self.base_edifact_model.create_interchange(
|
|
sender_edifact, recipient_edifact, control_ref, syntax_identifier
|
|
)
|
|
self.assertEqual(interchange.sender, ["40410", "14"])
|
|
self.assertEqual(interchange.recipient, ["40411", "14"])
|
|
self.assertEqual(interchange.control_reference, "10")
|
|
self.assertEqual(interchange.syntax_identifier, ["UNOC", "3"])
|