"""Functional tests for retrieving spatial ISRC map for a product. Test endpoint: GET /products//tracks/spatial """ import json from unittest.mock import MagicMock, patch from oto import status as response_code from tests.testutils import db from backend.models.track_spatial import TrackSpatial @db.test_schema_no_seed def test_get_spatial_isrc_map_by_product_id( client_get_spatial_isrc_map_for_product, track_factory): """Test spatial ISRC map is returned for all tracks in a product.""" product_id = 1 tracks = [track_factory(product_id=product_id), track_factory(product_id=product_id)] db.merge_model_objects(tracks) db.merge_model_objects([ TrackSpatial(track_id=tracks[0].tuid, isrc='US1234567890'), TrackSpatial(track_id=tracks[1].tuid, isrc='US0987654321'), ]) res = client_get_spatial_isrc_map_for_product(product_id) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_data == { str(tracks[0].tuid): 'US1234567890', str(tracks[1].tuid): 'US0987654321', } @db.test_schema_no_seed def test_get_spatial_isrc_map_by_product_id_no_spatial( client_get_spatial_isrc_map_for_product, track_factory): """Test empty dict returned when product tracks have no spatial records.""" product_id = 1 track = track_factory(product_id=product_id) db.merge_model_objects([track]) res = client_get_spatial_isrc_map_for_product(product_id) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_data == {} @db.test_schema_no_seed def test_get_spatial_isrc_map_by_product_id_only_own_tracks( client_get_spatial_isrc_map_for_product, track_factory): """Test spatial records from other products are not included.""" product_id = 1 other_product_id = 2 own_track = track_factory(product_id=product_id) other_track = track_factory(product_id=other_product_id) db.merge_model_objects([own_track, other_track]) db.merge_model_objects([ TrackSpatial(track_id=own_track.tuid, isrc='US1234567890'), TrackSpatial(track_id=other_track.tuid, isrc='US0987654321'), ]) res = client_get_spatial_isrc_map_for_product(product_id) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_data == {str(own_track.tuid): 'US1234567890'} @db.test_schema_no_seed @patch('backend.handlers.track_handlers.g') @patch('backend.utils.handlers.is_jwt_identity_authorized') @patch('backend.handlers.track_handlers.flask_request.verify_rules_access_standalone') def test_get_spatial_isrc_map_by_product_id_unauthorized( mock_rule_access: MagicMock, mock_is_jwt_identity_authorized: MagicMock, mock_g: MagicMock, client_get_spatial_isrc_map_for_product, track_factory, fixture_app): """Test 403 returned when access rules deny the request.""" mock_rule_access.return_value = False mock_g.request_context.jwt_identity_id = None track = track_factory(product_id=1) db.merge_model_objects([track]) res = client_get_spatial_isrc_map_for_product(1) assert res.status_code == 403