"""Test handler.""" from unittest.mock import ANY, patch from constants import queries from ddex_ingester_common.schemas.s3_schema import S3Schema from ddex_ingester_common.schemas.state_machine_schema import \ StateMachineSchema import index @patch('index.load_ddex_json') @patch('index.get_orchard_tracks') @patch('index.delete_tracks') @patch('index.create_tracks') @patch('index.enrich_track_tuids') @patch('index.update_track_sequence_numbers') def test_handler( mock_update_track_sequence_numbers, mock_enrich_track_tuids, mock_create_tracks, mock_delete_tracks, mock_get_orchard_tracks, mock_load_ddex_json, mock_event): """Test the main handler.""" mock_event['tracks'][2]['tuid'] = None mock_load_ddex_json.return_value = mock_event orchard_tracks = [ { 'trackName': 'first', 'isrc': 'USSM12001698', 'tuid': '45677' }, { 'trackName': 'second', 'isrc': 'USSM12001699', 'tuid': '45678' }, { 'trackName': 'fourth', 'isrc': 'USSM12001701', 'tuid': '45680' } ] mock_get_orchard_tracks.return_value = orchard_tracks created_tracks = [ { 'isrc': 'USSM12001700', 'trackName': 'third', 'tuid': '45679' } ] mock_create_tracks.return_value = created_tracks tuids_to_delete = [45680] index.handler(mock_event, None) mock_get_orchard_tracks.assert_called_with('231232563123') mock_delete_tracks.assert_called_with(234324, tuids_to_delete) mock_create_tracks.assert_called_with(234324, ANY) args, _ = mock_create_tracks.call_args assert len(args[1]) == 1 assert args[1][0].isrc == 'USSM12001700' mock_enrich_track_tuids.assert_called_with(ANY, created_tracks) mock_update_track_sequence_numbers.assert_called() @patch('index.graphql_gateway.execute') def test_get_orchard_tracks(mock_graphql_gateway): """Test get_orchard_tracks.""" upc = '231232563123' graphql_result = { 'data': { 'productByUpc': { 'tracks': [ { 'trackName': 'first', 'isrc': 'USSM12001698', 'tuid': '45677' }, { 'trackName': 'second', 'isrc': 'USSM12001699', 'tuid': '45678' }, { 'trackName': 'third', 'isrc': 'USSM12001700', 'tuid': '45679' } ] } } } mock_graphql_gateway.return_value = graphql_result result = index.get_orchard_tracks(upc) assert result == graphql_result['data']['productByUpc']['tracks'] mock_graphql_gateway.assert_called_with( queries.get_orchard_tracks, {'upc': upc} ) @patch('index.graphql_gateway.execute') def test_delete_tracks( mock_graphql_gateway, mock_event): """Test delete_tracks.""" product_id = 234324 tuids = [45677, 45678, 45679] expected_payload = { 'data': { 'delete': { 'productId': product_id, 'tracks': tuids } } } index.delete_tracks(product_id, tuids) mock_graphql_gateway.assert_called_with( queries.save_tracks, expected_payload ) @patch('index.graphql_gateway.execute') def test_create_tracks( mock_graphql_gateway, mock_event): """Test create_tracks.""" parsed_ddex = S3Schema().load(mock_event) product_id = 234324 graphql_result = { 'data': { 'saveTracks': [ { 'isrc': 'USSM12001698', 'trackName': 'first', 'tuid': '45677' }, { 'isrc': 'USSM12001699', 'trackName': 'second', 'tuid': '45678' }, { 'isrc': 'USSM12001700', 'trackName': 'third', 'tuid': '45679' } ] } } mock_graphql_gateway.return_value = graphql_result expected_payload = { 'data': { 'create': { 'productId': product_id, 'tracks': [ { 'isrc': 'USSM12001698', 'trackName': 'first', 'volumeNumber': 1, 'explicit': 'C' }, { 'isrc': 'USSM12001699', 'trackName': 'second', 'volumeNumber': 1, 'explicit': 'C' }, { 'isrc': 'USSM12001700', 'trackName': 'third', 'volumeNumber': 2, 'explicit': 'C' } ] } } } result = index.create_tracks(product_id, parsed_ddex.tracks) assert result == graphql_result['data']['saveTracks'] mock_graphql_gateway.assert_called_with( queries.save_tracks, expected_payload ) def test_enrich_track_tuids(mock_event): """Test enrich_track_tuids.""" context = StateMachineSchema().load(mock_event) for track in context.tracks: track.tuid = None new_tracks = [ { 'trackName': 'first', 'isrc': 'USSM12001698', 'tuid': '45677' }, { 'trackName': 'second', 'isrc': 'USSM12001699', 'tuid': '45678' }, { 'trackName': 'third', 'isrc': 'USSM12001700', 'tuid': '45679' } ] index.enrich_track_tuids(context, new_tracks) for track in context.tracks: assert track.tuid assert type(track.tuid) is int @patch('index.graphql_gateway.execute') def test_update_track_sequence_numbers( mock_graphql_gateway, mock_event): """Test update_track_sequence_numbers.""" context = StateMachineSchema().load(mock_event) parsed_ddex = S3Schema().load(mock_event) index.update_track_sequence_numbers(context, parsed_ddex) expected_payload = { 'data': { 'updatePosition': { 'productId': 234324, 'tracks': [ { 'trackNumber': 1, 'volumeNumber': 1, 'tuid': 45677 }, { 'trackNumber': 2, 'volumeNumber': 1, 'tuid': 45678 }, { 'trackNumber': 3, 'volumeNumber': 2, 'tuid': 45679 } ] } } } mock_graphql_gateway.assert_called_with( queries.save_tracks, expected_payload ) @patch('index.load_ddex_json') @patch('index.get_orchard_tracks') @patch('index.delete_tracks') @patch('index.create_tracks') @patch('index.enrich_track_tuids') @patch('index.update_track_sequence_numbers') def test_artwork_ingestion_only( mock_update_track_sequence_numbers, mock_enrich_track_tuids, mock_create_tracks, mock_delete_tracks, mock_get_orchard_tracks, mock_load_ddex_json, mock_event): """Test the main handler.""" mock_event['artwork_ingestion_only'] = True mock_load_ddex_json.return_value = mock_event orchard_tracks = [ { 'trackName': 'first', 'isrc': 'USSM12001698', 'tuid': '45677' }, { 'trackName': 'second', 'isrc': 'USSM12001699', 'tuid': '45678' }, { 'trackName': 'fourth', 'isrc': 'USSM12001701', 'tuid': '45680' } ] mock_get_orchard_tracks.return_value = orchard_tracks created_tracks = [ { 'isrc': 'USSM12001700', 'trackName': 'third', 'tuid': '45679' } ] mock_create_tracks.return_value = created_tracks index.handler(mock_event, None) assert not mock_delete_tracks.called