"""Tests for physical product change history logic.""" from unittest.mock import MagicMock from oto.response import Response import pytest from ows_product_physical.constant import assets from ows_product_physical.logic import ownership from ows_product_physical.logic \ import product_physical_change_history as history from ows_product_physical.models import persister from ows_product_physical.validation import validation @pytest.mark.parametrize(( 'product_id', 'change_fields', 'method', 'response_status'), ( [42, {'field_name': 'artwork', 'upc': 100075897922}, 'create_artwork_change', 201], [42, {'field_name': 'wholesale_price', 'store_id': 2, 'new_price': '26.00'}, 'create_price_change', 201], [42, {'field_name': 'wholesale_price', 'store_id': 2, 'new_price': 'LP17'}, 'create_price_change', 201], [42, {'field_name': 'sale_start_date', 'store_id': 2, 'new_sale_start_date': '2018-02-02', 'old_sale_start_date': '2018-02-02' }, 'create_sale_start_date_change', 201], [42, {'field_name': 'release_date', 'store_id': 2, 'new_release_date': '2018-02-02', 'old_release_date': '2018-02-02' }, 'create_release_date_change', 201], [42, {'field_name': 'embargo_date', 'store_id': 2, 'new_embargo_date': '2018-02-02', 'old_embargo_date': '2018-02-02' }, 'create_embargo_date_change', 201] )) def test_create_change_success( mocker, product_id, change_fields, method, response_status, valid_post_header, db_release, mock_app, feature_engine): """History change success scenario.""" account_type = valid_post_header['Grass-Account-Type'] account_id = valid_post_header['Grass-Account-Id'] sale_release_embargo_date = [ 'sale_start_date', 'release_date', 'embargo_date'] mocker.patch.object(persister, 'get_product_by_id', return_value=Response( message=db_release)) mocker.patch.object( ownership, 'check_project_ownership', return_value=Response()) mocker.patch.object(validation, 'validate', return_value=True) mocker.patch.object(history, method, return_value=Response(status=201)) history_response = history.create( product_id, account_type, account_id, **change_fields) if change_fields['field_name'] in sale_release_embargo_date: assert history_response.status == 200 else: assert history_response.status == response_status def test_create_change_price_helper_success(mocker, valid_post_product_data): """Change price success scenario.""" field_name = 'wholesale_price' store_id = 2 new_price = '10.99' change_history_fields = { 'field_name': field_name, 'store_id': store_id, 'new_price': new_price } product_id = 1393292 mocker.patch.object( persister, 'get_product_by_id', return_value=MagicMock(message=valid_post_product_data)) mocker.patch.object( persister, 'create_history', return_value=Response(status=201)) history_response = history.create_price_change( product_id, change_history_fields) persister.create_history.assert_called_once_with( product_id=product_id, field_name=field_name, store_id=store_id, new_price=new_price) assert history_response.status == 201 def test_create_change_price_helper_bad_request( mocker, fixture_persister_response_error): """Change price success scenario.""" field_name = 'wholesale_price' store_id = 2 new_price = '10.99' change_history_fields = { 'field_name': field_name, 'store_id': store_id, 'new_price': new_price } product_id = 1393292 mocker.patch.object( persister, 'create_history', return_value=fixture_persister_response_error) history_response = history.create_price_change( product_id, change_history_fields) assert history_response.status == 500 assert history_response.errors['code'] == 'bad_request' assert history_response.errors['message'] == 'bad request' def test_create_change_artwork_helper_success( mocker, db_releases, valid_release_upc): """Change artwork success scenario.""" field_name = 'artwork' upc = valid_release_upc change_history_fields = { 'field_name': field_name, 'upc': upc } product_id = 1393292 mocker.patch.object( persister, 'get_upc_by_product_id', return_value=MagicMock(message=valid_release_upc)) mocker.patch.object( persister, 'create_history', return_value=Response(status=201)) history_response = history.create_artwork_change( product_id, change_history_fields) artwork_url = assets.QA_IMAGE_URL.format(upc=upc) persister.create_history.assert_called_once_with( product_id=product_id, field_name=field_name, artworkpath=artwork_url) assert history_response.status == 201 def test_create_change_artwork_helper_not_found( mocker, db_releases, valid_release_upc): """Change artwork success scenario.""" field_name = 'artwork' upc = 3333333333333 change_history_fields = { 'field_name': field_name, 'upc': upc } product_id = 1393292 mocker.patch.object( persister, 'get_upc_by_product_id', return_value=MagicMock(message=valid_release_upc)) history_response = history.create_artwork_change( product_id, change_history_fields) assert history_response.status == 400 assert history_response.errors['code'] == 'bad_request' assert history_response.errors['message'] == 'bad request' def test_create_change_artwork_helper_error( mocker, db_releases, valid_release_upc): """Change artwork success scenario.""" field_name = 'artwork' upc = 3333333333333 change_history_fields = { 'field_name': field_name, 'upc': upc } product_id = 1393292 mocker.patch.object( persister, 'get_upc_by_product_id', return_value=MagicMock(message=valid_release_upc)) history_response = history.create_artwork_change( product_id, change_history_fields) assert history_response.status == 400 assert history_response.errors['code'] == 'bad_request' assert history_response.errors['message'] == 'bad request' def test_create_sale_start_date_change_success( mocker, db_releases, valid_release_upc, change_sale_start_date_fields): """Change sale_start_date success scenario.""" product_id = 1393292 mocker.patch.object( persister, 'create_history', return_value=Response(status=201)) history_response = history.create_sale_start_date_change( product_id, change_sale_start_date_fields) persister.create_history.assert_called_once() assert history_response.status == 201 def test_create_release_date_change_success( mocker, db_releases, valid_release_upc, change_release_date_fields): """Change release_date success scenario.""" product_id = 1393292 mocker.patch.object( persister, 'create_history', return_value=Response(status=201)) history_response = history.create_release_date_change( product_id, change_release_date_fields) persister.create_history.assert_called_once() assert history_response.status == 201 def test_create_embargo_date_change_success( mocker, db_releases, valid_release_upc, change_embargo_date_fields): """Change embargo_date success scenario.""" product_id = 1393292 mocker.patch.object( persister, 'create_history', return_value=Response(status=201)) history_response = history.create_embargo_date_change( product_id, change_embargo_date_fields) persister.create_history.assert_called_once() assert history_response.status == 201