import json from unittest.mock import MagicMock from unittest.mock import patch import pytest from ows_accounting.connectors import redis from ows_accounting.models import reserves from ows_accounting.models.sql import physical_reserves @pytest.fixture def reserves_data(): return [ { 'reserve_taken_date': 'Jan 2019', 'reserve_release_date': 'Jul 2019', 'currency': 'USD', 'amount': '2795.82', 'period': '239' }, { 'reserve_taken_date': 'Feb 2019', 'reserve_release_date': 'Aug 2019', 'currency': 'GBP', 'amount': '100.82', 'period': '240' } ] @pytest.fixture def reserves_snowlake_data(): return [ ['Jan 2019', 'Jul 2019', 'USD', 2795.82, 239], ['Feb 2019', 'Aug 2019', 'GBP', 100.82, 240], ] def test_get_from_cache(reserves_data, monkeypatch): """Test getting revenue data.""" data = str.encode(json.dumps(reserves_data)) monkeypatch.setattr( redis.client, 'get', MagicMock(return_value=data)) response = reserves.get(1, 1) assert response.status == 200 assert response.message == reserves_data @patch('ows_accounting.models.reserves.snowflake') def test_get_from_snowflake( mock_snowflake, reserves_data, monkeypatch, reserves_snowlake_data): """Test getting revenue data.""" monkeypatch.setattr( redis.client, 'get', MagicMock(return_value=False)) monkeypatch.setattr( redis.client, 'set', MagicMock()) sql = physical_reserves.SQL_GET_PHYSICAL_RESERVES.format( vendor_id=1, period_id=1) mock_session = MagicMock() mock_context = MagicMock() mock_result = MagicMock() mock_result.fetchall.return_value = reserves_snowlake_data mock_session.execute.return_value = mock_result mock_snowflake.db_session.return_value = mock_context mock_context.__enter__.return_value = mock_session response = reserves.get(1, 1) mock_session.execute.assert_called_once_with( sql, {'vendor_id': 1, 'period_id': 1}) assert response.status == 200 assert response.message == reserves_data