"""Test for ows_account interface.""" from unittest.mock import MagicMock from flexmock import flexmock from owsrequest import request import requests from users.constants import CONTENT_TYPE, ERROR_CODE_OWS_ACCOUNT_REQUEST, OWS_ACCOUNT from users.models import ows_account def test_get_features_success(): """Test getting features and the request is successfull.""" vendor_id = 1234 correlation_id = 'correlation' features = {'items': [{'feature_id': 1, 'feature_name': 'One', 'vendor_id': 1234}]} expected_path = ('/vendor/{0}/features').format(vendor_id) ows_account_response = flexmock(requests.models.Response()) ows_account_response.status_code = 200 (flexmock(ows_account_response).should_receive('json').and_return(features)) ( flexmock(request) .should_receive('get') .with_args( OWS_ACCOUNT, expected_path, headers={'Content-Type': CONTENT_TYPE}, correlation_id=correlation_id, ) .and_return(ows_account_response) ) result = ows_account.get_enabled_features_for_vendor(vendor_id, correlation_id) assert result.status == 200 assert result.message == features def test_get_features_error(): """Test getting features and the request fails.""" vendor_id = 1234 correlation_id = 'correlation' expected_path = ('/vendor/{0}/features').format(vendor_id) ows_account_error = 'ows_account_error' ows_account_response = flexmock(requests.models.Response()) ows_account_response.status_code = 500 (flexmock(ows_account_response).should_receive('text').and_return(ows_account_error)) ( flexmock(request) .should_receive('get') .with_args( OWS_ACCOUNT, expected_path, headers={'Content-Type': CONTENT_TYPE}, correlation_id=correlation_id, ) .and_return(ows_account_response) ) result = ows_account.get_enabled_features_for_vendor(vendor_id, correlation_id) assert result.status == 500 assert result.errors == {'code': ERROR_CODE_OWS_ACCOUNT_REQUEST, 'message': ows_account_error} def test_get_vendor_currency_code(monkeypatch): """Test getting currency code for a vendor.""" vendor_id = 123 vendor_currency_dict = {123: 'USD', 456: 'EUR'} monkeypatch.setattr( ows_account, 'get_vendor_currency_codes', MagicMock(return_value=vendor_currency_dict) ) result = ows_account.get_vendor_currency_code(vendor_id) assert result == 'USD' def test_get_vendor_currency_codes_should_cache(monkeypatch): """Test getting currency code for a vendor.""" ows_account.get_vendor_currency_codes.cache_clear() vendor_currency_codes = { 'items': [ {'vendor_id': 123, 'currency_code': 'USD'}, {'vendor_id': 456, 'currency_code': 'EUR'}, ] } ows_account_response = flexmock(requests.models.Response()) ows_account_response.status_code = 200 (flexmock(ows_account_response).should_receive('json').and_return(vendor_currency_codes)) ( flexmock(request) .should_receive('get') .with_args(OWS_ACCOUNT, '/vendor-currency-codes', headers={'Content-Type': CONTENT_TYPE}) .and_return(ows_account_response) .once() ) result = ows_account.get_vendor_currency_codes() assert result == {123: 'USD', 456: 'EUR'} result = ows_account.get_vendor_currency_codes() assert result == {123: 'USD', 456: 'EUR'}