"""Instance identity: generation, persistence, rename-by-edit."""
import json
import pytest
from navi.identity import (
InstanceIdentity,
ensure_identity,
generate_name,
load_identity,
)
def test_generated_name_is_adjective_animal():
for _ in range(50):
name = generate_name()
assert "-" in name
adj, animal = name.split("-", 1)
assert adj.isalpha() and animal.isalpha()
assert adj == adj.lower()
def test_generated_names_vary():
names = {generate_name() for _ in range(80)}
assert len(names) > 1
def test_ensure_creates_file_and_is_stable(tmp_path):
path = tmp_path / "instance.json"
first = ensure_identity(path)
assert path.exists()
second = load_identity(path)
assert first.name == second.name
assert first.instance_id == second.instance_id
# idempotent: ensure on an existing file never regenerates
third = ensure_identity(path)
assert third.instance_id == first.instance_id
def test_rename_by_editing_file(tmp_path):
path = tmp_path / "instance.json"
ensure_identity(path)
data = json.loads(path.read_text())
data["name"] = "renamed-by-hand"
path.write_text(json.dumps(data))
assert load_identity(path).name == "renamed-by-hand"
def test_load_missing_file_raises(tmp_path):
with pytest.raises(Exception):
load_identity(tmp_path / "absent.json")
def test_identity_dataclass_fields():
ident = InstanceIdentity(name="quiet-otter", instance_id="uuid-x", created_at="t")
assert ident.name == "quiet-otter"