"""Tests for Analytics Non-Analytic Cable Model.""" from datetime import date from decimal import Decimal from unittest.mock import Mock from unittest.mock import patch from pytest import fixture from api.models import cable_revenue @fixture def raw_revenue(): """Return raw_revenue data.""" return [ { 'transaction_type_id': 42, 'amount': Decimal('277.32'), 'data_point': date(2018, 1, 1) }, { 'transaction_type_id': 43, 'amount': Decimal('223.57'), 'data_point': date(2018, 1, 2) }, { 'transaction_type_id': 42, 'amount': Decimal('277.32'), 'data_point': date(2018, 1, 2) }] @fixture def revenue_buckets(raw_revenue): """Return revenue_buckets.""" return { 'raw': raw_revenue, 'bucket': { 'transactional': { date(2018, 1, 1): Decimal('277.32'), date(2018, 1, 2): Decimal('223.57') + Decimal('277.32'), }}} def test_fetch_accounting_revenue(monkeypatch): """Test fetch_accounting_revenue.""" expected = [{'foo': 'bar'}] upc = '123' cursor_mock = Mock(fetchall=Mock(return_value=expected)) mock_context = Mock( __exit__=Mock(), __enter__=Mock(return_value=(cursor_mock, Mock()))) monkeypatch.setattr(cable_revenue.aurora, 'context', Mock( return_value=mock_context)) results = cable_revenue.fetch_accounting_revenue(upc) assert results == expected assert cursor_mock.execute.called_once assert cursor_mock.fetchall.called_once execute_args = cursor_mock.execute.call_args_list[0][0][1] assert execute_args.get('upc') == upc @patch('api.models.cable_revenue.fetch_accounting_revenue') def test_fetch_all_time_buckets( fetch_accounting_revenue, raw_revenue, revenue_buckets): """Test fetch_all_time_buckets with some cable data.""" fetch_accounting_revenue.return_value = raw_revenue results = cable_revenue.fetch_all_time_buckets('123') assert results == revenue_buckets @patch('api.models.cable_revenue.fetch_accounting_revenue') def test_fetch_all_time_buckets_no_data(fetch_accounting_revenue): """Test fetch_all_time_buckets with no cable data.""" raw_data = [] expected = {'bucket': {'transactional': {}}, 'raw': raw_data} fetch_accounting_revenue.return_value = raw_data results = cable_revenue.fetch_all_time_buckets('123') assert results == expected