"""Functional tests for creating Instant Grats.""" from datetime import datetime import json from oto import status as response_code import pytest from tests.testutils import db @pytest.fixture def instant_grat_update_request_data(): """Return a valid data for Instant Grat updating.""" return {'items': [{ 'tuid': 1, 'store_id': 1, 'date': '2018-05-20', }]} @db.test_schema_no_seed def test_update_instant_grats_for_product( client, valid_headers, instant_grat_update_request_data, track_factory, instant_grat_factory, mocker): """Expect to create instant grat for product.""" from tests.testutils import mocks mocks.ows_product_digital_get_product_by_id( mocker, preorder_date='2018-01-01', sale_start_date='2019-01-01') product_id = 1 instant_grat = instant_grat_factory( tuid=1, store_id=1, user_id=25824, user_type='oa', date=datetime( year=1998, month=5, day=20)) expected_result = [{ 'tuid': 1, 'grats': [{ 'created_by': 'oa:25824', 'store_id': 1, 'active': 'Y', 'date': '2018-05-20T00:00:00'}]}] db.merge_model_objects([track_factory(), instant_grat]) uri = '/product/{product_id}/tracks/grats'.format(product_id=product_id) res = client.patch( uri, headers=valid_headers, data=json.dumps(instant_grat_update_request_data)) res_data = json.loads(res.data.decode()) expected_result[0]['grats'][0]['created_at'] = res_data.get( 'items')[0]['grats'][0]['created_at'] assert res.status_code == response_code.OK assert res_data.get('items') == expected_result @db.test_schema_no_seed def test_update_instant_grats_for_product_no_such_track( client, valid_headers, instant_grat_update_request_data): """Update instant grat for product if track with such id don't exist.""" product_id = 1 uri = '/product/{product_id}/tracks/grats'.format(product_id=product_id) res = client.patch( uri, headers=valid_headers, data=json.dumps(instant_grat_update_request_data)) assert res.status_code == response_code.NOT_FOUND