"""Functional tests for product copy endpoint.""" import json import pytest from ows_product_physical import config from ows_product_physical.constant import service_name from ows_product_physical.validation import validation @pytest.mark.parametrize('copy_data', [ ({'product_code': 'productcode001', 'distribution_format_id': 74, 'box_lot': 1, 'initial_stock': 1, 'packaging_id': 1, 'units_per_set': 3, 'display_configuration': '2 x CD + Viking Ship'}), ({'product_code': 'productcode001', 'distribution_format_id': 74, 'box_lot': 1, 'initial_stock': 1, 'packaging_id': 1, 'units_per_set': 3, 'display_configuration': '2 x CD + Viking Ship', 'wholesale_price': 12.99}) ]) def test_copy_product_success( copy_data, client, db_with_data, ows_request_mocker, valid_vendor_id, valid_subaccount_id, valid_project_code, valid_artist_id, valid_placeholder_upc, db_project_id, db_release_id, feature_engine, valid_copy_header): """Test copy product success.""" PRODUCT_GET_RESPONSE_VALIDATOR = validation.json_validator( config.GET_RESPONSE_SCHEMA) ows_request_mocker.mock_response( service_name.OWS_PROJECT, '/project/{}'.format(db_project_id), json={ 'vendor_id': valid_vendor_id, 'subaccount_id': valid_subaccount_id, 'project_code': valid_project_code, 'artist_id': valid_artist_id}) ows_request_mocker.mock_response( service_name.OWS_PRODUCT, '/upc/placeholder', method='post', json={'placeholder_upc': valid_placeholder_upc}) copy_result = client.post( '/product/{}/copy'.format(db_release_id), headers=valid_copy_header, data=json.dumps(copy_data)) assert copy_result.status_code == 201 new_product_id = json.loads( copy_result.data.decode('utf8')).get('product_id') assert new_product_id > db_release_id ows_request_mocker.mock_response( service_name.OWS_MARKETING, '/highlights/release/{}?mkt_program_id=20'.format(new_product_id), json={'items': [{'description': 'nice product'}]}) ows_request_mocker.mock_response( service_name.OWS_MARKETING, '/highlights/release/{}?mkt_program_id=20'.format(new_product_id), method='head', json={'items': [{'description': 'nice product'}]}) new_product_result = client.get('/product/{}'.format(new_product_id)) new_product = json.loads(new_product_result.data.decode('utf-8')) new_product.pop('country_of_origin') assert validation.validate(new_product, PRODUCT_GET_RESPONSE_VALIDATOR) def test_copy_product_grass_request_blocking(client, valid_copy_header, feature_engine): """Test copy product grass request blocking.""" result = client.post( '/product/12321/copy', headers=valid_copy_header) assert result.status_code == 400