import pytest from delivery_metadata.constants import ProductType, TrackTypes from delivery_metadata.models.schemas import Store, TechnicalFileDetail from tests.unit.conftest import ( get_product_audio_mock, get_x_number_of_tracks_mock, ) @pytest.mark.parametrize( ("number_of_tracks", "track_type", "expected_product_type"), [ (1, TrackTypes.MUSIC, ProductType.MUSIC_SINGLE), (1, TrackTypes.VIDEO, ProductType.VIDEO_SINGLE), (2, TrackTypes.VIDEO, ProductType.VIDEO_ALBUM), (4, TrackTypes.MUSIC, ProductType.EP), (10, TrackTypes.MUSIC, ProductType.MUSIC_ALBUM), ], ) def test_product_type( number_of_tracks: int, track_type: TrackTypes, expected_product_type: ProductType, store_mock: Store, ) -> None: product = get_product_audio_mock( store_mock, [track_type], get_x_number_of_tracks_mock(number_of_tracks, track_type), ) assert product.product_type == expected_product_type def test_product_type_bundle(store_mock: Store) -> None: product = get_product_audio_mock( store_mock, [TrackTypes.MUSIC], get_x_number_of_tracks_mock(5, TrackTypes.MUSIC) + get_x_number_of_tracks_mock(5, TrackTypes.VIDEO), ) assert product.product_type == ProductType.MUSIC_BUNDLE @pytest.mark.parametrize( ("delivery_location", "filename", "expected_value"), [ ("{upc}", "{upc}.xml", ("{upc}", "{upc}.xml")), ("{upc}", "resources/{upc}.xml", ("{upc}/resources", "{upc}.xml")), ("{upc}/resources", "{upc}.xml", ("{upc}/resources", "{upc}.xml")), ( "{identifier_timestamp}_{display_upc}/resources", "metadata/{upc}.xml", ("{identifier_timestamp}_{display_upc}/resources/metadata", "{upc}.xml"), ), ], ) def test_get_file_uri( delivery_location: str, filename: str, expected_value: tuple[str, str] ) -> None: tech_detail = TechnicalFileDetail( profile_subtype="Ddex XML", format="xml", filename=filename, delivery_location=delivery_location, hash_algorithm="MD5", placeholder_hash=None, ) assert tech_detail.full_file_path_and_name == expected_value