"""Test for the ows_assets model.""" from flexmock import flexmock from owsrequest import request from owsrequest import test_utils from owsrequest.constants import headers import pytest import requests from salessheets.constants import ows_services from salessheets.models import ows_account def test_get_subaccount_by_id_error(): """Expect get subaccount to return correct response in case of failure.""" subaccount_id = 123456 test_content = None failure_response = flexmock(requests.models.Response()) failure_response.status_code = 404 (flexmock(failure_response).should_receive('content') .and_return(test_content)) flexmock(request).should_receive('get').and_return(failure_response) result = ows_account.get_subaccount_by_id(subaccount_id) assert result.status == 404 assert result.errors['message'] == ( ows_services.MESSAGE_COULD_NOT_GET_SUBACCOUNT.format(subaccount_id)) def test_get_subaccount_by_id_success(): """Expect get_subaccount_by_id to return correct successful response.""" success_test_content = {'subaccount_data': 'test_data'} subaccount_id = 123456 success_response = flexmock(requests.models.Response()) success_response.status_code = 200 (flexmock(success_response).should_receive('json') .and_return(success_test_content)) flexmock(request).should_receive('get').and_return(success_response) result = ows_account.get_subaccount_by_id(subaccount_id) assert result assert result.message == success_test_content @pytest.mark.parametrize( 'account_type,account_id,expected', [ ('vendor', '1', True), ('vendor', '2', False), (None, None, True), ]) def test_check_vendor(account_type, account_id, expected): """Check that check rights passed on internal requests.""" result = ows_account.check_vendor_rights(1, account_type, account_id) assert bool(result) is expected @pytest.mark.parametrize( 'status,body,expected', [ (200, {'vendor_id': 1}, True), (200, {'vendor_id': 2}, False), (403, {}, False), ]) def test_check_vendor_subaccount_success(mocker, status, body, expected): """Check vendor rights positive scenario.""" account_id = '22' accounts_spec = { 'service': ows_services.OWS_ACCOUNT_SERVICE_NAME, 'path': '/subaccount/{}'.format(account_id), 'status': status, 'json': body } mocker.patch.object( request, 'get', test_utils.mock_ows_requests([accounts_spec])) result = ows_account.check_vendor_rights( 1, headers.GRASS_ACCOUNT_TYPE_SUBACCOUNT, account_id) assert bool(result) is expected