"""Tests for ows-assets model.""" from contextlib import nullcontext as does_not_raise from typing import ContextManager from unittest.mock import MagicMock, call import pytest from flask.ctx import AppContext from owsrequest.utils import mock_request from owsresponse import status from requests import HTTPError from vectororder.models import assets_model @pytest.mark.parametrize( ( "test_description", "raise_for_status_exception", "expected_result", "expected_exception", ), [ ( "All product assets are 24 bit", None, True, does_not_raise(), ), ( "Not all product assets are 24 bit", HTTPError(response=MagicMock(status_code=status.BAD_REQUEST)), False, does_not_raise(), ), ( "Some error occurred", HTTPError(response=MagicMock(status_code=status.UNAUTHORIZED)), None, pytest.raises( HTTPError, check=lambda e: e.response.status_code == status.UNAUTHORIZED ), ), ( "Not found", HTTPError(response=MagicMock(status_code=status.NOT_FOUND)), None, pytest.raises( HTTPError, check=lambda e: e.response.status_code == status.NOT_FOUND ), ), ], ) def test_is_hd_product( test_description: str, raise_for_status_exception: HTTPError, expected_result: bool | None, expected_exception: ContextManager[None], app_context: AppContext, mock_raise_for_status: MagicMock, ) -> None: """Test is_hd_product.""" mock_raise_for_status.side_effect = raise_for_status_exception mock_request.get( "ows-assets", "/validators/product/123/desired-bit-depth/24", ) with expected_exception: assert assets_model.is_hd_product(123) == expected_result assert mock_raise_for_status.mock_calls == [call()]