def test_get_segments(): collection = SegmentCollection.from_segments( [Segment("36CF", 1), Segment("CPD"), Segment("36CF", 2)]) segments = list(collection.get_segments("36CF")) assert [Segment("36CF", 1), Segment("36CF", 2)] == segments
def test_compare_equal_segments(self): """Just make sure that comparing Segment objects works""" a = [Segment("RFF", ["PD", "50515"])] b = [Segment("RFF", ["PD", "50515"])] assert a is not b, \ "Two separatedly created Segment objects may not be a singleton." self.assertEqual(a, b)
def test_with_una_in_segments(serializer): assert_segments( serializer, "RFF+PD+45761", [Segment("UNA", ":+,? '"), Segment("RFF", "PD", "45761")], )
def test_get_segments(self): message = Message.from_segments( [Segment("36CF", 1), Segment("CPD"), Segment("36CF", 2)] ) segments = list(message.get_segments("36CF")) self.assertEqual([Segment("36CF", 1), Segment("36CF", 2)], segments)
def test_compare_equal_segments(parser, default_una_segment): """Just make sure that comparing Segment objects works""" a = Segment("RFF", ["PD", "50515"]) b = Segment("RFF", ["PD", "50515"]) assert a == b assert ( a is not b ), "Two separatedly, but visually identically created Segment objects may not be the same object."
def test_get_segment(self): message = Message.from_segments([ Segment("36CF", 1), Segment("36CF", 2), ]) segment = message.get_segment("36CF") self.assertEqual(Segment("36CF", 1), segment)
def add_footer(message: SegmentCollection, message_data: dict): number_of_segments = len(message.segments) message.add_segment( Segment("UNT", str(number_of_segments), message_data['message_reference_number'])) message.add_segment( Segment("UNZ", "1", message_data['interchangeControlReference'])) pass
def add_equipment(message: SegmentCollection, equipment_data: dict): #Blocks, refrigerated tank message.add_segment( Segment("EQD", "BL", equipment_data['identification_number'], ["7", "ZZZ", "5"], None, "3", "5")) message.add_segment( Segment("MEA", "AAE", "G", ["KGM", equipment_data['total_gross_weight']])) # weight message.add_segment(Segment("MEA", "AAE", "AAW", ["MTQ", "100"])) # volume
def test_empty_interchange_w_una(): i = Interchange.from_segments( [ Segment("UNA", ":+,? '"), Segment("UNB", ["UNOC", "1"], "1234", "3333", ["200102", "2212"], "42"), Segment("UNZ", "0", "42"), ] ) assert str(i) == ("UNA:+,? '" "UNB+UNOC:1+1234+3333+200102:2212+42'" "UNZ+0+42'")
def test_wikipedia_file(): message = Message.from_file("{}/wikipedia.edi".format(path)) # make some checks assert message.get_segment("UNB") == Segment("UNB", ["IATB", "1"], "6XPPC", "LHPPC", ["940101", "0950"], "1") assert message.get_segment("IFT") == Segment("IFT", "3", "XYZCOMPANY AVAILABILITY") assert message.get_segment("TVL") == Segment( "TVL", ["240493", "1000", "", "1220"], "FRA", "JFK", "DL", "400", "C")
def test_get_segments_w_predicate(): collection = SegmentCollection.from_segments([ Segment("A", '1', 'a'), Segment("A", '2', 'b'), Segment("A", '1', 'c'), ]) segments = collection.get_segments("A", lambda x: x[0] == '1') assert [ Segment("A", '1', 'a'), Segment("A", '1', 'c'), ] == list(segments)
def add_headers(message: SegmentCollection, message_data: dict): message.add_segment( Segment("UNB", ["UNOB", "2"], message_data['sender_identification'], message_data['recipient_identification'], [message_data['send_date'], message_data['send_time']], message_data['interchangeControlReference'])) message.add_segment( Segment("UNH", message_data['message_reference_number'], ["CUSCAR", "D", "95B", "UN", "LOT10"])) message.add_segment( Segment("BGM", "85", message_data['document_reference_number'], "9"))
def add_cargo_report_sender_info(message: SegmentCollection, message_data: dict): message.add_segment( Segment("DTM", ["137", message_data['submit_to_customs_timestamp'], "203"])) message.add_segment( Segment("RFF", ["SS", message_data['sellers_message_reference_number']])) message.add_segment( Segment("NAD", "MS", [message_data['sender_identification'], "172", "20"]))
def test_get_segments_w_predicate(): collection = RawSegmentCollection.from_segments( [ Segment("A", "1", "a"), Segment("A", "2", "b"), Segment("A", "1", "c"), ] ) segments = collection.get_segments("A", lambda x: x[0] == "1") assert [ Segment("A", "1", "a"), Segment("A", "1", "c"), ] == list(segments)
def test_escape_character(parser, default_una_segment): _assert_segments( parser, default_una_segment, "ERC+10:The message does not make sense??", [Segment("ERC", ["10", "The message does not make sense?"])], )
def get_header_segment(self) -> Segment: return Segment( "UNH", self.reference_number, [str(i) for i in self.identifier], *self.extra_header_elements, )
def test_invoice_file(): message = Interchange.from_file("{}/invoice1.edi".format(path)) # make some checks assert message.get_header_segment() == Segment( "UNB", ["UNOA", "1"], "01010000253001", "O0013000093SCHA-Z59", ["991006", "1902"], "PAYO0012101221", ) assert message.get_segment("DTM") == Segment( "DTM", ["137", "199910060000", "102"]) assert message.get_segment("NAD") == Segment( "NAD", "BT", ["VAUXHALL MOTORS LTD", "", "91"]) assert message.get_segment("RFF") == Segment("RFF", ["VA", "382324067"])
def test_escape_component_separator(parser, default_una_segment): _assert_segments( parser, default_una_segment, "ERC+10:Name?: Craig", [Segment("ERC", ["10", "Name: Craig"])], )
def test_escape_sequence(parser, default_una_segment): _assert_segments( parser, default_una_segment, "ERC+10:?:?+???' - ?:?+???' - ?:?+???'", [Segment("ERC", ["10", ":+?' - :+?' - :+?'"])], )
def test_escape_segment_terminator(parser, default_una_segment): _assert_segments( parser, default_una_segment, "ERC+10:Craig?'s", [Segment("ERC", ["10", "Craig's"])], )
def test_escape_decimal_point(parser, default_una_segment): _assert_segments( parser, default_una_segment, "QTY+136:12,235", [Segment("QTY", ["136", "12,235"])], )
def test_escape_data_separator(parser, default_una_segment): _assert_segments( parser, default_una_segment, "DTM+735:?+0000:406", [Segment("DTM", ["735", "+0000", "406"])], )
def get_header_segment(self) -> Segment: return Segment( "UNB", [str(i) for i in self.syntax_identifier], self.sender, self.recipient, [f'{self.timestamp:%y%m%d}', f'{self.timestamp:%H%M}'], self.control_reference, *self.extra_header_elements, )
def add_details_of_transport_and_arrival(message: SegmentCollection, message_data: dict): message.add_segment( Segment("TDT", "20", message_data['conveyance_reference_number'], "1", None, [ message_data['sender_identification'], "172", "20", message_data['carrier_name'] ], None, None, [ message_data['means_of_transport_identification'], "103", None, message_data['means_of_transport'] ])) message.add_segment( Segment("LOC", "60", [message_data['arrival_port'], None, "139"])) message.add_segment( Segment("DTM", ["132", message_data['arrival_datetime_estimated'], "203"])) message.add_segment( Segment("DTM", ["232", message_data['arrival_datetime_scheduled'], "203"]))
def get_header_segment(self) -> Segment: return Segment( self.HEADER_TAG, [str(i) for i in self.syntax_identifier], self.sender, self.recipient, [ "{:%y%m%d}".format(self.timestamp), "{:%H%M}".format( self.timestamp) ], self.control_reference, *self.extra_header_elements, )
def get_footer_segment(self) -> Segment: """:returns a (UNZ) footer segment with correct segment count and control reference. It counts either of the number of messages or, if used, of the number of functional groups in an interchange (TODO).""" # FIXME: count functional groups (UNG/UNE) correctly cnt = 0 for segment in self.segments: if segment.tag == Message.HEADER_TAG: cnt += 1 if cnt == 0: cnt = len(self.segments) return Segment( self.FOOTER_TAG, str(cnt), self.control_reference, )
def test_split_by(): def _serialize(collections: Iterable[RawSegmentCollection]) -> List[List[str]]: lst = [] global_lst = [] for collection in collections: if lst: global_lst.append(lst) lst = [] for segment in collection.segments: lst.append(segment.tag) if lst: global_lst.append(lst) return global_lst assert _serialize(RawSegmentCollection.from_segments([]).split_by("A")) == [] collection = RawSegmentCollection.from_segments( Segment(i) for i in ["A", "B", "A", "A", "B", "D"] ) assert _serialize(collection.split_by("Z")) == [] assert _serialize(collection.split_by("A")) == [["A", "B"], ["A"], ["A", "B", "D"]] assert _serialize(collection.split_by("A")) == [["A", "B"], ["A"], ["A", "B", "D"]]
def test_get_non_existing_element(): segment = Segment("OMD", *elements) with pytest.raises(IndexError): segment.elements[7]
def test_get_list_element(): segment = Segment("OMD", *elements) assert segment.elements[1] == ["field2", "extra"]
def test_get_single_element(): segment = Segment("OMD", *elements) assert segment.elements[0] == "field1"