arm-core/api/tests/test_domain_aliases.py
Andrey Epifancev 7007c51f63 feat(directories): алиасы ЮЛ с нормализацией §3
normalize_alias (lower, ё→е, без пунктуации и ОПФ), POST/DELETE
/directories/legal-entities/{id}/aliases, конфликты ALIAS_EXISTS /
ALIAS_TAKEN (с legal_entity_id владельца), EMPTY_ALIAS, аудит
LEGAL_ENTITY_CHANGE по legal_entity_alias.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 21:52:47 +04:00

53 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Нормализация алиаса ЮЛ (§3 п. 4): lower, ё→е, без пунктуации/кавычек/ОПФ, схлопнутые пробелы."""
import pytest
from src.domain.aliases import LEGAL_FORMS, normalize_alias
@pytest.mark.parametrize(
("raw", "expected"),
[
("ООО «Пекарня Счастливочная»", "пекарня счастливочная"),
("Пекарня Счастливочная, ООО", "пекарня счастливочная"),
('АО "РУССКИЙ БИСКВИТ"', "русский бисквит"),
("ИП Иванов И.И.", "иванов и и"),
("Пекарня Счастливочная ООО", "пекарня счастливочная"),
(" Пекарня «Счастливочная» ", "пекарня счастливочная"),
("Ёлка и Ёж", "елка и еж"),
("ЁЛКА", "елка"),
("„Пекарня“ ПАО", "пекарня"),
("Пекарня\tСчастливочная\n", "пекарня счастливочная"),
],
)
def test_normalize_alias(raw: str, expected: str) -> None:
assert normalize_alias(raw) == expected
@pytest.mark.parametrize("raw", ["ООО", "ООО «АО»", " ип, ооо ", "«»", "", " "])
def test_only_legal_forms_or_punctuation_gives_empty(raw: str) -> None:
assert normalize_alias(raw) == ""
@pytest.mark.parametrize(
("raw", "expected"),
[("Плооо", "плооо"), ("Оооптторг", "оооптторг"), ("Саоп ао", "саоп"), ("ТСЖ Ипподром", "ипподром")],
)
def test_legal_form_is_removed_only_as_whole_token(raw: str, expected: str) -> None:
assert normalize_alias(raw) == expected
def test_same_name_in_different_spelling_is_equal() -> None:
forms = [
"ООО «Пекарня Счастливочная»",
"Пекарня Счастливочная, ООО",
"пекарня счастливочная",
"ООО Пекарня Счастливочная",
]
assert len({normalize_alias(form) for form in forms}) == 1
def test_legal_forms_are_lowercase_tokens() -> None:
assert {"ооо", "ао", "пао", "зао", "ип"} <= LEGAL_FORMS
assert all(form == form.lower() and " " not in form for form in LEGAL_FORMS)