"""Tests for handlers.""" import json from oto import response from ows_product_physical.constant import error from ows_product_physical.logic import ownership from ows_product_physical.logic import product_physical from ows_product_physical.models import persister from ows_product_physical.validation import validation def test_handler_put_product_status_by_id_success( db_fixture, mocker, client, valid_put_header, feature_engine): """Test `PUT /product/{productId}/status` handler success state.""" mocker.spy(validation, 'validate') mocker.patch.object( product_physical, 'update_product_status', return_value=response.Response({}), autospec=True) put_product_response = client.put( '/product/42/status', headers=valid_put_header, data=json.dumps({'status': 'transfer_to_content'})) assert validation.validate.called assert put_product_response.status_code == 200 assert product_physical.update_product_status.called def test_handler_put_product_status_by_id_validation_fail( db_fixture, mocker, client, valid_put_header, feature_engine): """Test `PUT /product/{productId}/status` fails schema validation.""" mocker.patch.object( product_physical, 'update_product_status', return_value=response.Response({}), autospec=True) put_product_response = client.put( '/product/42/status', headers=valid_put_header, data=json.dumps({'status': 'banana'})) assert put_product_response.status_code == 400 assert not product_physical.update_product_status.called def test_handler_put_product_status_no_upc_stored_failure( db_fixture, feature_engine, mocker, client, valid_put_header): """Test `PUT /product/{productId}/status` returns an error without upc.""" mocker.patch.object( persister, 'get_product_by_id', return_value=response.Response({}), autospec=True) mocker.spy(persister, 'update_product_status') mocker.patch.object( ownership, 'check_project_ownership', return_value=response.Response( status=200), autospec=True) put_product_response = client.put( '/product/42/status', headers=valid_put_header, data=json.dumps({'status': 'transfer_to_content'})) response_data = json.loads(put_product_response.data.decode('utf8')) assert put_product_response.status_code == 400 assert response_data.get('code') == error.RELEASE_STATUS_UPC_ERROR