"""Tests v43 DDEX generation.""" from textwrap import dedent from unittest.mock import patch from soundrecording_utils.constants.ddex.constants import RuleService from soundrecording_utils.ddex.v43 import generate from soundrecording_utils.ddex.v43.e import E from soundrecording_utils.metadata.types import OrchardSoundRecording @patch('soundrecording_utils.ddex.v43.generate.generate_the_orchard_party') @patch('soundrecording_utils.ddex.v43.generate.generate_label_party') @patch('soundrecording_utils.ddex.v43.generate.generate_party_list') @patch('soundrecording_utils.ddex.v43.generate.generate_release_deal') @patch('soundrecording_utils.ddex.v43.generate.generate_release') @patch('soundrecording_utils.ddex.v43.generate.generate_sound_recording_resource') @patch('soundrecording_utils.ddex.v43.generate.generate_header') def test_header_creates_correctly( mock_generate_header, mock_generate_sound_recording_resource, mock_generate_release, mock_generate_release_deal, mock_generate_party_list, mock_generate_label_party, mock_generate_the_orchard_party, mock_orchard_sound_recording: OrchardSoundRecording, execution_meta, ): """Test that header is created as expected.""" mock_generate_header.return_value = E('MockedMessageHeader') mock_generate_sound_recording_resource.return_value = E( 'MockSoundRecording', ) mock_generate_release.return_value = E('MockRelease') mock_generate_release_deal.return_value = E('MockReleaseDeal') mock_generate_the_orchard_party.return_value = E('MockPartyTheOrchard') mock_generate_label_party.return_value = E('MockPartyLabel') mock_generate_party_list.return_value = [E('MockPartyArtist')] result = generate.generate_ddex( mock_orchard_sound_recording, None, execution_meta, 'lambda-sr-delivery-youtube', RuleService.YOUTUBE ) expected = """ R1 XXAAA2100000 A1 P-94177d6a-51d4-496f-aa1a-a52b75516814 Rock """ # noqa: E501 assert result == dedent(expected).lstrip() mock_generate_header.assert_called_once_with(execution_meta, RuleService.YOUTUBE) mock_generate_sound_recording_resource.assert_called_once_with( 'A1', mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0], None, takedown=False ) mock_generate_release.assert_called_once_with( 'R0', 'A1', mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0] ) mock_generate_release_deal.assert_called_once_with( 'R1', mock_orchard_sound_recording, service=RuleService.YOUTUBE, takedown=False ) @patch('soundrecording_utils.ddex.v43.generate.generate_the_orchard_party') @patch('soundrecording_utils.ddex.v43.generate.generate_label_party') @patch('soundrecording_utils.ddex.v43.generate.generate_party_list') @patch('soundrecording_utils.ddex.v43.generate.generate_release_deal') @patch('soundrecording_utils.ddex.v43.generate.generate_release') @patch('soundrecording_utils.ddex.v43.generate.generate_sound_recording_resource') @patch('soundrecording_utils.ddex.v43.generate.generate_header') def test_generate_with_takedown( mock_generate_header, mock_generate_sound_recording_resource, mock_generate_release, mock_generate_release_deal, mock_generate_party_list, mock_generate_label_party, mock_generate_the_orchard_party, mock_orchard_sound_recording: OrchardSoundRecording, execution_meta, ): """Test that DealList is included even for takedown deliveries.""" mock_generate_header.return_value = E('MockedMessageHeader') mock_generate_sound_recording_resource.return_value = E( 'MockSoundRecording', ) mock_generate_release.return_value = E('MockRelease') mock_generate_release_deal.return_value = E('MockReleaseDeal') mock_generate_the_orchard_party.return_value = E('MockPartyTheOrchard') mock_generate_label_party.return_value = E('MockPartyLabel') mock_generate_party_list.return_value = [E('MockPartyArtist')] result = generate.generate_ddex( mock_orchard_sound_recording, None, execution_meta, 'lambda-sr-delivery-youtube', RuleService.YOUTUBE, takedown=True ) expected = """ R1 XXAAA2100000 A1 P-94177d6a-51d4-496f-aa1a-a52b75516814 Rock """ # noqa: E501 assert result == dedent(expected).lstrip() mock_generate_header.assert_called_once_with(execution_meta, RuleService.YOUTUBE) mock_generate_sound_recording_resource.assert_called_once_with( 'A1', mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0], None, takedown=True ) mock_generate_release.assert_called_once_with( 'R0', 'A1', mock_orchard_sound_recording, mock_orchard_sound_recording.track_connection.tracks[0] ) mock_generate_release_deal.assert_called_once_with( 'R1', mock_orchard_sound_recording, service=RuleService.YOUTUBE, takedown=True )