56 lines
2 KiB
Python
56 lines
2 KiB
Python
#!/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"
|