claire/tests/test_rename.py
Natalie aa1378a807 feat(@projects): add session orchestration & web UI components
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-21 19:54:42 -07:00

91 lines
3.1 KiB
Python

"""Tests for org / project rename — event-sourced renames.
Renames must go through events (`ProjectUpdated.name` / `OrgUpdated.name`)
so a `replay()` reconstructs the new name; a direct projection UPDATE would
be lost. These tests assert the projection changed AND an event was logged.
"""
from __future__ import annotations
import sqlite3
import pytest
from claire.hlc import HLCGenerator
from claire.web import service
def _event_count(conn: sqlite3.Connection) -> int:
return conn.execute("SELECT COUNT(*) FROM events").fetchone()[0]
def test_rename_project_by_name(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
service.create_project(conn, gen, name="alpha")
before = _event_count(conn)
renamed = service.rename_project(conn, gen, name_or_id="alpha", new_name="beta")
assert renamed.name == "beta"
assert _event_count(conn) == before + 1
row = conn.execute(
"SELECT name FROM projects WHERE id = ?", (str(renamed.id),)
).fetchone()
assert row["name"] == "beta"
def test_rename_project_by_id(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
proj = service.create_project(conn, gen, name="alpha")
renamed = service.rename_project(
conn, gen, name_or_id=str(proj.id), new_name="gamma"
)
assert renamed.id == proj.id
assert renamed.name == "gamma"
def test_rename_project_rejects_empty(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
service.create_project(conn, gen, name="alpha")
with pytest.raises(service.InvalidInput):
service.rename_project(conn, gen, name_or_id="alpha", new_name=" ")
def test_rename_project_unknown(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
with pytest.raises(service.NotFound):
service.rename_project(conn, gen, name_or_id="nope", new_name="beta")
def test_rename_project_conflict(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
service.create_project(conn, gen, name="alpha")
service.create_project(conn, gen, name="beta")
with pytest.raises(service.Conflict):
service.rename_project(conn, gen, name_or_id="alpha", new_name="beta")
def test_rename_org_by_name(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
service.create_org(conn, gen, name="acme")
before = _event_count(conn)
renamed = service.rename_org(conn, gen, name_or_id="acme", new_name="globex")
assert renamed.name == "globex"
assert _event_count(conn) == before + 1
row = conn.execute(
"SELECT name FROM orgs WHERE id = ?", (str(renamed.id),)
).fetchone()
assert row["name"] == "globex"
def test_rename_org_by_id(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
org = service.create_org(conn, gen, name="acme")
renamed = service.rename_org(conn, gen, name_or_id=str(org.id), new_name="initech")
assert renamed.id == org.id
assert renamed.name == "initech"
def test_rename_org_rejects_empty(conn: sqlite3.Connection, gen: HLCGenerator) -> None:
service.create_org(conn, gen, name="acme")
with pytest.raises(service.InvalidInput):
service.rename_org(conn, gen, name_or_id="acme", new_name="")