"""Lambda test module.""" from datetime import date from xmlunittest import XmlTestCase import generate class XMLGenerateTestCase(XmlTestCase): """Extend XmlTestCase in order to test XML.""" def generate_test_xml(self): """Generate test XML.""" transformed_metadata = { 'message_thread_id': 12345, 'message_id': '12345_20200101_000000', 'message_created_date_time': '2020-01-01T00:00:00.100000+00:00', 'message_notification_period_start': date(2020, 1, 1), 'message_notification_period_end': date(2020, 1, 1), 'tracks': [ { 'explicit': 'Y', 'isrc': 'ABCD1234', 'metaLanguageCode': 'en', 'pInfo': '2015 lawlcakes', 'durationSeconds': 42, 'durationMinutes': 3, 'primaryArtists': [ { 'artistName': 'eric tan', 'artistType': 'performer' } ], 'trackName': 'astrosloth', 'trackNumber': 1, 'volumeNumber': 1}, ] } return generate.generate_rdr(transformed_metadata) def test_header_nodes(self): """Test that the correct XML nodes are generated.""" root = self.generate_test_xml() self.assertXmlNode(root) # Test that the expected nodes exist self.assertXpathsExist(root, ('./MessageHeader', './MessageHeader/MessageThreadId', './MessageHeader/MessageId', './MessageHeader/MessageSender', './MessageHeader/MessageSender/PartyId', './MessageHeader/MessageSender/PartyName', './MessageHeader/MessageSender/PartyName/FullName', './MessageHeader/MessageSender/TradingName', './MessageHeader/MessageRecipient', './MessageHeader/MessageRecipient/PartyId', './MessageHeader/MessageRecipient/PartyName', './MessageHeader/MessageRecipient/PartyName/FullName', './MessageHeader/MessageCreatedDateTime', )) # Test that constant values are correct self.assertXpathValues(root, './MessageHeader/MessageSender/PartyId/text()', ('PADPIDA2012041004F')) self.assertXpathValues(root, './MessageHeader/MessageSender/PartyName/FullName/text()', ('The Orchard Enterprises')) self.assertXpathValues(root, './MessageHeader/MessageSender/PartyName/TradingName/text()', ('The Orchard Enterprises, LLC')) self.assertXpathValues(root, './MessageHeader/MessageRecipient/PartyId/text()', ('PADPIDA2019062107O')) self.assertXpathValues(root, './MessageHeader/MessageRecipient/PartyName/FullName/text()', ('Repertoire Data Exchange Limited')) def test_namespaces(self): """Test that the correct XML namespaces are present.""" root = self.generate_test_xml() self.assertXmlNamespace(root, None, 'http://ddex.net/xml/mlc/14') self.assertXmlNamespace(root, 'xsi', 'http://www.w3.org/2001/XMLSchema-instance') self.assertXmlNamespace(root, 'xsd', 'http://www.w3.org/2001/XMLSchema') self.assertXmlHasAttribute(root, 'LanguageAndScriptCode', expected_value='en') def test_tracks(self): """Test that tracks data is correctly generated.""" root = self.generate_test_xml() self.assertXpathsExist( root, ( './ResourceList', './ResourceList/SoundRecording', './ResourceList/SoundRecording/SoundRecordingId/ISRC', './ResourceList/SoundRecording/ResourceReference', './ResourceList/SoundRecording/ReferenceTitle', './ResourceList/SoundRecording/Duration', ) ) self.assertXpathValues( root, './ResourceList/SoundRecording/SoundRecordingId/ISRC/text()', 'ABCD1234' ) self.assertXpathValues( root, './ResourceList/SoundRecording/ResourceReference/text()', '1' ) self.assertXpathValues( root, './ResourceList/SoundRecording/ReferenceTitle/text()', 'astrosloth' ) self.assertXpathValues( root, './ResourceList/SoundRecording/Duration/text()', 'PT03M42S' )