"""Tests for model that creates calls to ows-account.""" from unittest.mock import MagicMock from owsrequest import request as requests from reporting import api from reporting.constants import account, field, service_name from reporting.models import ows_account def raise_no_json_error(_): """Raise error when attempting to parse json body.""" raise ValueError('No json error!') def test_get_vendor_id_from_grass_headers_type_vendor_success(): """Test get vendor by grass header account type vendor success.""" vendor_response = ows_account.get_vendor_id_from_grass_headers( account.VENDOR, '1234' ) assert vendor_response.message.get('vendor_id') == 1234 def test_get_vendor_id_from_grass_headers_type_subaccount_success( monkeypatch, valid_get_header, context ): """Test get vendor by grass header account type subaccount success.""" with context, api.app.test_request_context(headers=valid_get_header): mock_response = MagicMock(status_code=200) mock_response.json = MagicMock( return_value={ field.DESCRIPTION: None, field.SUBACCOUNT_ID: 27921, 'subaccount_name': 'Pelicana', field.VENDOR_ID: 26022, } ) monkeypatch.setattr( requests, 'get', MagicMock(return_value=mock_response) ) vendor_response = ows_account.get_vendor_id_from_grass_headers( account.SUBACCOUNT, '1234' ) assert vendor_response.message.get('vendor_id') == 26022 def test_get_vendor_id_from_grass_headers_type_subaccount_fail( monkeypatch, valid_get_header, context ): """Test get vendor by grass header account type subaccount fail.""" with context, api.app.test_request_context(headers=valid_get_header): mock_response = MagicMock(status_code=404) mock_response.json = MagicMock( return_value={'code': 'not_found_error', 'message': None} ) monkeypatch.setattr( requests, 'get', MagicMock(return_value=mock_response) ) vendor_response = ows_account.get_vendor_id_from_grass_headers( account.SUBACCOUNT, '1234' ) assert not vendor_response def test_get_vendor_id_from_grass_headers_type_invalid_account_type( monkeypatch, valid_get_header, context ): """Test get vendor by grass header account type subaccount fail.""" with context, api.app.test_request_context(headers=valid_get_header): mock_response = MagicMock(status_code=200) mock_response.json = MagicMock( return_value={ field.DESCRIPTION: None, field.SUBACCOUNT_ID: 27921, 'subaccount_name': 'Pelicana', field.VENDOR_ID: 26022, } ) monkeypatch.setattr( requests, 'get', MagicMock(return_value=mock_response) ) vendor_response = ows_account.get_vendor_id_from_grass_headers( 'banana', '1234' ) assert vendor_response.status == 400 assert vendor_response.errors.get('message') == 'Invalid account type.' def test_get_subaccount_by_id_success(monkeypatch, valid_get_header, context): """Test get subaccount by id success.""" with context, api.app.test_request_context(headers=valid_get_header): mock_response = MagicMock(status_code=200) mock_response.json = MagicMock( return_value={ field.DESCRIPTION: None, field.SUBACCOUNT_ID: 27921, 'subaccount_name': 'Pelicana', field.VENDOR_ID: 26022, } ) monkeypatch.setattr( requests, 'get', MagicMock(return_value=mock_response) ) subaccount_response = ows_account.get_subaccount_by_id(27921) assert requests.get.called assert requests.get.call_args[0][0] == service_name.OWS_ACCOUNT assert requests.get.call_args[0][1] == ('/subaccount/{}').format(27921) assert subaccount_response.status == 200 assert subaccount_response.message.get(field.VENDOR_ID) == 26022 assert subaccount_response.message.get('subaccount_name') == 'Pelicana' def test_get_subaccount_by_id_fail(monkeypatch, valid_get_header, context): """Test get subaccount by id not found.""" with context, api.app.test_request_context(headers=valid_get_header): mock_response = MagicMock(status_code=404) mock_response.json = MagicMock( return_value={'code': 'not_found_error', 'message': None} ) monkeypatch.setattr( requests, 'get', MagicMock(return_value=mock_response) ) subaccount_response = ows_account.get_subaccount_by_id(27921) assert requests.get.called assert requests.get.call_args[0][0] == service_name.OWS_ACCOUNT assert requests.get.call_args[0][1] == ('/subaccount/{}').format(27921) assert subaccount_response.status == 404 assert subaccount_response.errors.get('code') == 'not_found_error'