70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
|
|
import json
|
||
|
|
|
||
|
|
from furtka.scanner import scan
|
||
|
|
|
||
|
|
VALID_MANIFEST = {
|
||
|
|
"name": "fileshare",
|
||
|
|
"display_name": "Network Files",
|
||
|
|
"version": "0.1.0",
|
||
|
|
"description": "SMB share",
|
||
|
|
"volumes": ["files"],
|
||
|
|
"ports": [445],
|
||
|
|
"icon": "icon.svg",
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def _make_app(root, name, manifest=None):
|
||
|
|
app = root / name
|
||
|
|
app.mkdir(parents=True)
|
||
|
|
if manifest is not None:
|
||
|
|
(app / "manifest.json").write_text(json.dumps(manifest))
|
||
|
|
return app
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_missing_root(tmp_path):
|
||
|
|
assert scan(tmp_path / "does-not-exist") == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_empty_root(tmp_path):
|
||
|
|
assert scan(tmp_path) == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_valid_app(tmp_path):
|
||
|
|
_make_app(tmp_path, "fileshare", VALID_MANIFEST)
|
||
|
|
results = scan(tmp_path)
|
||
|
|
assert len(results) == 1
|
||
|
|
assert results[0].ok
|
||
|
|
assert results[0].manifest.name == "fileshare"
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_skips_files(tmp_path):
|
||
|
|
_make_app(tmp_path, "fileshare", VALID_MANIFEST)
|
||
|
|
(tmp_path / "stray.txt").write_text("ignore me")
|
||
|
|
results = scan(tmp_path)
|
||
|
|
assert len(results) == 1
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_missing_manifest(tmp_path):
|
||
|
|
_make_app(tmp_path, "broken")
|
||
|
|
results = scan(tmp_path)
|
||
|
|
assert len(results) == 1
|
||
|
|
assert not results[0].ok
|
||
|
|
assert "manifest.json missing" in results[0].error
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_invalid_manifest(tmp_path):
|
||
|
|
bad = dict(VALID_MANIFEST)
|
||
|
|
del bad["volumes"]
|
||
|
|
_make_app(tmp_path, "fileshare", bad)
|
||
|
|
results = scan(tmp_path)
|
||
|
|
assert len(results) == 1
|
||
|
|
assert not results[0].ok
|
||
|
|
assert "volumes" in results[0].error
|
||
|
|
|
||
|
|
|
||
|
|
def test_scan_sorted_by_name(tmp_path):
|
||
|
|
_make_app(tmp_path, "z-app", dict(VALID_MANIFEST, name="z-app"))
|
||
|
|
_make_app(tmp_path, "a-app", dict(VALID_MANIFEST, name="a-app"))
|
||
|
|
results = scan(tmp_path)
|
||
|
|
assert [r.path.name for r in results] == ["a-app", "z-app"]
|