80 lines
2.2 KiB
Python
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
|