mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-08 11:46:35 +00:00
Job and run titles read `🐳🧅…𓏴𓏛·Nextcloud#2`; the `·` between the hieroglyph block and the title only costs width. RoleDisplayName.encode now joins the two directly (`𓏴𓏛Nextcloud#2`). Spaces inside a README heading still become `·`, which keeps a display name one token in the space-separated whitelist and priority inputs. decode and decode_list still map the dotted form of older runs back to the role id, so report_failures, the run tooling and selection tokens pasted from an earlier run keep working. Old and new names cannot collide: a glyph block holds only hieroglyphs and a title starts with a letter. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
91 lines
3.6 KiB
Python
91 lines
3.6 KiB
Python
import unittest
|
|
|
|
from utils.roles.display import display_names, split_axes
|
|
|
|
APP = "web-app-nextcloud"
|
|
|
|
|
|
class TestRoleDisplayName(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.codec = display_names()
|
|
|
|
def test_encode_runs_the_category_labels_together_before_the_heading(self):
|
|
self.assertEqual(
|
|
f"{''.join(self.codec.category_labels(APP))}{self.codec.title(APP)}",
|
|
self.codec.encode(APP),
|
|
)
|
|
|
|
def test_a_heading_longer_than_the_id_section_loses_to_it(self):
|
|
long_heading = "svc-runner"
|
|
self.assertGreater(
|
|
len(self.codec.title(long_heading)),
|
|
len(self.codec.id_fragment(long_heading)),
|
|
)
|
|
self.assertEqual(
|
|
"".join(self.codec.category_labels(long_heading))
|
|
+ self.codec.id_fragment(long_heading),
|
|
self.codec.encode(long_heading),
|
|
)
|
|
self.assertEqual("𓉐𓌀𓌉compose", self.codec.encode("sys-ctl-alm-compose"))
|
|
|
|
def test_the_id_section_drops_what_the_categories_already_say(self):
|
|
self.assertEqual("nextcloud", self.codec.id_fragment(APP))
|
|
self.assertEqual("update", self.codec.id_fragment("update"))
|
|
|
|
def test_the_variant_is_joined_without_whitespace(self):
|
|
encoded = self.codec.encode(APP, "0,1")
|
|
self.assertNotIn(" ", encoded)
|
|
self.assertEqual(f"{self.codec.encode(APP)}#0,1", encoded)
|
|
|
|
def test_decode_reverses_encode_with_and_without_a_variant(self):
|
|
for variant in ("", "0", "0,1"):
|
|
self.assertEqual(APP, self.codec.decode(self.codec.encode(APP, variant)))
|
|
|
|
def test_decode_still_reads_the_dotted_name_of_older_runs(self):
|
|
glyphs = "".join(self.codec.category_labels(APP))
|
|
dotted = self.codec.encode(APP).replace(glyphs, f"{glyphs}·", 1)
|
|
self.assertNotEqual(dotted, self.codec.encode(APP))
|
|
self.assertEqual(APP, self.codec.decode(dotted))
|
|
self.assertEqual(APP, self.codec.decode(f"{dotted}#2"))
|
|
|
|
def test_decode_passes_a_role_id_through(self):
|
|
self.assertEqual(APP, self.codec.decode(APP))
|
|
self.assertEqual(APP, self.codec.decode(f"{APP}#0,1"))
|
|
|
|
def test_decode_rejects_what_names_no_role(self):
|
|
self.assertIsNone(self.codec.decode("Update Docker image versions"))
|
|
self.assertIsNone(self.codec.decode(""))
|
|
|
|
def test_lists_round_trip_and_keep_sentinels(self):
|
|
ids = f"{APP} svc-db-postgres __ALL__"
|
|
self.assertEqual(ids, self.codec.decode_list(self.codec.encode_list(ids)))
|
|
|
|
def test_an_axis_suffix_survives_the_decode(self):
|
|
encoded = f"{self.codec.encode(APP)}#0,2@swarm+tor"
|
|
self.assertEqual(f"{APP}#0,2@swarm+tor", self.codec.decode_list(encoded))
|
|
|
|
def test_a_role_id_holds_no_axis_seam(self):
|
|
self.assertEqual((APP, ""), split_axes(APP))
|
|
self.assertEqual((APP, "@host"), split_axes(f"{APP}@host"))
|
|
|
|
def test_every_role_encodes_to_one_unique_space_free_token(self):
|
|
seen: dict[str, str] = {}
|
|
collisions = []
|
|
spaced = []
|
|
for path in sorted(self.codec.roles_dir.iterdir()):
|
|
if not (path / "README.md").is_file():
|
|
continue
|
|
name = self.codec.encode(path.name)
|
|
if " " in name:
|
|
spaced.append(f"{path.name}: {name}")
|
|
if name in seen:
|
|
collisions.append(f"{name}: {seen[name]} vs {path.name}")
|
|
seen[name] = path.name
|
|
self.assertEqual([], spaced, f"Display names that break a list: {spaced}")
|
|
self.assertEqual([], collisions, f"Ambiguous display names: {collisions}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|