"""Test for release_artist_localized_metadata model.""" from product.models import release_artist_localized_metadata as ralm_model from tests.factories.release_artist import ReleaseArtistFactory as ra_factory from tests.factories.release_artist_localized_metadata import \ ReleaseArtistLocalizedMetadataFactory as ralm_factory from tests.testutils import db @db.test_schema def test_get_metadata_by_id(test_product): """Test get_metadata_by_id with valid id.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ra_factory.build(release_artist_id=2)) db.seed_models(ralm_factory.build_batch(2, release_artist_id=1)) db.seed_models(ralm_factory.build_batch(2, release_artist_id=2)) response = ralm_model.get_artist_metadata_by_product(test_product) assert response.status == 200 assert len(response.message) == 4 assert len(response.message.keys()) == 4 # all diff languages @db.test_schema def test_get_metadata_by_id_diff_roles(test_product): """Test get_metadata_by_id with different artist roles.""" db.seed_models(ra_factory.build(release_artist_id=1, role='performer')) db.seed_models(ra_factory.build(release_artist_id=2, role='remixer')) db.seed_models(ra_factory.build(release_artist_id=3, role='featuring')) db.seed_models(ralm_factory.build(release_artist_id=1, language_id=1)) db.seed_models(ralm_factory.build(release_artist_id=2, language_id=1)) db.seed_models(ralm_factory.build(release_artist_id=3, language_id=1)) response = ralm_model.get_artist_metadata_by_product(test_product) assert response.status == 200 assert 1 in response.message # language id assert 'primary_artist' in response.message[1] assert 'remixer' in response.message[1] assert 'featuring' in response.message[1] @db.test_schema def test_get_metadata_no_data_found(): """Test get_metadata_by_id when no localize metadata found for product.""" db.seed_models(ralm_factory.build(release_artist_id=1, language_id=1)) response = ralm_model.get_artist_metadata_by_product(100) assert response.status == 200 assert response.message == {} @db.test_schema def test_insert_metadata(fixture_language): """Test insert_metadata with valid data.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ra_factory.build(release_artist_id=2)) data = {'1': 'Release name in afr', '2': 'Release name in afr'} response = ralm_model.insert_metadata(fixture_language, data) assert response.status == 200 assert len(response.message) == 2 @db.test_schema def test_insert_metadata_special_chars(fixture_language): """Test insert_metadata with valid foreign language data.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ra_factory.build(release_artist_id=2)) db.seed_models(ra_factory.build(release_artist_id=3)) data = {'1': 'йуцйцу чсмв', '2': 'forêt a brûlé après-midi', '3': 'كيبورد'} response = ralm_model.insert_metadata(fixture_language, data.copy()) assert response.status == 200 assert len(response.message) == 3 assert response.message == data data = { '1': '先秦兩漢', '2': ' 旅ロ京青利セムレ弱改フヨス波', '3': 'a$#!`~+-*()\'"<>:;'} response = ralm_model.insert_metadata(fixture_language, data.copy()) assert response.status == 200 assert len(response.message) == 3 assert response.message == data @db.test_schema def test_insert_metadata_invalid(fixture_language): """Test insert_metadata when no data provided.""" db.seed_models(ra_factory.build(release_artist_id=1)) response = ralm_model.insert_metadata(fixture_language, 123) assert response.status == 400 assert response.errors['code'] == 'invalid_data' @db.test_schema def test_delete_metadata(fixture_language): """Test delete_metadata with valid ids.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ralm_factory.build(release_artist_id=1, language_id=1)) db.seed_models(ralm_factory.build( release_artist_id=1, language_id=fixture_language)) db.seed_models(ralm_factory.build( release_artist_id=2, language_id=fixture_language)) response = ralm_model.delete_all_metadata([1, 2], fixture_language) assert response.status == 200 assert response.message == '2 artist localizations deleted.' @db.test_schema def test_delete_metadata_no_match(): """Test delete_metadata when no matching records found.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ralm_factory.build(release_artist_id=1, language_id=1)) response = ralm_model.delete_all_metadata([1], 100) assert response.status == 404 @db.test_schema def test_delete_metadata_invalid(fixture_language): """Test delete_metadata when no ids provided.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ralm_factory.build(release_artist_id=1, language_id=1)) response = ralm_model.delete_all_metadata([], fixture_language) assert response.status == 400 assert response.errors['code'] == 'invalid_data' @db.test_schema def test_format_artist_results(): """Test format_artist_results.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ra_factory.build(release_artist_id=2)) db.insert_release_artist_localized_metadata() raw_data = [ { 'language_id': 1, 'release_artist_id': 1, 'artist_name': 'one translated', 'role': 'remixer', }, { 'language_id': 2, 'release_artist_id': 1, 'artist_name': 'two translated', 'role': 'performer', }, { 'language_id': 2, 'release_artist_id': 2, 'artist_name': 'three translated', 'role': 'performer', }, { 'language_id': 2, 'release_artist_id': 3, 'artist_name': 'four translated', 'role': 'composer', } ] response = ralm_model._format_artist_results(raw_data) assert len(response) == 2 # no of languages for language_id, each_item in response.items(): if language_id == 1: assert 'remixer' in each_item assert len(each_item['remixer']) == 1 # nos of artists else: assert 'performer' in each_item assert len(each_item['performer']) == 2 assert 'composer' in each_item assert len(each_item['composer']) == 1 @db.test_schema def test_insert_update_metadata(fixture_language): """Test insert_metadata with valid data.""" db.seed_models(ra_factory.build(release_artist_id=1)) db.seed_models(ra_factory.build(release_artist_id=2)) db.seed_models(ra_factory.build(release_artist_id=3)) db.seed_models((ralm_factory.build(release_artist_id=1, language_id=12))) db.seed_models((ralm_factory.build(release_artist_id=3, language_id=12))) data = {'1': 'Test primary artist', '2': 'Test featuring Artist', '3': 'Test Remixer Artist'} response = ralm_model.insert_metadata(fixture_language, data) assert response.status == 200 assert len(response.message) == 3