"""Functional tests for retrieving multiple bulk tracks. Test endpoint: GET /tracks-bulk """ import json from oto import status as response_code from unittest.mock import MagicMock, patch from backend.constants import error from tests.testutils import db @patch('backend.handlers.track_handlers.g') @patch('backend.utils.handlers.is_jwt_identity_authorized') @db.test_schema_no_seed def test_get_multiple_bulk_tracks( mock_is_jwt_identity_authorized, mock_g: MagicMock, client_get_multiple_bulk_tracks, mocker, track_factory, fixture_app): """Test get multipe bulk tracks is successful.""" mock_g.request_context.jwt_identity_id = 'dummy_token' mock_is_jwt_identity_authorized.return_value = True tracks = [track_factory(), track_factory()] db.merge_model_objects(tracks) res = client_get_multiple_bulk_tracks( product_ids=[tracks[0].product_id]) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_body['pagination']['total_records'] @patch('backend.handlers.track_handlers.g') @patch('backend.utils.handlers.is_jwt_identity_authorized') @db.test_schema_no_seed def test_get_multiple_bulk_tracks_bad_product_ids( mock_is_jwt_identity_authorized, mock_g: MagicMock, client_get_multiple_bulk_tracks, mocker, track_factory, fixture_app): """Test validation error is returned when bad product_ids are passed.""" mock_g.request_context.jwt_identity_id = 'dummy_token' mock_is_jwt_identity_authorized.return_value = True res = client_get_multiple_bulk_tracks(product_ids=['a']) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert res_body['code'] == error.ERROR_CODE_QUERY_VALIDATION @patch('backend.handlers.track_handlers.g') @patch('backend.utils.handlers.is_jwt_identity_authorized') @db.test_schema_no_seed def test_get_multiple_bulk_tracks_duplicate_product_ids( mock_is_jwt_identity_authorized, mock_g: MagicMock, client_get_multiple_bulk_tracks, mocker, track_factory, fixture_app): """Test validation error is returned when bad product_ids are passed.""" mock_g.request_context.jwt_identity_id = 'dummy_token' mock_is_jwt_identity_authorized.return_value = True tracks = [track_factory(), track_factory()] db.merge_model_objects(tracks) res = client_get_multiple_bulk_tracks( product_ids=[track.product_id for track in tracks]) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert res_body['code'] == error.ERROR_CODE_QUERY_VALIDATION @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') @db.test_schema_no_seed def test_get_multiple_bulk_tracks_product_ids_with_invalid_jwt( mock_rule_access, mock_is_jwt_identity_authorized, mock_g: MagicMock, client_get_multiple_bulk_tracks, mocker, track_factory, fixture_app): """Test get multiple bulk tracks is JWT token is invalid.""" mock_rule_access.return_value = False mock_g.request_context.jwt_identity_id = 'dummy_token' mock_is_jwt_identity_authorized.return_value = False tracks = [track_factory(), track_factory()] db.merge_model_objects(tracks) res = client_get_multiple_bulk_tracks( product_ids=[tracks[0].product_id]) res_body = json.loads(res.data.decode()) assert res_body['code'] == error.OWS_PERMISSIONS_ERROR_CODE assert res_body['message'] == error.OWS_PRODUCT_FORBIDDEN_MESSAGE