"""Lambda test module.""" from datetime import datetime import pytest from freezegun import freeze_time import transform @pytest.fixture def graphql_data(): """Fixture to return graphql data.""" return { 'tuid11111111': {'product': {'status': 'in_content', 'productConfiguration': 'Digital Audio', 'deletions': 'N'}, 'tuid': '20000004', 'isrc': 'KRA303030303', 'pInfo': '2002 Example Entertainment', 'durationMinutes': 3, 'durationSeconds': 40, 'trackName': 'Example Title', 'trackType': 'music', 'version': 'Single Edit', 'explicit': 'N', 'metaLanguageCode': 'ENG', 'language': { 'iso_639_1_code': 'EN' }, 'primaryArtists': [ {'artistName': 'BTS', 'artistType': 'performer'}, {'artistName': 'Pdogg', 'artistType': 'featuring'} ], 'writers': [ {'trackWriterName': 'Janiya T'} ], 'label': 'Big Hit Entertainment'}, 'tuid22222222': {'product': {'status': 'in_content', 'productConfiguration': 'Physical Audio', 'deletions': 'N'}, 'tuid': '20000008', 'isrc': 'KRA303030303', 'pInfo': None, 'durationMinutes': 3, 'durationSeconds': 40, 'trackName': 'Example Title', 'trackType': 'music', 'version': None, 'explicit': 'N', 'metaLanguageCode': 'ENG', 'language': { 'iso_639_1_code': 'EN' }, 'primaryArtists': [ {'artistName': 'BTS', 'artistType': 'performer'}, {'artistName': 'Pdogg', 'artistType': 'featuring'} ], 'writers': [ {'trackWriterName': 'Janiya T'} ], 'label': 'Big Hit Entertainment'}, } @freeze_time('2020-01-01T03:04:10+00:00') def test_transform_metadata(graphql_data): """Test metadata transformation logic.""" expected_transformed_metadata = { 'message_thread_id': 'KRA303030303', 'message_id': 'KRA303030303_20200101_030410Z', 'message_created_date_time': '2020-01-01T03:04:10Z', 'isrc': 'KRA303030303', 'pline_year': '2002', 'pline_text': '2002 Example Entertainment', 'resource_reference': 'A1', 'title_text': 'Example Title', 'sub_title': 'Single Edit', 'parental_warning_type': 'NotExplicit', 'meta_language_code': 'ENG', 'language_of_performance': 'en', 'display_title': 'Example Title (Single Edit)', 'formal_title': 'Example Title', 'duration': 'PT3M40S', 'display_artists': [ {'fullName': 'BTS', 'artistRole': 'MainArtist'}, {'fullName': 'Pdogg', 'artistRole': 'FeaturedArtist'}, {'fullName': 'Janiya T', 'artistRole': 'Composer'} ], 'label': 'Big Hit Entertainment' } result = transform.transform_metadata(graphql_data) assert result == expected_transformed_metadata def test_build_message_id(): """Test that the message id is returned in the correct format.""" test_srr_id = 12345 test_xml_created_datetime = datetime(2020, 1, 1) message_id = transform.build_message_id(test_srr_id, test_xml_created_datetime) assert message_id == '12345_20200101_000000Z' def test_build_pline_year_valid(): """Test valid pline has year extracted.""" pline_year = transform.build_pline_year('2017 best pline ever') assert pline_year == '2017' def test_build_pline_year_invalid(): """Test an invalid pline raises an Exception.""" with pytest.raises(Exception): transform.build_pline_year('worst pline ever') with pytest.raises(Exception): transform.build_pline_year('199 invalid year pline')