"""Functional tests for deleting Instant Grats data.""" import datetime import json from oto import response from oto import status as response_code from backend.constants import error from tests.testutils import db @db.test_schema_no_seed def test_delete_instant_grat_by_store_id( client, track_factory, instant_grat_factory): """Expect to delete instant grat by product, track and store ids.""" product_id = 101 created_at = datetime.datetime(year=2018, month=5, day=20) track = track_factory(product_id=product_id) grats = [ instant_grat_factory( tuid=track.tuid, user_id='25824', user_type='oa', date_created=created_at, store_id=187), instant_grat_factory( tuid=track.tuid, user_id='25824', user_type='oa', date_created=created_at, store_id=1001)] db.merge_model_objects([track]) db.merge_model_objects(grats) expected_res = response.Response({'message': 'Deleted'}) uri = '/product/{product_id}/tracks/grats/{track_id}/store/{store_id}' res = client.delete( uri.format( product_id=product_id, track_id=track.tuid, store_id=187)) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_data == expected_res.message expected_res = response.Response({ 'items': [ {'tuid': 1, 'grats': [ {'created_at': created_at.isoformat(), 'created_by': 'oa:25824', 'store_id': 1001, 'active': 'Y', 'date': '2017-05-20T00:00:00'}]}]}) res = client.get('/product/{product_id}/tracks/grats'.format( product_id=product_id)) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.OK assert res_data == expected_res.message @db.test_schema_no_seed def test_delete_instant_grat_by_store_id_not_found(client, track_factory): """Expect to get 404 error trying to delete not existing grats.""" product_id = 101 track = track_factory(product_id=product_id) db.merge_model_objects([track]) expected_res = response.create_not_found_response( error.INSTANT_GRATS_NOT_FOUND_MSG) uri = '/product/{product_id}/tracks/grats/{track_id}/store/{store_id}' res = client.delete( uri.format( product_id=product_id, track_id=track.tuid, store_id=187)) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.NOT_FOUND assert res_data == expected_res.errors @db.test_schema_no_seed def test_delete_instant_grat_by_store_id_invalid_product( client, track_factory): """Expect to get error when track and product ids not match.""" product_id = 101 track = track_factory(product_id=product_id) db.merge_model_objects([track]) expected_res = {'message': '`1` tracks do not exist in this product.', 'code': 'Track not found'} uri = '/product/{product_id}/tracks/grats/{track_id}/store/{store_id}' res = client.delete( uri.format( product_id=102, track_id=track.tuid, store_id=187)) res_data = json.loads(res.data.decode()) assert res.status_code == response_code.BAD_REQUEST assert res_data == expected_res @db.test_schema_no_seed def test_delete_instant_grat_by_store_id_invalid_track(client): """Expect to get error when track not found.""" uri = '/product/{product_id}/tracks/grats/{track_id}/store/{store_id}' res = client.delete( uri.format( product_id=1, track_id=1, store_id=187)) assert res.status_code == response_code.NOT_FOUND @db.test_schema_no_seed def test_delete_instant_grats_for_product( client, track_factory, instant_grat_factory): """Expect to delete all product instant grats.""" product_id = 101 created_at = datetime.datetime(year=2018, month=5, day=20) tracks = [ track_factory(product_id=product_id), track_factory(product_id=product_id)] grats = [ instant_grat_factory( tuid=tracks[0].tuid, user_id='25824', user_type='oa', date_created=created_at, store_id=187), instant_grat_factory( tuid=tracks[0].tuid, user_id='25824', user_type='oa', date_created=created_at, store_id=1001), instant_grat_factory( tuid=tracks[1].tuid, user_id='25824', user_type='oa', date_created=created_at, store_id=187)] db.merge_model_objects(tracks) db.merge_model_objects(grats) res = client.delete('/product/{product_id}/tracks/grats'.format( product_id=product_id)) assert res.status_code == response_code.OK res = client.get('/product/{product_id}/tracks/grats'.format( product_id=product_id)) assert res.status_code == response_code.NOT_FOUND