"""Functional tests for updating an product project code via a PUT call.""" import json from unittest.mock import MagicMock from owsrequest import request from product_digital.constants import header as header_constants from product_digital.models import ows_product_workflow from tests.factories import release as release_factory from tests.factories import release_subgenre as release_subgenre_factory from tests.testutils import db def test_put_project_code_invalid_format( client, product_id, valid_headers_for_vendor): """Test that a put request fails if project code in invalid format.""" put_body = {'project_code': 123} put_response = client.put( '/product/audio/{}'.format(product_id), headers=valid_headers_for_vendor, data=json.dumps(put_body)) assert put_response.status_code == 400 @db.test_schema def test_put_project_code_success( client, orchard_user_id, product_id, valid_headers, empty_success, mocker): """Test that a put request can change project code.""" existing_release = release_factory.ReleaseFactory.build( release_id=product_id) existing_subgenre = release_subgenre_factory.ReleaseSubgenreFactory.build( release_id=product_id) db.seed_models(existing_release) db.seed_models(existing_subgenre) mocker.patch.object(request, 'get', return_value=empty_success) mocker.patch.object( ows_product_workflow, 'get_last_release_approval_queue', return_value=MagicMock(status_code=200, message=None)) put_body = { 'project_code': 'foo4242', 'account_type': 'vendor', 'account_id': 123} valid_headers[header_constants.ORCHARD_USER_ID] = orchard_user_id put_response = client.put( '/product/audio/{}'.format(product_id), headers=valid_headers, data=json.dumps(put_body)) assert put_response.status_code == 200 response_body = json.loads(put_response.data.decode()) assert response_body['vendor_catalog_number'] == 'foo4242'