Files
2026-07-13 13:12:33 +08:00

80 lines
2.2 KiB
Python

"""Eligibility tests for skill manifest requirements."""
from __future__ import annotations
from opensquilla.skills.eligibility import EligibilityContext, diagnose_eligibility
from opensquilla.skills.types import (
SkillInstallSpec,
SkillLayer,
SkillPlatformMeta,
SkillRequires,
SkillSpec,
)
def _env_any_skill() -> SkillSpec:
return SkillSpec(
name="env-any-skill",
description="Synthetic skill with envAny requirements.",
layer=SkillLayer.BUNDLED,
always=False,
triggers=[],
content="# body",
metadata=SkillPlatformMeta(
requires=SkillRequires(env_any=["OPENROUTER_API_KEY", "ARK_API_KEY"])
),
)
def test_env_any_is_satisfied_when_one_env_var_exists() -> None:
report = diagnose_eligibility(
_env_any_skill(),
EligibilityContext(os_name="linux", env_cache={"ARK_API_KEY": "set"}),
)
assert report.eligible is True
assert report.missing_env_any == []
def test_env_any_missing_when_no_alternative_exists() -> None:
report = diagnose_eligibility(
_env_any_skill(),
EligibilityContext(
os_name="linux",
env_cache={"OPENROUTER_API_KEY": None, "ARK_API_KEY": None},
),
)
assert report.eligible is False
assert report.missing_env_any == [["OPENROUTER_API_KEY", "ARK_API_KEY"]]
assert (
"Need one env var from: OPENROUTER_API_KEY, ARK_API_KEY" in report.reasons
)
def test_install_metadata_counts_as_declared_dependencies() -> None:
spec = SkillSpec(
name="package-only-skill",
description="Synthetic skill with package-only install metadata.",
layer=SkillLayer.BUNDLED,
always=False,
triggers=[],
content="# body",
metadata=SkillPlatformMeta(
install=[
SkillInstallSpec(
kind="uv",
id="pillow",
label="Install Pillow",
package="pillow",
module="PIL",
)
]
),
)
report = diagnose_eligibility(spec, EligibilityContext(os_name="linux"))
assert report.eligible is True
assert report.declared is True