Files
AstrBot/tests/test_kook/test_kook_event.py
Weilong Liao 0d8e8682db refactor(core): migrate backend backbone from Quart to FastAPI and introduce more OpenAPI (#8688)
* refactor: migrate to fastapi

* structure refactor

* fix: pyright fix

* refactor: improve error handling and public messages in plugin services

* feat(api): refactor API client integration and enhance request handling

- Updated API client configuration to use a dedicated HTTP client.
- Introduced utility functions for generating options, queries, and form data for API requests.
- Refactored multiple API methods to utilize the new utility functions for improved consistency and readability.
- Renamed types for clarity and updated import statements accordingly.

feat(docs): add script to update OpenAPI JSON from YAML spec

- Created a Python script to convert OpenAPI YAML specification to JSON format.
- The script supports customizable input and output paths.
- Ensured the script handles directory creation for output paths and validates the YAML structure.

* fix

* feat(auth): implement rate limiting for v1 login endpoint and enhance request handling

* Refactor dashboard API routers to use legacy_router for backward compatibility

- Changed all instances of dashboard_router to legacy_router across multiple API modules including platform, plugins, providers, sessions, skills, stats, subagents, t2i, tools, updates, and asgi_runtime.
- Updated route definitions to ensure existing endpoints remain functional under the new router structure.
- Introduced support for Quart request context in asgi_runtime to enhance compatibility with existing Quart-based plugins.
- Added a test case to validate the functionality of the new Quart request context handling in plugin extensions.

* chore: remove cli test

* fix: update dashboard tests for fastapi migration

* chore: satisfy ruff checks

* fix: update openapi api key scopes

* fix: sync config scope chip selection

* fix: restore quart dependency

* docs: clarify quart plugin api compatibility

* docs: update openapi scope documentation

* fix: use singular skill openapi scope

* fix: hide update service exception details

* fix: address fastapi review comments

* fix: address dashboard review findings

* docs: revert unrelated package deployment changes

* docs: update agent api generation guidance

* feat: add plugin page web api helpers

* docs: add plugin page bridge demo

* fix: type plugin upload files

* fix: stabilize plugin page uploads

* fix: type plugin web request proxy

* docs: remove plugin page docs example

* fix: authenticate plugin page SSE bridge
2026-06-14 15:03:26 +08:00

175 lines
4.3 KiB
Python

import json
import pytest
from astrbot.api.platform import PlatformMetadata, Unknown
from astrbot.core.message.components import (
At,
AtAll,
BaseMessageComponent,
Image,
Json,
Plain,
Reply,
Video,
)
from astrbot.core.platform.sources.kook.kook_event import KookEvent
from astrbot.core.platform.sources.kook.kook_types import KookMessageType, OrderMessage
from tests.test_kook.shared import (
mock_astrbot_message,
mock_file_message,
mock_kook_client,
mock_record_message,
)
@pytest.mark.asyncio
@pytest.mark.parametrize(
"input_message,upload_asset_return, expected_output, expected_error",
[
(
Image("test image"),
"test image",
OrderMessage(
index=1,
text="test image",
type=KookMessageType.IMAGE,
),
None,
),
(
Video("test video"),
"test video",
OrderMessage(
index=1,
text="test video",
type=KookMessageType.VIDEO,
),
None,
),
(
mock_file_message("test file"),
"test file",
OrderMessage(
index=1,
text="test file",
type=KookMessageType.FILE,
),
None,
),
(
mock_record_message("./tests/file.wav"),
"./tests/file.wav",
OrderMessage(
index=1,
text='[{"type": "card", "modules": [{"type": "audio", "src": "./tests/file.wav", "title": "./tests/file.wav"}]}]',
type=KookMessageType.CARD,
),
None,
),
(
Plain("test plain"),
"test plain",
OrderMessage(
index=1,
text="test plain",
type=KookMessageType.KMARKDOWN,
),
None,
),
(
At(qq="test at"),
"test at",
OrderMessage(
index=1,
text="(met)test at(met)",
type=KookMessageType.KMARKDOWN,
),
None,
),
(
AtAll(qq="all"),
"test atAll",
OrderMessage(
index=1,
text="(met)all(met)",
type=KookMessageType.KMARKDOWN,
),
None,
),
(
Reply(id="test reply"),
"test reply",
OrderMessage(
index=1,
text="",
type=KookMessageType.KMARKDOWN,
reply_id="test reply",
),
None,
),
(
Json(data={"test": "json"}),
"test json",
OrderMessage(
index=1,
text='[{"test": "json"}]',
type=KookMessageType.CARD,
),
None,
),
(
Unknown(text="test unknown"),
"test unknown",
None,
NotImplementedError,
),
],
)
async def test_kook_event_warp_message(
input_message: BaseMessageComponent,
upload_asset_return: str,
expected_output: OrderMessage,
expected_error: type[BaseException] | None,
):
client = mock_kook_client(
upload_asset_return,
"",
)
event = KookEvent(
"",
mock_astrbot_message(),
PlatformMetadata(
name="test",
id="test",
description="test",
),
"",
client,
)
if expected_error:
with pytest.raises(expected_error):
await event._wrap_message(1, input_message)
return
result = await event._wrap_message(1, input_message)
expected_output_text: str | list | dict = expected_output.text
is_json_text = False
try:
expected_output_text = json.loads(expected_output_text)
is_json_text = True
except (TypeError, json.JSONDecodeError):
pass
if is_json_text:
assert json.loads(result.text) == expected_output_text
else:
assert result.text == expected_output_text
assert result.index == expected_output.index
assert result.type == expected_output.type
assert result.reply_id == expected_output.reply_id