"""Functional tests for updating performers data.""" import json from oto import status as response_code from tests.testutils import db @db.test_schema_no_seed def test_update_performer(client_update_performers, track_factory): """Expect to get 200 with list of saved performers with IDs.""" track = track_factory() db.merge_model_objects([track]) request_data = { 'performers': [{ 'type': 'primary', 'birth_name': 'Test performer', 'performer_role_id': 1 }, { 'type': 'primary', 'birth_name': 'Test performer', 'performer_role_id': 1 }, { 'type': 'primary', 'birth_name': 'Test performer 2', 'performer_role_id': 2 }] } expected_response_data = { 'tuid': track.tuid, 'performers': [{ 'type': 'primary', 'birth_name': 'Test performer', 'performer_role_id': 1, 'performer_id': 1 }, { 'type': 'primary', 'birth_name': 'Test performer', 'performer_role_id': 1, 'performer_id': 2 }, { 'type': 'primary', 'birth_name': 'Test performer 2', 'performer_role_id': 2, 'performer_id': 3 }] } res = client_update_performers(track.tuid, request_data) data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert data == expected_response_data @db.test_schema_no_seed def test_update_performer_blank(client_update_performers, track_factory): """Test empty list of performers can be saved.""" track = track_factory() db.merge_model_objects([track]) request_data = {'performers': []} expected_response_data = { 'tuid': track.tuid, 'performers': [] } res = client_update_performers(track.tuid, request_data) data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert data == expected_response_data def test_update_performer_invalid_birth_name(client_update_performers): """Test invalid performer birth name returns error response.""" tuid = 1 request_data = { 'performers': [{ 'type': 'primary', 'birth_name': 'Test performer', 'performer_role_id': 1, }, { 'type': 'featured', 'birth_name': '', 'performer_role_id': 1, }] } res = client_update_performers(tuid, request_data) data = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert data['code'] == 'validation_error' assert data['message'] == { 'performers': {'1': {'birth_name': ['Field is required']}}} def test_update_performer_invalid_type(client_update_performers): """Test invalid performer type returns error response.""" tuid = 1 request_data = { 'performers': [{ 'type': 'primary', 'birth_name': 'Test performer', 'performer_role_id': 1, }, { 'type': 'invalid', 'birth_name': 'Big bad wolf', 'performer_role_id': 1, }] } res = client_update_performers(tuid, request_data) data = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert data['code'] == 'validation_error' assert data['message'] == { 'performers': {'1': {'type': ['Not a valid choice.']}}} @db.test_schema_no_seed def test_update_performer_invalid_performer_role_id(client_update_performers): """Test invalid performer_role_id returns error response.""" tuid = 1 request_data = { 'performers': [{ 'type': 'primary', 'birth_name': 'Snowball', 'performer_role_id': -1 }] } res = client_update_performers(tuid, request_data) data = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert data['code'] == 'validation_error' assert data['message'] == { 'performers': {'0': {'performer_role_id': ['Must be at least 1.']}}}