"""Tests for Track utils.""" from datetime import datetime from oto import response import pytest from backend.models import ows_carveouts from backend.utils import grat_utils @pytest.mark.parametrize( 'grats_data_list, formatted_result', [ ( [{'tuid': 1, 'store_id': 1, 'user_id': 12345, 'user_type': 'oa', 'date': datetime(year=2017, month=5, day=20), 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20) } ], [{'tuid': 1, 'grats': [ {'store_id': 1, 'created_by': 'oa:12345', 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20), 'date': datetime(year=2017, month=5, day=20) }] }] ), ( [{'tuid': 1, 'store_id': 1, 'user_id': 12345, 'user_type': 'oa', 'date': datetime(year=2017, month=5, day=20), 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20) }, {'tuid': 1, 'store_id': 2, 'user_id': 12345, 'user_type': 'oa', 'date': datetime(year=2017, month=5, day=20), 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20) } ], [{'tuid': 1, 'grats': [ {'store_id': 1, 'created_by': 'oa:12345', 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20), 'date': datetime(year=2017, month=5, day=20) }, {'store_id': 2, 'created_by': 'oa:12345', 'active': 'Y', 'date': datetime(year=2017, month=5, day=20), 'created_at': datetime(year=2017, month=5, day=20) }] }] ), ( [ { 'tuid': 1, 'store_id': 1, 'user_id': 12345, 'user_type': 'oa', 'date': datetime(year=2017, month=5, day=20), 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20) }, { 'tuid': 2, 'store_id': 1, 'user_id': 12345, 'user_type': 'oa', 'date': datetime(year=2017, month=5, day=20), 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20) } ], [ { 'tuid': 1, 'grats': [ { 'store_id': 1, 'created_by': 'oa:12345', 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20), 'date': datetime(year=2017, month=5, day=20) }] }, { 'tuid': 2, 'grats': [ { 'store_id': 1, 'created_by': 'oa:12345', 'active': 'Y', 'created_at': datetime(year=2017, month=5, day=20), 'date': datetime(year=2017, month=5, day=20) }] }] ) ]) def test_group_grats_by_tuid( grats_data_list, formatted_result, instant_grat_factory): """Test grouping instant grats by tuid util function.""" instant_grats = [ instant_grat_factory( tuid=grat['tuid'], store_id=grat['store_id'], user_id=grat['user_id'], user_type=grat['user_type'], date=grat['date'], active=grat['active'], date_created=grat['created_at']).to_dict() for grat in grats_data_list] result = grat_utils.group_grats_by_tuid(instant_grats) assert result == formatted_result @pytest.mark.parametrize( 'provided_stores, fetched_stores_response, result_status', [ ( [1, 181], response.Response( [{'id': 1, 'name': 'A'}, {'id': 181, 'name': 'B'}]), 200), ( [1, 181], response.Response([{'id': 1, 'name': 'A'}]), 400), ([1, 181], response.create_not_found_response(), 404) ] ) def test_validate_provided_instant_grats_stores( mocker, provided_stores, fetched_stores_response, result_status): """Test grats stores validation.""" mocker.patch.object( ows_carveouts, 'get_stores_allowed_for_instant_grats', return_value=fetched_stores_response) result = grat_utils.validate_provided_instant_grats_stores(provided_stores) assert result.status == result_status