"""Tests for Revenue model.""" import json import time from unittest.mock import MagicMock import pytest from ows_accounting import features from ows_accounting.connectors import redis from ows_accounting.models import revenue def revenue_data(): return { 'revenue': 1000.55, 'num_transactions': 2345, 'created': time.strftime("%Y%m%d%H%M%S", time.localtime()), } @pytest.fixture(name="revenue_data") def revenue_data_fixture(): return revenue_data() @pytest.fixture def revenue_gross_data(): revenue = revenue_data() revenue['gross_revenue'] = 900.33 return revenue @pytest.mark.parametrize('vendor_gross_net', [True, False]) def test_save(revenue_data, monkeypatch, vendor_gross_net, revenue_gross_data): """Test saving revenue data to cache.""" monkeypatch.setattr( features, 'is_vendor_gross_net_enabled', MagicMock(return_value=vendor_gross_net)) if vendor_gross_net: response = revenue.save( 'vendor', 100, 215, revenue_gross_data['revenue'], revenue_gross_data['num_transactions'], revenue_gross_data['gross_revenue']) assert response.status assert response.message == revenue_gross_data else: response = revenue.save( 'vendor', 100, 215, revenue_data['revenue'], revenue_data['num_transactions']) assert response.status assert response.message == revenue_data @pytest.mark.parametrize('vendor_gross_net', [True, False]) def test_get_key( monkeypatch, revenue_data, vendor_gross_net, revenue_gross_data): """Test key generation for saving revenue data.""" monkeypatch.setattr( redis.client, 'set', MagicMock()) monkeypatch.setattr( features, 'is_vendor_gross_net_enabled', MagicMock(return_value=vendor_gross_net)) if vendor_gross_net: revenue.save( 'vendor', 100, 215, revenue_gross_data['revenue'], revenue_gross_data['num_transactions'], revenue_gross_data['gross_revenue']) redis.client.set.assert_called_with( 'revenue:vendor:100:215', json.dumps(revenue_gross_data)) else: revenue.save( 'vendor', 100, 215, revenue_data['revenue'], revenue_data['num_transactions']) redis.client.set.assert_called_with( 'revenue:vendor:100:215', json.dumps(revenue_data)) @pytest.mark.parametrize('vendor_gross_net', [True, False]) def test_save_failure(monkeypatch, vendor_gross_net): """Test revenue data saving failure.""" monkeypatch.setattr( redis.client, 'set', MagicMock(return_value=False)) monkeypatch.setattr( features, 'is_vendor_gross_net_enabled', MagicMock(return_value=vendor_gross_net)) response = revenue.save('vendor', 100, 215, 1000.55, 2345) assert response.status == 400 @pytest.mark.parametrize('vendor_gross_net', [True, False]) def test_get(revenue_data, monkeypatch, vendor_gross_net, revenue_gross_data): """Test getting revenue data from cache.""" monkeypatch.setattr( features, 'is_vendor_gross_net_enabled', MagicMock(return_value=vendor_gross_net)) if vendor_gross_net: revenue.save( 'vendor', 100, 215, revenue_gross_data['revenue'], revenue_gross_data['num_transactions'], revenue_gross_data['gross_revenue']) response = revenue.get('vendor', 100, 215) assert response.status == 200 assert response.message == revenue_gross_data else: revenue.save( 'vendor', 100, 215, revenue_data['revenue'], revenue_data['num_transactions']) response = revenue.get('vendor', 100, 215) assert response.status == 200 assert response.message == revenue_data def test_get_not_found(): """Test getting revenue data which doesn't exists in the cache.""" response = revenue.get('vendor', 111, 216) assert response.status == 404