d73ff9b0fb
Deploy Site / deploy-vercel (push) Has been cancelled
Deploy Site / deploy-docs (push) Has been cancelled
Docker / shell lint / Lint Dockerfile (hadolint) (push) Has been cancelled
Docker / shell lint / Lint docker/ shell scripts (shellcheck) (push) Has been cancelled
Docker Build and Publish / build-amd64 (push) Has been cancelled
Docker Build and Publish / build-arm64 (push) Has been cancelled
Lint (ruff + ty) / ruff + ty diff (push) Has been cancelled
Lint (ruff + ty) / ruff enforcement (blocking) (push) Has been cancelled
Lint (ruff + ty) / Windows footguns (blocking) (push) Has been cancelled
Nix Lockfile Fix / auto-fix-main (push) Has been cancelled
Nix Lockfile Fix / fix (push) Has been cancelled
Nix / nix (macos-latest) (push) Has been cancelled
Nix / nix (ubuntu-latest) (push) Has been cancelled
OSV-Scanner / Scan lockfiles (push) Has been cancelled
Build Skills Index / build-index (push) Has been cancelled
Tests / test (1) (push) Has been cancelled
Tests / test (2) (push) Has been cancelled
Tests / test (3) (push) Has been cancelled
Tests / test (4) (push) Has been cancelled
Tests / test (5) (push) Has been cancelled
Tests / test (6) (push) Has been cancelled
Tests / e2e (push) Has been cancelled
uv.lock check / uv lock --check (push) Has been cancelled
Docker Build and Publish / merge (push) Has been cancelled
Build Skills Index / trigger-deploy (push) Has been cancelled
Tests / save-durations (push) Has been cancelled
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
"""Tests for Discord channel_skill_bindings auto-skill resolution."""
|
|
from unittest.mock import MagicMock
|
|
|
|
|
|
def _make_adapter():
|
|
"""Create a minimal DiscordAdapter with mocked config."""
|
|
from plugins.platforms.discord.adapter import DiscordAdapter
|
|
adapter = object.__new__(DiscordAdapter)
|
|
adapter.config = MagicMock()
|
|
adapter.config.extra = {}
|
|
return adapter
|
|
|
|
|
|
class TestResolveChannelSkills:
|
|
def test_no_bindings_returns_none(self):
|
|
adapter = _make_adapter()
|
|
assert adapter._resolve_channel_skills("123") is None
|
|
|
|
def test_match_by_channel_id(self):
|
|
adapter = _make_adapter()
|
|
adapter.config.extra = {
|
|
"channel_skill_bindings": [
|
|
{"id": "100", "skills": ["skill-a", "skill-b"]},
|
|
]
|
|
}
|
|
assert adapter._resolve_channel_skills("100") == ["skill-a", "skill-b"]
|
|
|
|
def test_match_by_parent_id(self):
|
|
adapter = _make_adapter()
|
|
adapter.config.extra = {
|
|
"channel_skill_bindings": [
|
|
{"id": "200", "skills": ["forum-skill"]},
|
|
]
|
|
}
|
|
# channel_id doesn't match, but parent_id does (forum thread)
|
|
assert adapter._resolve_channel_skills("999", parent_id="200") == ["forum-skill"]
|
|
|
|
def test_no_match_returns_none(self):
|
|
adapter = _make_adapter()
|
|
adapter.config.extra = {
|
|
"channel_skill_bindings": [
|
|
{"id": "100", "skills": ["skill-a"]},
|
|
]
|
|
}
|
|
assert adapter._resolve_channel_skills("999") is None
|
|
|
|
def test_single_skill_string(self):
|
|
adapter = _make_adapter()
|
|
adapter.config.extra = {
|
|
"channel_skill_bindings": [
|
|
{"id": "100", "skill": "solo-skill"},
|
|
]
|
|
}
|
|
assert adapter._resolve_channel_skills("100") == ["solo-skill"]
|
|
|
|
def test_dedup_preserves_order(self):
|
|
adapter = _make_adapter()
|
|
adapter.config.extra = {
|
|
"channel_skill_bindings": [
|
|
{"id": "100", "skills": ["a", "b", "a", "c", "b"]},
|
|
]
|
|
}
|
|
assert adapter._resolve_channel_skills("100") == ["a", "b", "c"]
|