"""Test config for models.""" import datetime import pytest @pytest.fixture def db_result_downloads_store(): """Mock database result.""" return [ (1, datetime.date(2018, 7, 4), 40), (1, datetime.date(2018, 7, 5), 12), (187, datetime.date(2018, 7, 6), 31), ] @pytest.fixture def expected_downloads_by_store(): """Expect formatted response.""" return [ {"store_id": 1, "date": datetime.date(2018, 7, 4), "downloads": 40}, {"store_id": 1, "date": datetime.date(2018, 7, 5), "downloads": 12}, {"store_id": 187, "date": datetime.date(2018, 7, 6), "downloads": 31}, ] @pytest.fixture def db_result_downloads_country(): """Mock database result.""" return [ ("US", datetime.date(2018, 7, 4), 40), ("GB", datetime.date(2018, 7, 5), 12), ("CA", datetime.date(2018, 7, 6), 31), ] @pytest.fixture def expected_response_downloads_country(): """Expect formatted response.""" return [ {"country_code": "US", "date": datetime.date(2018, 7, 4), "downloads": 40}, {"country_code": "GB", "date": datetime.date(2018, 7, 5), "downloads": 12}, {"country_code": "CA", "date": datetime.date(2018, 7, 6), "downloads": 31}, ] @pytest.fixture def db_result_downloads_all(): """Mock database result.""" return [ (datetime.date(2018, 7, 4), 40), (datetime.date(2018, 7, 5), 12), (datetime.date(2018, 7, 6), 31), ] @pytest.fixture def expected_response_downloads_all(): """Expect formatted response.""" return [ {"date": datetime.date(2018, 7, 4), "downloads": 40}, {"date": datetime.date(2018, 7, 5), "downloads": 12}, {"date": datetime.date(2018, 7, 6), "downloads": 31}, ] def snowflake_fetch_assert(sf_mock, expected_sql, params): """Assert snowflake mock was called with proper sql and params.""" assert sf_mock.call_count == 1 assert strings_equal(sf_mock.call_args[0][0], expected_sql) assert sf_mock.call_args[0][1] == params def strings_equal(value1, value2): """Compare normalized string values.""" return _normalize_string(value1) == _normalize_string(value2) def _normalize_string(value): """Flatten multiline strings and remove white spaces.""" return "".join("".join(value.splitlines()).split())