Files
agent-radar 1a3a4ccde1
Creator App Tests / PR Spam Gate (push) Skipped
Frontend Tests / PR Spam Gate (push) Skipped
NPM Format (website & console) / PR Spam Gate (push) Skipped
Pre-commit Checks / PR Spam Gate (push) Skipped
QwenPaw Creator Plugin Release / check-version (push) Canceled after 0s
QwenPaw Creator Plugin Release / upload-oss (push) Canceled after 0s
Tests / PR Spam Gate (push) Skipped
CodeQL / CodeQL (python) (push) Canceled after 0s
CodeQL / CodeQL (typescript) (push) Canceled after 0s
Creator App Tests / Creator Backend Tests (push) Canceled after 0s
Creator App Tests / Creator UI Build & Tests (push) Canceled after 0s
E2E Smoke Tests / Playwright UI Smoke (push) Canceled after 0s
Frontend Tests / Detect console changes (push) Canceled after 0s
NPM Format (website & console) / website format check (push) Canceled after 0s
NPM Format (website & console) / console format check (push) Canceled after 0s
Pre-commit Checks / Pre-commit (push) Canceled after 0s
QwenPaw Data Plugin Release / check-version (push) Canceled after 0s
Tests / Detect code changes (push) Canceled after 0s
Frontend Tests / Vitest Unit Tests (push) Canceled after 0s
Frontend Tests / Frontend Summary (push) Canceled after 0s
QwenPaw Data Plugin Release / upload-oss (push) Canceled after 0s
Tests / Maintainer Approval (push) Canceled after 0s
Tests / Unit Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - fallback (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p2 (push) Canceled after 0s
Tests / Coverage Report (push) Canceled after 0s
Tests / Test Summary (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:01:50 +08:00

126 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
"""Integration tests for console routes (no LLM / no external API keys)."""
from __future__ import annotations
import io
import uuid
import pytest
from helpers import default_http_timeout
_CONSOLE_HTTP_TIMEOUT = default_http_timeout(30.0)
@pytest.mark.integration
@pytest.mark.p0
def test_agent_scoped_console_chat_stop_no_running_task(app_server) -> None:
"""Test purpose:
- Verify scoped console chat/stop returns a stable JSON contract when no
stream is attached for the given chat id (no model call).
Test flow:
1. Create a dedicated test agent.
2. POST /console/chat/stop with a random UUID chat_id.
3. Assert 200 and ``stopped`` is a boolean (typically False).
4. Delete test agent.
API endpoints:
- POST /api/agents
- POST /api/agents/{agentId}/console/chat/stop
- DELETE /api/agents/{agentId}
"""
agent_id = "integ_console_stop_01"
fake_chat_id = str(uuid.uuid4())
create_agent = app_server.api_request(
"POST",
"/api/agents",
json={"id": agent_id, "name": "Console stop agent", "description": ""},
)
assert create_agent.status_code == 201, app_server.logs_tail()
try:
stop_url = (
f"{app_server.base_url}/api/agents/{agent_id}/console/chat/stop"
f"?chat_id={fake_chat_id}"
)
resp = app_server.client.post(stop_url, timeout=_CONSOLE_HTTP_TIMEOUT)
print(
(
f"[integration]"
f"[{'PASS' if resp.status_code == 200 else 'FAIL'}] "
f"POST /api/agents/{agent_id}/console/chat/stop | "
f"params=chat_id={fake_chat_id} | request=- | "
f"status={resp.status_code} | response={resp.text[:500]}"
),
flush=True,
)
assert resp.status_code == 200, app_server.logs_tail()
body = resp.json()
assert isinstance(body.get("stopped"), bool)
finally:
app_server.api_request("DELETE", f"/api/agents/{agent_id}")
@pytest.mark.integration
@pytest.mark.p0
def test_agent_scoped_console_upload_small_file(app_server) -> None:
"""Test purpose:
- Verify scoped console upload accepts a small file and returns metadata
without calling external services.
Test flow:
1. Create a dedicated test agent.
2. POST multipart upload to scoped console upload with tiny text content.
3. Assert JSON includes file_name and expected byte size.
4. Delete test agent.
API endpoints:
- POST /api/agents
- POST /api/agents/{agentId}/console/upload
- DELETE /api/agents/{agentId}
"""
agent_id = "integ_console_upload_01"
payload = b"integration-console-upload\n"
create_agent = app_server.api_request(
"POST",
"/api/agents",
json={
"id": agent_id,
"name": "Console upload agent",
"description": "",
},
)
assert create_agent.status_code == 201, app_server.logs_tail()
try:
upload_url = (
f"{app_server.base_url}/api/agents/{agent_id}/console/upload"
)
files = {
"file": ("integ-upload.txt", io.BytesIO(payload), "text/plain"),
}
resp = app_server.client.post(
upload_url,
files=files,
timeout=_CONSOLE_HTTP_TIMEOUT,
)
print(
(
f"[integration]"
f"[{'PASS' if resp.status_code == 200 else 'FAIL'}] "
f"POST /api/agents/{agent_id}/console/upload | "
f"params=- | request=(multipart file) | "
f"status={resp.status_code} | response={resp.text[:800]}"
),
flush=True,
)
assert resp.status_code == 200, app_server.logs_tail()
body = resp.json()
assert body.get("file_name") == "integ-upload.txt"
assert body.get("size") == len(payload)
assert "url" in body
finally:
app_server.api_request("DELETE", f"/api/agents/{agent_id}")