"""Functional tests for creating a track. Test endpoint: POST /track """ import json from unittest.mock import MagicMock from oto import status as response_code import pytest from tests.testutils import constants as test_consts from tests.testutils import db from tests.testutils import mocks @db.test_schema def test_create_track( client, mocker, client_headers, track_create_data, track_create_expected_logic_response): """Test create track is successful.""" mocks.head_response(mocker) message = {'upc': 123456789012, 'vendor_id': 100, 'product_id': 100} get_response = MagicMock(status=200, message=message) mocker.patch('backend.models.ows_product._get_from_ows_product_service', return_value=get_response) res = client.post( 'track', headers=client_headers, data=json.dumps(track_create_data)) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.CREATED assert res_body == track_create_expected_logic_response @db.test_schema def test_create_track_name_required( client, client_headers, track_create_data): """Test create track fails with no name specified.""" track_create_data.pop('track_name') res = client.post( 'track', headers=client_headers, data=json.dumps(track_create_data)) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert 'track_name' in res_body['message'] @db.test_schema @pytest.mark.parametrize('track_name', test_consts.TEST_INVALID_TRACK_NAMES) def test_create_track_invalid_name( client, client_headers, track_create_data, track_name): """Test create track fails with invalid name.""" track_create_data['track_name'] = track_name res = client.post( 'track', headers=client_headers, data=json.dumps(track_create_data)) res_body = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert 'track_name' in res_body['message']