"""Functional tests for retrieving a track. Test endpoint: GET /track/ """ import json from oto import response from oto import status as response_code import pytest from backend.constants import track_field as tf from backend.models import ows_product from tests.testutils import db @pytest.mark.parametrize('exclude', [ [], [tf.LOCALIZATIONS] ]) @db.test_schema def test_get_all_tracks_by_product_id( mocker, client_get_product_tracks, test_valid_product_id, test_product_valid_tracks_logic_response, exclude): """Test get all tracks is successful.""" mocker.patch.object( ows_product, 'get_track_localizations') res = client_get_product_tracks( product_id=test_valid_product_id, exclude=exclude) res_body = json.loads(res.data.decode()) assert res_body == test_product_valid_tracks_logic_response assert res.status_code == response_code.OK assert ows_product.get_track_localizations.called !=\ (tf.LOCALIZATIONS in exclude) @db.test_schema def test_get_all_tracks_by_product_id_no_tracks( mocker, client_get_product_tracks): """Test get all tracks is successful for product with no tracks.""" mocker.patch( 'backend.models.ows_product.get_track_localizations', return_value=response.create_not_found_response()) res = client_get_product_tracks(100) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_body['items'] == [] @db.test_schema def test_get_all_tracks_by_product_id_without_grass_headers( client_get_product_tracks, valid_headers, test_valid_product_id, test_product_valid_tracks_logic_response): """Test get track is successful without grass headers.""" res = client_get_product_tracks( test_valid_product_id, headers=valid_headers) res_body = json.loads(res.data.decode()) assert res_body == test_product_valid_tracks_logic_response assert res.status_code == response_code.OK @db.test_schema def test_get_all_tracks_by_product_id_with_invalid_grass_headers( client_get_product_tracks, invalid_grass_headers, test_product_id): """Test get track fails with invalid grass headers.""" res = client_get_product_tracks( test_product_id, headers=invalid_grass_headers) assert res.status_code == response_code.BAD_REQUEST @db.test_schema def test_get_all_tracks_by_product_id_invalid_id_type(client): """Test get invalid track with id of type string.""" res = client.get('product/abc/tracks') assert res.status_code == response_code.NOT_FOUND @db.test_schema def test_get_all_tracks_by_product_id_light( client_get_product_tracks_light, test_valid_product_id, test_product_valid_tracks_light_logic_response): """Test get all tracks light endpoint is successful.""" res = client_get_product_tracks_light( product_id=test_valid_product_id) res_body = json.loads(res.data.decode()) assert res_body == test_product_valid_tracks_light_logic_response assert res.status_code == response_code.OK