"""Tests for handlers.""" import copy import json from unittest.mock import MagicMock from ows_product_physical.constant import field from ows_product_physical.logic import product_physical from ows_product_physical.validation import validation def test_handler_post_product_success( monkeypatch, client, fixture_response_ok, feature_engine, fixture_response_created, valid_post_header, valid_post_product_data): """Test POST product handler success state both header and body.""" valid_post_product_data.update({field.COUNTRY_OF_ORIGIN: 3}) monkeypatch.setattr( product_physical, 'create', value=MagicMock( return_value=fixture_response_created)) result = client.post( '/product', headers=valid_post_header, data=json.dumps(valid_post_product_data)) assert result.status_code == 201 assert product_physical.create.called def test_handler_post_product_body_error( feature_engine, monkeypatch, client, fixture_response_error, valid_post_header, valid_post_product_data): """Test POST product handler post body validation fail state.""" mutated_product = copy.copy(valid_post_product_data) mutated_product.pop(field.PROJECT_ID) monkeypatch.setattr( validation, 'validate', value=MagicMock( return_value=fixture_response_error)) monkeypatch.setattr( product_physical, 'create', value=MagicMock()) result = client.post( '/product', headers=valid_post_header, data=mutated_product) assert result.status_code == 400 assert validation.validate.called assert not product_physical.create.called def test_handler_post_product_product_code_validation_error( feature_engine, monkeypatch, client, fixture_response_created, valid_post_header, valid_post_product_data): """Test POST /product product code validation failure.""" mutated_product = copy.copy(valid_post_product_data) mutated_product.update({field.PRODUCT_CODE: '123456789ABCDEFG'}) monkeypatch.setattr( product_physical, 'create', value=MagicMock( return_value=fixture_response_created)) result = client.post( '/product', headers=valid_post_header, data=json.dumps(mutated_product)) assert result.status_code == 400 assert not product_physical.create.called def test_handler_post_product_display_configuration_body_validation_error( feature_engine, monkeypatch, client, fixture_response_created, valid_post_header, valid_post_product_data): """Test POST /product display configuration failure.""" mutated_product = copy.copy(valid_post_product_data) del mutated_product[field.DISPLAY_CONFIGURATION] monkeypatch.setattr( product_physical, 'create', value=MagicMock( return_value=fixture_response_created)) result = client.post( '/product', headers=valid_post_header, data=json.dumps(mutated_product)) assert result.status_code == 400 assert not product_physical.create.called def test_handler_post_product_header_error( monkeypatch, client, fixture_response_ok, feature_engine, fixture_response_created, valid_post_header, valid_post_product_data): """Test POST product handler success state both header and body.""" mutated_header = valid_post_header mutated_header['Grass-Account-Type'] = 'invalid account type' monkeypatch.setattr( product_physical, 'create', value=MagicMock( return_value=fixture_response_created)) result = client.post( '/product', headers=mutated_header, data=json.dumps(valid_post_product_data)) assert result.status_code == 400 assert not product_physical.create.called def test_handler_post_product_with_country_of_origin( monkeypatch, client, feature_engine, fixture_response_created, valid_post_header, valid_post_product_data): """Test POST product handler success state with key country of origin.""" monkeypatch.setattr( product_physical, 'create', value=MagicMock( return_value=fixture_response_created)) valid_post_product_data.update({field.COUNTRY_OF_ORIGIN: 3}) result = client.post( '/product', headers=valid_post_header, data=json.dumps(valid_post_product_data)) assert result.status_code == 201 assert product_physical.create.called def test_handler_post_product_without_country_of_origin( monkeypatch, client, feature_engine, fixture_response_created, valid_post_header, valid_post_product_data): """Test POST product handler error state without key country of origin.""" monkeypatch.setattr( product_physical, 'create', value=MagicMock( return_value=fixture_response_created)) result = client.post( '/product', headers=valid_post_header, data=json.dumps(valid_post_product_data)) assert result.status_code == 400 assert not product_physical.create.called