"""Unit tests for the handler utility functions.""" from unittest.mock import Mock from oto import response from owsrequest.constants import headers as header_constants from product_digital.constants import account from product_digital.constants import header from product_digital.models import ows_product from product_digital.utils import handler_util from product_digital.utils.handler_util import get_orchard_user_id def test_check_product_ownership(mocker): """Test that the function is a straight pass-through to the model.""" stupid_response = response.Response(status=123, message='duh...what?') mocker.patch.object( ows_product, 'check_ownership', autospec=True, return_value=stupid_response) account_type = 'something' account_id = 3939393 product_id = 23429343 handler_response = handler_util.check_product_ownership( account_type, account_id, product_id) ows_product.check_ownership.assert_called_with( account_type, account_id, product_id) assert handler_response == stupid_response def test_get_account_info_from_headers(account_id): """Get account details from header.""" request = Mock() request.get_json.return_value = {} request.headers = { header.GRASS_ACCOUNT_ID: account_id, header.GRASS_ACCOUNT_TYPE: header.GRASS_ACCOUNT_TYPE_SUBACCOUNT, header.ORCHARD_USER_ID: '67890' } expected = (account_id, header.GRASS_ACCOUNT_TYPE_SUBACCOUNT) account_details = handler_util.get_account_details(request) assert account_details == expected def test_get_vendor_account_from_payload(account_id): """Get vendor details from payload.""" request = Mock() request.get_json.return_value = { account.ACCOUNT_ID_KEY: account_id, } request.headers = { header.GRASS_ACCOUNT_ID: '99999', header.GRASS_ACCOUNT_TYPE: header.GRASS_ACCOUNT_TYPE_SUBACCOUNT, header.ORCHARD_USER_ID: 'oa:67890' } expected = (account_id, header.GRASS_ACCOUNT_TYPE_VENDOR) account_details = handler_util.get_account_details(request) assert account_details == expected def test_get_subaccount_account_from_payload(account_id): """Get subaccount details from payload.""" request = Mock() request.get_json.return_value = { account.SUBACCOUNT_ID_KEY: account_id, } request.headers = { header.ORCHARD_USER_ID: 'oa:67890' } expected = (account_id, header.GRASS_ACCOUNT_TYPE_SUBACCOUNT) account_details = handler_util.get_account_details(request) assert account_details == expected def test_get_orchard_user_id_present_in_headers(): """Test orchard_user_id returned from headers if defined.""" orchard_user_id = 'oa:1234' request = Mock() request.headers = { header.ORCHARD_USER_ID: orchard_user_id } assert get_orchard_user_id(request) == orchard_user_id def test_get_orchard_user_id_from_profile_headers(): """Test returning oa:XXX value from profile headers.""" profile_id = 1234 request = Mock() request.headers = { header_constants.ORCHARD_PROFILE_TYPE: header_constants.PROFILE_TYPE_ORCH_ADMIN, header_constants.ORCHARD_PROFILE_ID: profile_id } assert get_orchard_user_id(request) == 'oa:%s' % profile_id