import importlib.util import json import zipfile from pathlib import Path def _load_packager(): path = Path(__file__).resolve().parents[1] / "scripts" / "package_extension.py" spec = importlib.util.spec_from_file_location("package_extension", path) module = importlib.util.module_from_spec(spec) assert spec.loader is not None spec.loader.exec_module(module) return module def _fake_extension(tmp_path: Path) -> Path: extension = tmp_path / "extension" icons = extension / "icons" icons.mkdir(parents=True) (extension / "manifest.json").write_text(json.dumps({ "manifest_version": 3, "name": "browser-cli", "version": "1.2.3", "key": "test-key", }), encoding="utf-8") for name in ("background.js", "content-dispatch.js", "content.js"): (extension / name).write_text("// generated test bundle\n", encoding="utf-8") (extension / "icon.svg").write_text("\n", encoding="utf-8") (icons / "icon-128.png").write_bytes(b"png") return extension def _packager_with_fake_extension(tmp_path: Path): packager = _load_packager() packager.EXTENSION_DIR = _fake_extension(tmp_path) packager.DIST_DIR = tmp_path / "dist" return packager def test_webstore_package_strips_manifest_key(tmp_path): packager = _packager_with_fake_extension(tmp_path) out = packager.package_extension(webstore=True, out=tmp_path / "webstore.zip") with zipfile.ZipFile(out) as zf: manifest = json.loads(zf.read("manifest.json")) names = set(zf.namelist()) assert "key" not in manifest assert "background.js" in names assert "content-dispatch.js" in names assert "content.js" in names assert "icons/icon-128.png" in names def test_local_package_keeps_manifest_key(tmp_path): packager = _packager_with_fake_extension(tmp_path) out = packager.package_extension(webstore=False, out=tmp_path / "local.zip") with zipfile.ZipFile(out) as zf: manifest = json.loads(zf.read("manifest.json")) assert manifest["key"] == "test-key"