#!/usr/bin/env python3 # Copyright (c) 2025 Patrick Motsch # All rights reserved. """Unit tests for mandateNameUtils (slug, validation, unique allocation).""" import pytest from modules.shared.mandateNameUtils import ( allocateUniqueMandateSlug, isValidMandateName, slugifyMandateName, transliterateGerman, ) class TestTransliterateGerman: def test_transliterateGerman_umlauts(self): assert transliterateGerman("Müller") == "Mueller" assert transliterateGerman("Größe") == "Groesse" assert transliterateGerman("Fußball") == "Fussball" class TestIsValidMandateName: def test_isValidMandateName_ok(self): assert isValidMandateName("ab") is True assert isValidMandateName("a-b") is True assert isValidMandateName("root") is True assert isValidMandateName("mn-2") is True def test_isValidMandateName_rejects(self): assert isValidMandateName("a") is False assert isValidMandateName("") is False assert isValidMandateName("Home patrick") is False assert isValidMandateName("UPPER") is False assert isValidMandateName("a--b") is False assert isValidMandateName("-ab") is False assert isValidMandateName("ab-") is False class TestSlugifyMandateName: def test_slugifyMandateName_basic(self): assert slugifyMandateName("Müller AG") == "mueller-ag" assert slugifyMandateName(" Foo Bar ") == "foo-bar" def test_slugifyMandateName_empty(self): assert slugifyMandateName("") == "mn" assert slugifyMandateName(" ") == "mn" class TestAllocateUniqueMandateSlug: def test_allocateUniqueMandateSlug_first_free(self): assert allocateUniqueMandateSlug("mueller-ag", ["other"]) == "mueller-ag" def test_allocateUniqueMandateSlug_collision(self): assert allocateUniqueMandateSlug("mueller-ag", ["mueller-ag"]) == "mueller-ag-2" assert allocateUniqueMandateSlug("mueller-ag", ["mueller-ag", "mueller-ag-2"]) == "mueller-ag-3"