diff --git a/src/alpine_bits_python/alpine_bits_helpers.py b/src/alpine_bits_python/alpine_bits_helpers.py index a8a71de..0a15b04 100644 --- a/src/alpine_bits_python/alpine_bits_helpers.py +++ b/src/alpine_bits_python/alpine_bits_helpers.py @@ -622,26 +622,12 @@ def create_res_notif_push_message( def _validate_and_repair_email(email: str | None) -> str | None: - """Validate and repair email addresses with common typos. - - Attempts to fix trailing digits in TLDs (e.g., .de1 -> .de) - before validation. If the email is still invalid, returns None - instead of raising an exception. - - Args: - email: Email address to validate and repair - - Returns: - Normalized email address or None if invalid - """ if email is None: return None - - # Remove trailing digits from TLD (e.g., .de1 -> .de, .com2 -> .com) - # This matches a dot followed by letters, then trailing digits at the end - email = re.sub(r'(\.[a-zA-Z]+)\d+$', r'\1', email) - try: + # remove numbers from top-level domain (TLD) if any + email = re.sub(r"\.\d+", ".", email) + email_info = validate_email(email) except EmailNotValidError as e: _LOGGER.warning("invalid email address: %s", e) @@ -659,13 +645,16 @@ def _process_single_reservation( [(customer.phone, PhoneTechType.MOBILE)] if customer.phone is not None else [] ) + # Validate and repair email address + email = _validate_and_repair_email(customer.email_address) + customer_data = CustomerData( given_name=customer.given_name, surname=customer.surname, name_prefix=customer.name_prefix, name_title=customer.name_title, phone_numbers=phone_numbers, - email_address=customer.email_address, + email_address=email, email_newsletter=customer.email_newsletter, address_line=customer.address_line, city_name=customer.city_name, diff --git a/tests/test_alpine_bits_server_read.py b/tests/test_alpine_bits_server_read.py index cd02fbe..4f193ed 100644 --- a/tests/test_alpine_bits_server_read.py +++ b/tests/test_alpine_bits_server_read.py @@ -66,7 +66,7 @@ def sample_customer(): contact_id="CONTACT-12345", name_prefix="Mr.", name_title="Jr.", - email_address="john.doe@example.com", + email_address="john.doe@gmail.com", phone="+1234567890", email_newsletter=True, address_line="123 Main Street", @@ -378,7 +378,7 @@ class TestXMLParsing: # Verify customer data is present assert "John" in xml_output assert "Doe" in xml_output - assert "john.doe@example.com" in xml_output + assert "john.doe@gmail.com" in xml_output # Verify reservation data is present # assert "RES-2024-001" in xml_output