"""Instance identity: generation, persistence, rename-by-edit."""
import json
import pytest
from navi.identity import (
InstanceIdentity,
ensure_identity,
generate_name,
load_identity,
)
_ALL_NAMES = {
n
for pool in ( # from navi/identity.py
"yuki sakura hana aki miku rin mei yui sana nao kaori mika rika emi "
"haruka asuka rei airi kana honoka mitsuki natsumi sayuri suzume "
"tamaki tomoe ayame chiyo fumiko himari kaede kanna mai mariko "
"midori momoka natsuki noriko riko saori shiori suzuka tsukiko umeko "
"yoshiko yuzuki kirie jun motoko satchiko",
"emma olivia ava mia chloe grace lily hannah nora ruby alice clara "
"daisy hazel iris jade june leah lucy pearl rose sage stella violet "
"willa zoe amber brooke faith harmony josephine katherine lydia "
"madeline natalie paige riley scarlett tessa trinity vivian abigail "
"bethany delilah everly jenna leona melody serenity tiffany",
"sofia lucia valentina camila daniela carmen elena gabriela ines "
"lola marisol paulina raquel rosalia serena teresa ximena alba "
"bonita carlota esperanza juanita mirta noelia paloma rosita adela "
"belen candela dolores estrella flor guadalupe jimena laura miriam "
"pilar rocio veronica yolanda catalina dalia emilia fernanda gisela "
"nayeli renata salma ursula vanesa",
)
for n in pool.split()
}
def test_generated_name_is_two_female_names():
for _ in range(50):
name = generate_name()
first, second = name.split("-")
assert first in _ALL_NAMES
assert second in _ALL_NAMES
assert first != second
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"