91 lines
3.1 KiB
Python
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="")
|