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
109 lines
2.9 KiB
Python
109 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Integration tests for Memory & ReMe module internals.
|
|
|
|
Covers src/qwenpaw/agents/memory/* (proactive_utils, base manager)
|
|
— 956 uncovered lines.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from datetime import datetime, timezone
|
|
|
|
import pytest
|
|
|
|
|
|
# ------------------------------------------------------------------ #
|
|
# proactive_utils
|
|
# ------------------------------------------------------------------ #
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_ensure_tz_aware_naive() -> None:
|
|
"""ensure_tz_aware attaches UTC to a naive datetime."""
|
|
from qwenpaw.agents.memory.proactive.proactive_utils import (
|
|
ensure_tz_aware,
|
|
)
|
|
|
|
naive = datetime(2026, 8, 26, 12, 0, 0)
|
|
aware = ensure_tz_aware(naive)
|
|
assert aware.tzinfo is not None
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_ensure_tz_aware_already() -> None:
|
|
"""ensure_tz_aware keeps an aware datetime unchanged."""
|
|
from qwenpaw.agents.memory.proactive.proactive_utils import (
|
|
ensure_tz_aware,
|
|
)
|
|
|
|
aware = datetime(2026, 8, 26, 12, 0, 0, tzinfo=timezone.utc)
|
|
assert ensure_tz_aware(aware) == aware
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_load_json_safely_dict() -> None:
|
|
"""load_json_safely parses a JSON string."""
|
|
from qwenpaw.agents.memory.proactive.proactive_utils import (
|
|
load_json_safely,
|
|
)
|
|
|
|
assert load_json_safely(json.dumps({"a": 1})) == {"a": 1}
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_load_json_safely_garbage() -> None:
|
|
"""load_json_safely returns None for garbage input."""
|
|
from qwenpaw.agents.memory.proactive.proactive_utils import (
|
|
load_json_safely,
|
|
)
|
|
|
|
assert load_json_safely("not json") is None
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_extract_content_string() -> None:
|
|
"""extract_content returns plain string content."""
|
|
from qwenpaw.agents.memory.proactive.proactive_utils import (
|
|
extract_content,
|
|
)
|
|
|
|
assert extract_content("hello") == "hello"
|
|
|
|
|
|
# ------------------------------------------------------------------ #
|
|
# base memory manager
|
|
# ------------------------------------------------------------------ #
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_get_memory_manager_backend_unknown() -> None:
|
|
"""get_memory_manager_backend raises or falls back for unknown."""
|
|
from qwenpaw.agents.memory.base_memory_manager import (
|
|
get_memory_manager_backend,
|
|
)
|
|
|
|
try:
|
|
backend = get_memory_manager_backend("integ-unknown-backend")
|
|
assert backend is not None
|
|
except (ValueError, KeyError):
|
|
pass # unknown backend may be rejected
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p1
|
|
def test_get_memory_manager_backend_reme() -> None:
|
|
"""get_memory_manager_backend resolves the reme backend."""
|
|
from qwenpaw.agents.memory.base_memory_manager import (
|
|
get_memory_manager_backend,
|
|
)
|
|
|
|
backend = get_memory_manager_backend("reme")
|
|
assert backend is not None
|