"""Test for ows_account interface.""" from unittest.mock import MagicMock import flexmock from owsrequest import request import requests from feature_fm.constants.error import ERROR_CODE_OWS_ACCOUNT_REQUEST from feature_fm.constants.ows_services import CONTENT_TYPE from feature_fm.constants.ows_services import OWS_ACCOUNT from feature_fm.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' }