"""Test manifestor.""" from unittest.mock import patch from unittest import TestCase from datetime import datetime import re from src.manifestor import Manifestor class TestManifestor(TestCase): """TestManifestor class.""" def setUp(self): """Set up.""" # This mock represents all the data that the get_relelase_track_info # stored procedure returns self.mock_get_release_track_info = [ { 'display_upc': '123', 'upc': 123, 'release_name': 'lolwut', 'artist_name': 'jimbob', 'track_name': 'bobjim', 'isrc': '1337hax0rz', 'cd': 2, 'track_id': 31324, 'track_type': '2', 'genre': '5', 'content_id': 52341, }, { 'display_upc': '1264', 'upc': 1264, 'release_name': 'wutlol', 'artist_name': 'johnbob', 'track_name': 'bobjohn', 'isrc': '1337hax0r3d', 'cd': 1, 'track_id': 31323, 'track_type': '2', 'genre': '3', 'content_id': 52341, } ] def test_get_default_manifest(self): """Test get_default_manifest.""" m = Manifestor( None, '', { 'delivered_upcs': [{'upc': 1}, {'upc': 2}], 'remote_folder': '/', 'dms_id': '2354987', }) assert m.generate_manifest() == '1\r\n2' @patch('src.manifestor.queries.get_release_track_info') def test_get_display_upc_manifest(self, mock_release_track_info): """Test get_display_upc_manifest.""" mock_release_track_info.return_value = [ {'display_upc': '03452345'}, {'display_upc': '23452345'}, {'display_upc': '23452345'}, ] m = Manifestor( 'display_upc', '', { 'delivered_upcs': [{'upc': 3452345}, {'upc': 23452345}], 'remote_folder': '/', 'dms_id': '2354987', }) assert m.generate_manifest() == '03452345\r\n23452345' @patch('src.manifestor.queries.get_release_track_info') def test_247_manifest(self, mock_release_track_info): """Test 247_manifest.""" mock_release_track_info.return_value = [ {'upc': 3452345, 'cd': 1, 'track_id': 1, 'track_type': 'music'}, ] m = Manifestor( '247', '', { 'delivered_upcs': [ {'upc': 3452345, 'meta_update': False}, {'upc': 23452345, 'meta_update': True}, ], 'remote_folder': '/', 'dms_id': '2354987', }) assert m.generate_manifest() == '3452345/3452345_01_001_FULL.flac\r\n3452345/3452345_COVER.jpg\r\n3452345/3452345.xml\r\n23452345/23452345.xml' # noqa @patch('src.manifestor.queries.get_release_track_info') @patch('src.manifestor.queries.get_store_info') @patch('src.ddex_manifestor.datetime') def test_get_ddex_manifest( self, mock_datetime, mock_get_store_info, mock_release_track_info): """Test get_ddex_manifest.""" mock_release_track_info.return_value = [ {'upc': 194491327590, 'display_upc': '194491327590'}, {'upc': 4011471473022, 'display_upc': '4011471473022'}, ] mock_get_store_info.return_value = { 'customer_name': 'Spotify', 'ddex_party_id': 'PADPIDA2011072101T', } mock_datetime.utcnow.side_effect = [ datetime(2019, 9, 27, 12, 47, 1), datetime(2019, 9, 27, 13, 19, 1), datetime(2019, 9, 27, 13, 55, 34) ] m = Manifestor( 'ddex_ern_c_sftp_1_7', '', { 'delivered_upcs': [ {'upc': 194491327590, 'meta_update': True}, {'upc': 4011471473022, 'meta_update': False}, ], 'remote_folder': '20190930011326001', 'dms_id': '2354987', }) with open('tests/unit/spotify_manifest_snapshot.xml') as snapshot: self.maxDiff = None # this regex ensures that we only delete whitespace between > and < snapshot = re.sub(r'((?<=>)(\s)+(?=<)|\n)', '', snapshot.read()) generated = m.generate_manifest() self.assertEqual(generated, snapshot) @patch('src.manifestor.queries.get_release_track_info') def test_get_amazon_manifest(self, mock_release_track_info): """Test get_amazon_manifest.""" mock_release_track_info.return_value = [ {'upc': 345234556783, 'content_id': '0023452323452'}, {'upc': 367567856783, 'content_id': '0678567856052'}, {'upc': 367567856783, 'content_id': '0678567856052'}, ] m = Manifestor( 'amazon', '', { 'delivered_upcs': [{'upc': 345234556783}, {'upc': 367567856783}], 'remote_folder': '/ORCA_2019.07.17.16.16', 'dms_id': '2354987', }) assert m.generate_manifest() == '/ORCA_2019.07.17.16.16200234523234520678567856052' # noqa @patch('src.manifestor.queries.get_release_track_info') @patch('src.manifestor.datetime') def test_manifest_eins(self, mock_datetime, mock_release_track_info): """Test manifest_eins.""" mock_release_track_info.return_value = self.mock_get_release_track_info mock_datetime.utcnow.return_value = datetime(2019, 7, 18, 15, 8, 37) m = Manifestor( 'eins', '', { 'delivered_upcs': [{'upc': 123}, {'upc': 1264}], 'remote_folder': '/', 'dms_id': '2354987', }) with open('tests/unit/eins_manifest_snapshot.xml') as snapshot: assert m._manifest_eins() == snapshot.read()