diff --git a/gates/profiles.py b/gates/profiles.py index 6e4525e..ff8798f 100644 --- a/gates/profiles.py +++ b/gates/profiles.py @@ -46,3 +46,14 @@ def find_by_id(reg, pid): def find_by_name(reg, name): return next((p for p in reg["profiles"] if p["name"] == name), None) + + +def create_profile(base, name, pid, ts=0): + reg = read_registry(base) + if find_by_name(reg, name): + raise ValueError(f"profile name already exists: {name}") + (Path(base) / pid).mkdir(parents=True, exist_ok=True) + entry = {"id": pid, "name": name, "created": ts} + reg["profiles"].append(entry) + write_registry(base, reg) + return entry diff --git a/tests/test_profiles.py b/tests/test_profiles.py index b17e899..3448b92 100644 --- a/tests/test_profiles.py +++ b/tests/test_profiles.py @@ -22,3 +22,15 @@ def test_find_helpers(): assert pr.find_by_id(reg, "b")["name"] == "y" assert pr.find_by_name(reg, "x")["id"] == "a" assert pr.find_by_id(reg, "z") is None + +def test_create_profile(tmp_path): + e = pr.create_profile(str(tmp_path), "setA", "id1", ts=10) + assert e == {"id": "id1", "name": "setA", "created": 10} + assert (tmp_path / "id1").is_dir() + assert pr.find_by_name(pr.read_registry(str(tmp_path)), "setA")["id"] == "id1" + +def test_create_duplicate_name_raises(tmp_path): + import pytest + pr.create_profile(str(tmp_path), "setA", "id1") + with pytest.raises(ValueError): + pr.create_profile(str(tmp_path), "setA", "id2")