tests: cover ModelSpec.adapter normalization (tilde, relative, None) + update yaml-roundtrip assertion (B22)
- SHA
f10567bad1fc6b14f6ddf467e31c972361b91ceb- Parents
-
498b85e - Tree
2a67593
f10567b
f10567bad1fc6b14f6ddf467e31c972361b91ceb498b85e
2a67593| Status | File | + | - |
|---|---|---|---|
| M |
tests/unit/test_model.py
|
18 | 0 |
| M |
tests/unit/test_suite_spec.py
|
4 | 1 |
tests/unit/test_model.pymodified@@ -42,6 +42,24 @@ class TestModelSpec: | ||
| 42 | 42 | spec = ModelSpec(base="x", adapter="/tmp/adapter") # type: ignore[arg-type] |
| 43 | 43 | assert isinstance(spec.adapter, Path) |
| 44 | 44 | |
| 45 | + def test_adapter_tilde_expanded(self) -> None: | |
| 46 | + """B22: ``~`` is expanded at spec-load time so backends see absolute paths.""" | |
| 47 | + spec = ModelSpec(base="x", adapter="~/some/adapter") # type: ignore[arg-type] | |
| 48 | + assert spec.adapter is not None | |
| 49 | + assert "~" not in str(spec.adapter) | |
| 50 | + assert spec.adapter.is_absolute() | |
| 51 | + | |
| 52 | + def test_adapter_relative_resolved(self) -> None: | |
| 53 | + """B22: relative paths resolve against the current cwd.""" | |
| 54 | + spec = ModelSpec(base="x", adapter="adapter/v1") # type: ignore[arg-type] | |
| 55 | + assert spec.adapter is not None | |
| 56 | + assert spec.adapter.is_absolute() | |
| 57 | + | |
| 58 | + def test_adapter_none_passthrough(self) -> None: | |
| 59 | + """B22 normalizer doesn't blow up on the default ``None``.""" | |
| 60 | + spec = ModelSpec(base="x") | |
| 61 | + assert spec.adapter is None | |
| 62 | + | |
| 45 | 63 | |
| 46 | 64 | class TestLoadedModel: |
| 47 | 65 | def test_frozen_dataclass(self) -> None: |
tests/unit/test_suite_spec.pymodified@@ -82,4 +82,7 @@ class TestLoader: | ||
| 82 | 82 | path = tmp_path / "sway.yaml" |
| 83 | 83 | path.write_text(yaml.safe_dump(_minimum_valid()), encoding="utf-8") |
| 84 | 84 | spec = load_spec(path) |
| 85 | - assert spec.models.ft.adapter == Path("/tmp/adapter") | |
| 85 | + # B22: ModelSpec.adapter is normalized via Path.resolve(), so | |
| 86 | + # symlinked roots (/tmp → /private/tmp on macOS) get followed. | |
| 87 | + # Compare against the resolved form so the test isn't host-dependent. | |
| 88 | + assert spec.models.ft.adapter == Path("/tmp/adapter").resolve() | |