fix(api): document message responses as serialized contracts

This commit is contained in:
chariri 2026-06-26 03:30:33 +09:00
parent 78cb65fa1f
commit 4b2a50acdc
No known key found for this signature in database
GPG Key ID: 23A554A36F7FF2FD

View File

@ -1,4 +1,4 @@
from inspect import unwrap as inspect_unwrap
from inspect import unwrap
from io import BytesIO
from typing import Any
from unittest.mock import MagicMock, patch
@ -35,24 +35,16 @@ from models.model import AppMode
from services.errors.conversation import ConversationNotExistsError
from services.errors.llm import InvokeRateLimitError
unwrap: Any = inspect_unwrap
@pytest.fixture
def account() -> Account:
acc = Account(name="User", email="user@example.com")
def account():
acc = MagicMock(spec=Account)
acc.id = "u1"
return acc
def _file_data() -> Any:
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
return file_data
@pytest.fixture
def trial_app_chat() -> MagicMock:
def trial_app_chat():
app = MagicMock()
app.id = "a-chat"
app.mode = AppMode.CHAT
@ -60,7 +52,7 @@ def trial_app_chat() -> MagicMock:
@pytest.fixture
def trial_app_completion() -> MagicMock:
def trial_app_completion():
app = MagicMock()
app.id = "a-comp"
app.mode = AppMode.COMPLETION
@ -68,7 +60,7 @@ def trial_app_completion() -> MagicMock:
@pytest.fixture
def trial_app_workflow() -> MagicMock:
def trial_app_workflow():
app = MagicMock()
app.id = "a-workflow"
app.mode = AppMode.WORKFLOW
@ -76,7 +68,7 @@ def trial_app_workflow() -> MagicMock:
@pytest.fixture
def valid_parameters() -> dict[str, object]:
def valid_parameters():
return {
"user_input_form": [],
"system_parameters": {},
@ -92,13 +84,54 @@ def valid_parameters() -> dict[str, object]:
}
def test_trial_workflow_uses_trial_scoped_simple_account_model() -> None:
assert module.simple_account_model.name == "TrialSimpleAccount"
assert hasattr(module.simple_account_model, "items")
def test_trial_workflow_registers_normalized_simple_account_response_model():
assert "SimpleAccountResponse" in module.console_ns.models
def _response_model_name(entry: object) -> str:
assert isinstance(entry, tuple)
assert len(entry) >= 2
model = entry[1]
name = getattr(model, "name", None)
assert isinstance(name, str)
return name
def test_trial_endpoints_keep_response_and_query_docs():
untyped_generated_response_views = [
module.TrialAppWorkflowRunApi.post,
module.TrialChatApi.post,
module.TrialCompletionApi.post,
]
for view in untyped_generated_response_views:
apidoc = getattr(view, "__apidoc__", {})
assert apidoc.get("responses", {})["200"] == ("Success", None, {})
cases = [
(module.TrialMessageSuggestedQuestionApi.get, module.SuggestedQuestionsResponse.__name__),
(module.TrialChatAudioApi.post, module.AudioTranscriptResponse.__name__),
(module.TrialChatTextApi.post, module.AudioBinaryResponse.__name__),
(module.TrialSitApi.get, module.SiteResponse.__name__),
(module.TrialAppParameterApi.get, module.ParametersResponse.__name__),
(module.AppApi.get, module.AppDetailWithSite.__name__),
(module.AppWorkflowApi.get, module.WorkflowResponse.__name__),
(module.DatasetListApi.get, module.TrialDatasetListResponse.__name__),
]
for view, model_name in cases:
apidoc = getattr(view, "__apidoc__", {})
responses = apidoc.get("responses", {})
assert _response_model_name(responses["200"]) == model_name
dataset_params = module.DatasetListApi.get.__apidoc__["params"]
assert dataset_params["ids"]["in"] == "query"
assert dataset_params["ids"]["type"] == "array"
assert dataset_params["page"]["default"] == 1
assert dataset_params["limit"]["default"] == 20
class TestTrialAppWorkflowRunApi:
def test_not_workflow_app(self, app: Flask, account: Account) -> None:
def test_not_workflow_app(self, app: Flask, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -106,7 +139,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(NotWorkflowAppError):
method(api, account, MagicMock(mode=AppMode.CHAT))
def test_success(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_success(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -119,7 +152,7 @@ class TestTrialAppWorkflowRunApi:
assert result is not None
def test_workflow_provider_not_init(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_provider_not_init(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -134,7 +167,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(ProviderNotInitializeError):
method(api, account, trial_app_workflow)
def test_workflow_quota_exceeded(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_quota_exceeded(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -149,7 +182,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(ProviderQuotaExceededError):
method(api, account, trial_app_workflow)
def test_workflow_model_not_support(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_model_not_support(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -164,7 +197,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(ProviderModelCurrentlyNotSupportError):
method(api, account, trial_app_workflow)
def test_workflow_invoke_error(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_invoke_error(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -179,7 +212,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(CompletionRequestError):
method(api, account, trial_app_workflow)
def test_workflow_rate_limit_error(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_rate_limit_error(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -194,7 +227,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(InvokeRateLimitHttpError):
method(api, account, trial_app_workflow)
def test_workflow_value_error(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_value_error(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -209,7 +242,7 @@ class TestTrialAppWorkflowRunApi:
with pytest.raises(ValueError):
method(api, account, trial_app_workflow)
def test_workflow_generic_exception(self, app: Flask, trial_app_workflow: MagicMock, account: Account) -> None:
def test_workflow_generic_exception(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowRunApi()
method = unwrap(api.post)
@ -226,7 +259,7 @@ class TestTrialAppWorkflowRunApi:
class TestTrialChatApi:
def test_not_chat_app(self, app: Flask, account: Account) -> None:
def test_not_chat_app(self, app: Flask, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -234,7 +267,7 @@ class TestTrialChatApi:
with pytest.raises(NotChatAppError):
method(api, account, MagicMock(mode="completion"))
def test_success(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_success(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -247,7 +280,7 @@ class TestTrialChatApi:
assert result is not None
def test_chat_conversation_not_exists(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_conversation_not_exists(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -262,7 +295,7 @@ class TestTrialChatApi:
with pytest.raises(NotFound):
method(api, account, trial_app_chat)
def test_chat_conversation_completed(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_conversation_completed(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -277,7 +310,7 @@ class TestTrialChatApi:
with pytest.raises(ConversationCompletedError):
method(api, account, trial_app_chat)
def test_chat_app_config_broken(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_app_config_broken(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -292,7 +325,7 @@ class TestTrialChatApi:
with pytest.raises(AppUnavailableError):
method(api, account, trial_app_chat)
def test_chat_provider_not_init(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_provider_not_init(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -307,7 +340,7 @@ class TestTrialChatApi:
with pytest.raises(ProviderNotInitializeError):
method(api, account, trial_app_chat)
def test_chat_quota_exceeded(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_quota_exceeded(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -322,7 +355,7 @@ class TestTrialChatApi:
with pytest.raises(ProviderQuotaExceededError):
method(api, account, trial_app_chat)
def test_chat_model_not_support(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_model_not_support(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -337,7 +370,7 @@ class TestTrialChatApi:
with pytest.raises(ProviderModelCurrentlyNotSupportError):
method(api, account, trial_app_chat)
def test_chat_invoke_error(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_invoke_error(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -352,7 +385,7 @@ class TestTrialChatApi:
with pytest.raises(CompletionRequestError):
method(api, account, trial_app_chat)
def test_chat_rate_limit_error(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_rate_limit_error(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -367,7 +400,7 @@ class TestTrialChatApi:
with pytest.raises(InvokeRateLimitHttpError):
method(api, account, trial_app_chat)
def test_chat_value_error(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_value_error(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -382,7 +415,7 @@ class TestTrialChatApi:
with pytest.raises(ValueError):
method(api, account, trial_app_chat)
def test_chat_generic_exception(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_chat_generic_exception(self, app: Flask, trial_app_chat, account):
api = module.TrialChatApi()
method = unwrap(api.post)
@ -399,7 +432,7 @@ class TestTrialChatApi:
class TestTrialCompletionApi:
def test_not_completion_app(self, app: Flask, account: Account) -> None:
def test_not_completion_app(self, app: Flask, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -407,7 +440,7 @@ class TestTrialCompletionApi:
with pytest.raises(NotCompletionAppError):
method(api, account, MagicMock(mode=AppMode.CHAT))
def test_success(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_success(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -420,7 +453,7 @@ class TestTrialCompletionApi:
assert result is not None
def test_completion_app_config_broken(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_app_config_broken(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -435,7 +468,7 @@ class TestTrialCompletionApi:
with pytest.raises(AppUnavailableError):
method(api, account, trial_app_completion)
def test_completion_provider_not_init(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_provider_not_init(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -450,7 +483,7 @@ class TestTrialCompletionApi:
with pytest.raises(ProviderNotInitializeError):
method(api, account, trial_app_completion)
def test_completion_quota_exceeded(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_quota_exceeded(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -465,7 +498,7 @@ class TestTrialCompletionApi:
with pytest.raises(ProviderQuotaExceededError):
method(api, account, trial_app_completion)
def test_completion_model_not_support(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_model_not_support(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -480,7 +513,7 @@ class TestTrialCompletionApi:
with pytest.raises(ProviderModelCurrentlyNotSupportError):
method(api, account, trial_app_completion)
def test_completion_invoke_error(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_invoke_error(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -495,7 +528,7 @@ class TestTrialCompletionApi:
with pytest.raises(CompletionRequestError):
method(api, account, trial_app_completion)
def test_completion_rate_limit_error(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_rate_limit_error(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -510,7 +543,7 @@ class TestTrialCompletionApi:
with pytest.raises(InternalServerError):
method(api, account, trial_app_completion)
def test_completion_value_error(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_value_error(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -525,7 +558,7 @@ class TestTrialCompletionApi:
with pytest.raises(ValueError):
method(api, account, trial_app_completion)
def test_completion_generic_exception(self, app: Flask, trial_app_completion: MagicMock, account: Account) -> None:
def test_completion_generic_exception(self, app: Flask, trial_app_completion, account):
api = module.TrialCompletionApi()
method = unwrap(api.post)
@ -542,7 +575,7 @@ class TestTrialCompletionApi:
class TestTrialMessageSuggestedQuestionApi:
def test_not_chat_app(self, app: Flask, account: Account) -> None:
def test_not_chat_app(self, app: Flask, account):
api = module.TrialMessageSuggestedQuestionApi()
method = unwrap(api.get)
@ -550,7 +583,7 @@ class TestTrialMessageSuggestedQuestionApi:
with pytest.raises(NotChatAppError):
method(api, account, MagicMock(mode="completion"), str(uuid4()))
def test_success(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_success(self, app: Flask, trial_app_chat, account):
api = module.TrialMessageSuggestedQuestionApi()
method = unwrap(api.get)
@ -566,7 +599,7 @@ class TestTrialMessageSuggestedQuestionApi:
assert result == {"data": ["q1", "q2"]}
def test_conversation_not_exists(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_conversation_not_exists(self, app: Flask, trial_app_chat, account):
api = module.TrialMessageSuggestedQuestionApi()
method = unwrap(api.get)
@ -583,14 +616,14 @@ class TestTrialMessageSuggestedQuestionApi:
class TestTrialAppParameterApi:
def test_app_unavailable(self) -> None:
def test_app_unavailable(self):
api = module.TrialAppParameterApi()
method = unwrap(api.get)
with pytest.raises(AppUnavailableError):
method(api, None)
def test_success_non_workflow(self, valid_parameters: dict[str, object]) -> None:
def test_success_non_workflow(self, valid_parameters):
api = module.TrialAppParameterApi()
method = unwrap(api.get)
@ -617,11 +650,12 @@ class TestTrialAppParameterApi:
class TestTrialChatAudioApi:
def test_success(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_success(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -634,11 +668,12 @@ class TestTrialChatAudioApi:
assert result == {"text": "hello"}
def test_app_config_broken(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_app_config_broken(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -653,11 +688,12 @@ class TestTrialChatAudioApi:
with pytest.raises(module.AppUnavailableError):
method(api, account, trial_app_chat)
def test_no_audio_uploaded(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_no_audio_uploaded(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -672,11 +708,12 @@ class TestTrialChatAudioApi:
with pytest.raises(module.NoAudioUploadedError):
method(api, account, trial_app_chat)
def test_audio_too_large(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_audio_too_large(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -691,11 +728,12 @@ class TestTrialChatAudioApi:
with pytest.raises(module.AudioTooLargeError):
method(api, account, trial_app_chat)
def test_unsupported_audio_type(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_unsupported_audio_type(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -710,11 +748,12 @@ class TestTrialChatAudioApi:
with pytest.raises(module.UnsupportedAudioTypeError):
method(api, account, trial_app_chat)
def test_provider_not_support_tts(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_provider_not_support_tts(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -729,11 +768,12 @@ class TestTrialChatAudioApi:
with pytest.raises(module.ProviderNotSupportSpeechToTextError):
method(api, account, trial_app_chat)
def test_provider_not_init(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_provider_not_init(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -744,11 +784,12 @@ class TestTrialChatAudioApi:
with pytest.raises(ProviderNotInitializeError):
method(api, account, trial_app_chat)
def test_quota_exceeded(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_quota_exceeded(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -761,7 +802,7 @@ class TestTrialChatAudioApi:
class TestTrialChatTextApi:
def test_success(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_success(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -774,7 +815,7 @@ class TestTrialChatTextApi:
assert result == {"audio": "base64_data"}
def test_app_config_broken(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_app_config_broken(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -789,7 +830,7 @@ class TestTrialChatTextApi:
with pytest.raises(module.AppUnavailableError):
method(api, account, trial_app_chat)
def test_provider_not_support(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_provider_not_support(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -804,7 +845,7 @@ class TestTrialChatTextApi:
with pytest.raises(module.ProviderNotSupportSpeechToTextError):
method(api, account, trial_app_chat)
def test_audio_too_large(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_audio_too_large(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -819,7 +860,7 @@ class TestTrialChatTextApi:
with pytest.raises(module.AudioTooLargeError):
method(api, account, trial_app_chat)
def test_no_audio_uploaded(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_no_audio_uploaded(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -834,7 +875,7 @@ class TestTrialChatTextApi:
with pytest.raises(module.NoAudioUploadedError):
method(api, account, trial_app_chat)
def test_provider_not_init(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_provider_not_init(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -845,7 +886,7 @@ class TestTrialChatTextApi:
with pytest.raises(ProviderNotInitializeError):
method(api, account, trial_app_chat)
def test_quota_exceeded(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_quota_exceeded(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -856,7 +897,7 @@ class TestTrialChatTextApi:
with pytest.raises(ProviderQuotaExceededError):
method(api, account, trial_app_chat)
def test_model_not_support(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_model_not_support(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -867,7 +908,7 @@ class TestTrialChatTextApi:
with pytest.raises(ProviderModelCurrentlyNotSupportError):
method(api, account, trial_app_chat)
def test_invoke_error(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_invoke_error(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -880,7 +921,7 @@ class TestTrialChatTextApi:
class TestTrialAppWorkflowTaskStopApi:
def test_not_workflow_app(self, app: Flask, trial_app_chat: MagicMock) -> None:
def test_not_workflow_app(self, app: Flask, trial_app_chat):
api = module.TrialAppWorkflowTaskStopApi()
method = unwrap(api.post)
@ -888,7 +929,7 @@ class TestTrialAppWorkflowTaskStopApi:
with pytest.raises(NotWorkflowAppError):
method(api, trial_app_chat, str(uuid4()))
def test_success(self, app: Flask, trial_app_workflow: MagicMock) -> None:
def test_success(self, app: Flask, trial_app_workflow, account):
api = module.TrialAppWorkflowTaskStopApi()
method = unwrap(api.post)
@ -906,7 +947,7 @@ class TestTrialAppWorkflowTaskStopApi:
class TestTrialSitApi:
def test_no_site(self, app: Flask) -> None:
def test_no_site(self, app: Flask):
api = module.TrialSitApi()
method = unwrap(api.get)
app_model = MagicMock()
@ -917,7 +958,7 @@ class TestTrialSitApi:
with pytest.raises(Forbidden):
method(api, app_model)
def test_archived_tenant(self, app: Flask) -> None:
def test_archived_tenant(self, app: Flask):
api = module.TrialSitApi()
method = unwrap(api.get)
@ -932,7 +973,7 @@ class TestTrialSitApi:
with pytest.raises(Forbidden):
method(api, app_model)
def test_success(self, app: Flask) -> None:
def test_success(self, app: Flask):
api = module.TrialSitApi()
method = unwrap(api.get)
@ -957,11 +998,12 @@ class TestTrialSitApi:
class TestTrialChatAudioApiExceptionHandlers:
def test_provider_not_init(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_provider_not_init(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -976,11 +1018,12 @@ class TestTrialChatAudioApiExceptionHandlers:
with pytest.raises(ProviderNotInitializeError):
method(api, account, trial_app_chat)
def test_quota_exceeded(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_quota_exceeded(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -995,11 +1038,12 @@ class TestTrialChatAudioApiExceptionHandlers:
with pytest.raises(ProviderQuotaExceededError):
method(api, account, trial_app_chat)
def test_invoke_error(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_invoke_error(self, app: Flask, trial_app_chat, account):
api = module.TrialChatAudioApi()
method = unwrap(api.post)
file_data = _file_data()
file_data: Any = BytesIO(b"fake audio data")
file_data.filename = "test.wav"
with (
app.test_request_context(
@ -1016,7 +1060,7 @@ class TestTrialChatAudioApiExceptionHandlers:
class TestTrialChatTextApiExceptionHandlers:
def test_app_config_broken(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_app_config_broken(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)
@ -1031,7 +1075,7 @@ class TestTrialChatTextApiExceptionHandlers:
with pytest.raises(module.AppUnavailableError):
method(api, account, trial_app_chat)
def test_unsupported_audio_type(self, app: Flask, trial_app_chat: MagicMock, account: Account) -> None:
def test_unsupported_audio_type(self, app: Flask, trial_app_chat, account):
api = module.TrialChatTextApi()
method = unwrap(api.post)