"""Functional tests for creating Instant Grats.""" import json from oto import status as response_code import pytest from backend.constants import error from tests.testutils import db @pytest.fixture def instant_grat_create_request_data(): """Return a valid data for Instant Grat creating.""" return {'items': [{ 'tuid': 1, 'store_id': 1, 'date': '2018-05-20', }]} @db.test_schema_no_seed def test_create_instant_grats_for_product_wrong_tuid_provided( client, valid_headers, instant_grat_create_request_data): """Expect to create instant grat for product.""" product_id = 1 wrong_tuid = instant_grat_create_request_data.get('items')[0]['tuid'] uri = '/product/{product_id}/tracks/grats'.format(product_id=product_id) res = client.post( uri, headers=valid_headers, data=json.dumps(instant_grat_create_request_data)) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert res_data['message'] == ( error.NO_SUCH_TRACKS_IN_PRODUCT_MSG.format(wrong_tuid)) @db.test_schema_no_seed def test_create_instant_grats_for_product( client, valid_headers, instant_grat_create_request_data, track_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 tracks = [track_factory()] db.merge_model_objects(tracks) uri = '/product/{product_id}/tracks/grats'.format(product_id=product_id) res = client.post( uri, headers=valid_headers, data=json.dumps(instant_grat_create_request_data)) assert res.status_code == response_code.CREATED @db.test_schema_no_seed def test_create_instant_grats_for_product_with_user_data( client, valid_headers, instant_grat_create_request_data, track_factory, mocker): """Expect to create instant grat for product. Expect `created_by` field to be filled by data from Orchard-User-Id header. """ 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') expected_user_id = 'oa:2918' valid_headers.update({'Orchard-User-Id': expected_user_id}) product_id = 1 tracks = [track_factory()] db.merge_model_objects(tracks) uri = '/product/{product_id}/tracks/grats'.format(product_id=product_id) res = client.post( uri, headers=valid_headers, data=json.dumps(instant_grat_create_request_data)) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.CREATED assert res_data['items'][0]['grats'][0]['created_by'] == expected_user_id