agnes-the-ai-analyst/tests/test_username_generation.py
Petr 14d75d6229 Fix: correct OpenMetadata catalog URL path and add debug logging
- Change catalog URL from /explore/{fqn} to /table/{fqn}
- Add debug logging to see parsed tags, owners, tier from API response
2026-03-12 14:34:12 +01:00

101 lines
4.6 KiB
Python

"""Tests for username generation from email addresses."""
import pytest
from webapp.user_service import get_username_from_email, get_webapp_username, RESERVED_USERNAMES
import webapp.user_service as user_service_module
class TestGetUsernameFromEmail:
"""Test email-to-username conversion."""
def test_basic_email(self):
assert get_username_from_email("admin@test.com") == "admin_test_com"
def test_email_with_dots(self):
assert get_username_from_email("john.doe@acme.com") == "john_doe_acme_com"
def test_different_domains_produce_different_usernames(self):
"""Same local part, different domains -> unique usernames."""
u1 = get_username_from_email("pavel@test.com")
u2 = get_username_from_email("pavel@groupon.com")
u3 = get_username_from_email("pavel@keboola.com")
assert u1 == "pavel_test_com"
assert u2 == "pavel_groupon_com"
assert u3 == "pavel_keboola_com"
assert len({u1, u2, u3}) == 3 # all unique
def test_email_normalized_to_lowercase(self):
assert get_username_from_email("Admin@Test.COM") == "admin_test_com"
def test_empty_email(self):
assert get_username_from_email("") == ""
def test_no_at_sign(self):
assert get_username_from_email("notanemail") == ""
def test_none_email(self):
assert get_username_from_email(None) == ""
def test_reserved_names_avoided(self):
"""Usernames from emails should NOT collide with reserved names."""
# admin@anything.com -> admin_anything_com (not 'admin')
username = get_username_from_email("admin@company.com")
assert username not in RESERVED_USERNAMES
assert username == "admin_company_com"
def test_test_email_not_reserved(self):
username = get_username_from_email("test@company.com")
assert username not in RESERVED_USERNAMES
def test_subdomain_email(self):
assert get_username_from_email("user@mail.acme.co.uk") == "user_mail_acme_co_uk"
class TestGetWebappUsername:
"""Test get_webapp_username() with configurable prefix and domain stripping."""
def test_prefix_and_strip_domain(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "foundry_")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username("e.psimecek@groupon.com") == "foundry_e_psimecek"
def test_prefix_no_strip(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "foundry_")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", False)
assert get_webapp_username("e.psimecek@groupon.com") == "foundry_e_psimecek_groupon_com"
def test_no_prefix_strip_domain(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username("e.psimecek@groupon.com") == "e_psimecek"
def test_legacy_no_options(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", False)
assert get_webapp_username("e.psimecek@groupon.com") == "e_psimecek_groupon_com"
def test_empty_email(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "foundry_")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username("") == ""
def test_none_email(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "foundry_")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username(None) == ""
def test_no_at_sign(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "foundry_")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username("notanemail") == ""
def test_uppercase_normalized(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "app_")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username("John.Doe@ACME.COM") == "app_john_doe"
def test_strip_domain_multiple_dots(self, monkeypatch):
monkeypatch.setattr(user_service_module, "_USERNAME_PREFIX", "")
monkeypatch.setattr(user_service_module, "_USERNAME_STRIP_DOMAIN", True)
assert get_webapp_username("first.middle.last@company.com") == "first_middle_last"