"""Functional tests around release correction detail.""" import json import pytest from tests.factories import release_correction as release_correction_factory from tests.testutils import db @pytest.fixture def release_correction_id(): """Create a release id for testing.""" return 123 @pytest.fixture def correction_details_create_response_body(release_correction_id): """Return the correction details create message properties for testing.""" return { 'items': [ { 'release_correction_detail_id': 1, 'table_name': 'randy', 'field_name': 'butternubs', 'key_id': 123, 'key_value': 'track_1.wav', }, { 'release_correction_detail_id': 2, 'table_name': 'releases', 'field_name': 'remixer', 'key_id': 124, 'key_value': [{ 'role': 'remixer', 'name': 'Greatest Artist' }] }, { 'release_correction_detail_id': 3, 'table_name': 'jake', 'field_name': 'the_doge', 'key_id': 125, 'key_value': 808, }, { 'release_correction_detail_id': 4, 'table_name': 'releases', 'field_name': 'imprint', 'key_id': 126, 'key_value': '', } ] } @pytest.fixture def correction_details_payload(): """Return the correction details payload for testing.""" return { 'items': [ { 'table_name': 'randy', 'field_name': 'butternubs', 'key_id': 123, 'key_value': 'track_1.wav', 'last_updated_by': 1234, 'last_updated_type': 'vendor' }, { 'table_name': 'releases', 'field_name': 'remixer', 'key_id': 124, 'key_value': [{ 'role': 'remixer', 'name': 'Greatest Artist' }], 'last_updated_by': 1234, 'last_updated_type': 'vendor' }, { 'table_name': 'jake', 'field_name': 'the_doge', 'key_id': 125, 'key_value': 808, 'last_updated_by': 1234, 'last_updated_type': 'vendor' }, { 'table_name': 'releases', 'field_name': 'imprint', 'key_id': 126, 'key_value': None, 'last_updated_by': 1234, 'last_updated_type': 'vendor' } ] } @db.test_schema def test_post_correction_details_success( client, correction_details_payload, correction_details_create_response_body, valid_headers): """Test result when creating a new correction details.""" correction = release_correction_factory.ReleaseCorrectionFactory \ .build_batch(1, status='active')[0] db.seed_models(correction) result = client.post( '/correction/{}/details'.format(correction.release_correction_id), headers=valid_headers, data=json.dumps(correction_details_payload)) response_json = json.loads(result.data.decode('utf-8')) assert result.status_code == 201 assert response_json == correction_details_create_response_body def test_post_correction_details_error( client, correction_details_payload, valid_headers, release_correction_id): """Test result when creating a new correction details and failure.""" result = client.post( '/correction/{}/details'.format(release_correction_id), headers=valid_headers, data=json.dumps(correction_details_payload)) assert result.status_code == 500