"""Advances model unit tests.""" from datetime import date from decimal import Decimal from unittest.mock import patch from pytest import fixture from api.models import advances @fixture def ows_contracts_data(): """Fixture of an ows-contracts advances response.""" return [ [123, 234, '2016-01-01', 1.0], # test cases for multiple records for a day [124, 111, '2016-01-01', 1.0], [222, 333, '2016-01-02', 2.0], [234, 666, '2016-01-05', 0.5], [223, 220, None, None], [224, 250, '2016-01-09', None]] @fixture def advances_model_data(): """Transformed data of ows_contracts_data fixture from the model.""" advances = { date(2016, 1, 1): Decimal(345), date(2016, 1, 2): Decimal(776), date(2016, 1, 5): Decimal(333), date(2016, 1, 9): Decimal(125)} return advances, True @patch('api.models.advances.release') @patch('api.models.advances.ows_contracts') def test_fetch_advances( contracts, release, ows_contracts_data, advances_model_data): """Test data request and conversion into proper structure.""" contracts.get_advances.return_value = ows_contracts_data release.get_release_date_and_currency_id.return_value = \ (date(2016, 1, 2), 2) release.get_exchange_rate.return_value = 0.5 results = advances.fetch_advances(1234, 123456789) assert results == advances_model_data