"""Test for Rights Attribute Model.""" from backend.connectors import mysql from backend.models.rights_attribute import TrackRightsAttributesChangelog from backend.models.rights_attribute import TrackRightsAttributesEdits from backend.models.rights_attribute import TrackRightsAttributeSuggestions from backend.models.rights_attribute_query import RightsAttributeQuery from backend.models.track_rights_attribute_persister import TrackRightsAttributePersister from tests.testutils import db @db.test_schema def test_get_rights_attributes(): """Test get rights attributes.""" with mysql.db_session() as session: existing_track_rights_attributes = RightsAttributeQuery.get_track_rights_attributes(tuid=182, session=session) assert existing_track_rights_attributes.status == 200 assert len(existing_track_rights_attributes.message['items']) == 3 assert existing_track_rights_attributes.message['items'][0]['rights_attribute_id'] == 1 assert existing_track_rights_attributes.message['items'][1]['rights_attribute_id'] == 2 assert existing_track_rights_attributes.message['items'][2]['rights_attribute_id'] == 3 updated_track = [{ 'tuid': 182, 'track_attributes': [4, 5] }] response = TrackRightsAttributePersister.sync_track_rights_attributes( tracks=updated_track, orchard_identity_id='8955b4aa-2ad0-4b0b-a2ea-6f070554d6d0', session=session) assert response.message == 'success' updated_track_rights_attributes = RightsAttributeQuery.get_track_rights_attributes(tuid=182, session=session) assert updated_track_rights_attributes.status == 200 assert len(updated_track_rights_attributes.message['items']) == 2 assert updated_track_rights_attributes.message['items'][0]['rights_attribute_id'] == 4 assert updated_track_rights_attributes.message['items'][1]['rights_attribute_id'] == 5 @db.test_schema def test_sync_track_rights_attributes_creates_changelog(): """Test that syncing rights attributes creates changelog entries.""" with mysql.db_session() as session: updated_track = [{ 'tuid': 182, 'track_attributes': [4, 5], 'change_source': 'test_source' }] response = TrackRightsAttributePersister.sync_track_rights_attributes( tracks=updated_track, orchard_identity_id='8955b4aa-2ad0-4b0b-a2ea-6f070554d6d0', session=session) assert response.message == 'success' changelog_entries = session.query(TrackRightsAttributesChangelog).filter( TrackRightsAttributesChangelog.unique_track_id == 182, TrackRightsAttributesChangelog.change_source == 'test_source' ).all() assert len(changelog_entries) == 5 # 3 deletes and 2 inserts delete_entries = [e for e in changelog_entries if e.action == 'delete'] insert_entries = [e for e in changelog_entries if e.action == 'insert'] assert len(delete_entries) == 3 assert len(insert_entries) == 2 for entry in changelog_entries: assert entry.user_uuid == '8955b4aa-2ad0-4b0b-a2ea-6f070554d6d0' assert entry.change_source == 'test_source' @db.test_schema def test_bulk_delete_removes_suggestions(): """Verify bulk_delete_track_rights_attributes also clears suggestion rows.""" tuid = 182 with mysql.db_session() as session: session.add(TrackRightsAttributeSuggestions( unique_track_id=tuid, suggestions=[], user_uuid='00000000-0000-0000-0000-000000000001', review_queue_id=1, )) session.commit() TrackRightsAttributePersister.bulk_delete_track_rights_attributes(tuids=[tuid]) with mysql.db_session() as session: assert session.query(TrackRightsAttributeSuggestions).filter_by( unique_track_id=tuid).first() is None @db.test_schema def test_bulk_delete_removes_edits(): """Verify bulk_delete_track_rights_attributes also clears edits rows.""" tuid = 182 with mysql.db_session() as session: session.add(TrackRightsAttributesEdits( unique_track_id=tuid, rights_attribute_id=1, )) session.commit() TrackRightsAttributePersister.bulk_delete_track_rights_attributes(tuids=[tuid]) with mysql.db_session() as session: assert session.query(TrackRightsAttributesEdits).filter_by( unique_track_id=tuid).first() is None