"""§22.4a S6 — the type-driven entry noun. The displayed noun for an entry is a framework concept keyed on the collection's immutable type: document→"RFC", specification→"Spec", bdd→"Feature". The chrome reads it from the API rather than hardcoding "RFC", so the propose CTA + entry chrome name entries correctly per collection type with no per-deployment config. """ from __future__ import annotations from fastapi.testclient import TestClient from app import collections, db from test_propose_vertical import ( # noqa: F401 app_with_fake_gitea, provision_user_row, sign_in_as, tmp_env, ) def test_entry_noun_map(): assert collections.entry_noun("document") == "RFC" assert collections.entry_noun("specification") == "Spec" assert collections.entry_noun("bdd") == "Feature" # An unknown/future type falls back to the generic noun, never label-less. assert collections.entry_noun("mystery") == "RFC" def test_collection_api_surfaces_entry_noun(app_with_fake_gitea): app, _ = app_with_fake_gitea with TestClient(app) as client: provision_user_row(user_id=1, login="ben", role="owner") sign_in_as(client, user_id=1, gitea_login="ben", display_name="Ben", role="owner", email="ben@test") # Flip the default collection to a bdd type and confirm the noun follows. db.conn().execute("UPDATE collections SET type='bdd' WHERE id='default'") r = client.get("/api/projects/default/collections/default") assert r.status_code == 200, r.text assert r.json()["entry_noun"] == "Feature" def test_directory_items_carry_entry_noun(app_with_fake_gitea): app, _ = app_with_fake_gitea with TestClient(app) as client: db.conn().execute("UPDATE projects SET visibility='public' WHERE id='default'") db.conn().execute("UPDATE collections SET type='specification' WHERE id='default'") r = client.get("/api/deployment") assert r.status_code == 200, r.text item = next(p for p in r.json()["projects"] if p["id"] == "default") assert item["entry_noun"] == "Spec"