"""Tests for ows-account Model.""" from unittest.mock import patch from owsrequest import request as requests import sentry_sdk from product.constants import service_name from product.models import ows_account def test_check_subaccount_ownership_success( ows_request_mocker, test_vendor, test_subaccount ): """Test HEAD request for subaccount ownership success.""" ows_request_mocker.add( { "method": "head", "service": service_name.OWS_ACCOUNT, "path": "/{}/subaccount/{}".format(test_vendor, test_subaccount), "status": 200, } ) ows_request_mocker.apply() result = ows_account.check_subaccount_ownership(test_vendor, test_subaccount) assert result.status == 200 def test_check_subaccount_ownership_fails( ows_request_mocker, test_vendor, test_subaccount ): """Test HEAD request for subaccount ownership fails.""" ows_request_mocker.add( { "method": "head", "service": service_name.OWS_ACCOUNT, "path": "/{}/subaccount/{}".format(test_vendor, test_subaccount), "status": 403, } ) ows_request_mocker.apply() result = ows_account.check_subaccount_ownership(test_vendor, test_subaccount) assert result.status == 403 @patch("product.models.ows_account.g", spec=["log"]) def test_check_subaccount_ownership_exception( mock_g, mocker, test_vendor, test_subaccount ): """Test HEAD request for subaccount ownership when an exception occurs.""" mocker.patch.object(requests, "head", side_effect=Exception("error")) mocker.patch.object(sentry_sdk, "capture_exception") result = ows_account.check_subaccount_ownership(test_vendor, test_subaccount) assert result.status == 500 def test_get_enabled_vendor_features_control_success(ows_request_mocker, test_vendor): """Test GET request for vendor feature control success.""" expected_response = {"items": [{"feature_id": 1, "feature_name": "Test feature"}]} ows_request_mocker.add( { "method": "get", "service": service_name.OWS_ACCOUNT, "path": "/vendor/{}/features".format(test_vendor), "status": 200, "json": expected_response, } ) ows_request_mocker.apply() result = ows_account.get_enabled_vendor_features_control(test_vendor) assert result.status == 200 assert result.message == expected_response @patch("product.models.ows_account.g", spec=["log"]) def test_get_enabled_vendor_features_control_exception(mock_g, mocker, test_vendor): """Test GET request for vendor feature control when an exception occurs.""" mocker.patch.object(requests, "get", side_effect=Exception("error")) mocker.patch.object(sentry_sdk, "capture_exception") result = ows_account.get_enabled_vendor_features_control(test_vendor) assert result.status == 500 def test_get_subaccount_info_success(ows_request_mocker, test_subaccount): """Test GET request for subaccount details control success.""" expected_response = { "subaccount_id": 1, "vendor_id": 123, "subaccount_name": "Test subaccount", } ows_request_mocker.add( { "method": "get", "service": service_name.OWS_ACCOUNT, "path": "/subaccount/{}".format(test_subaccount), "status": 200, "json": expected_response, } ) ows_request_mocker.apply() result = ows_account.get_subaccount_info(test_subaccount) assert result.status == 200 assert result.message == expected_response @patch("product.models.ows_account.g", spec=["log"]) def test_get_subaccount_info_exception(mock_g, mocker, test_subaccount): """Test GET request for subaccount details when an exception occurs.""" mocker.patch.object(requests, "get", side_effect=Exception("error")) mocker.patch.object(sentry_sdk, "capture_exception") result = ows_account.get_subaccount_info(test_subaccount) assert result.status == 500 def test_get_vendor_company_brand(ows_request_mocker, test_vendor): """Test get vendor service tier.""" ows_request_mocker.add( { "method": "get", "service": service_name.OWS_ACCOUNT, "path": "/vendor/brand/{}".format(test_vendor), "status": 200, "json": "theorchard", } ) ows_request_mocker.apply() result = ows_account.get_vendor_company_brand(test_vendor) assert result.status == 200 assert result.message == '"theorchard"' def test_get_vendor_company_brand_error(mocker, ows_request_mocker, test_vendor): """Test get vendor service tier.""" ows_request_mocker.add( { "method": "get", "service": service_name.OWS_ACCOUNT, "path": "/vendor/brand/{}".format(test_vendor), "status": 500, "json": {"code": "error"}, } ) ows_request_mocker.apply() mocker.patch.object(requests, "get", side_effect=Exception("error")) mocker.patch.object(sentry_sdk, "capture_exception") result = ows_account.get_vendor_company_brand(test_vendor) assert result.status == 500