From 65813f448e5eeb923cb9c7ae6b06532b6759bd9d Mon Sep 17 00:00:00 2001 From: Alysia Broddrick Date: Wed, 21 Feb 2024 16:51:57 -0800 Subject: [PATCH] handle 500 error with empty string --- src/registrar/models/domain.py | 13 ++++++++++-- src/registrar/models/utility/domain_helper.py | 11 +++++----- src/registrar/tests/test_models_domain.py | 20 ++++++++++++++----- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/registrar/models/domain.py b/src/registrar/models/domain.py index 7ebe3dc34..d7e4a9471 100644 --- a/src/registrar/models/domain.py +++ b/src/registrar/models/domain.py @@ -13,6 +13,7 @@ from typing import Any from registrar.models.host import Host from registrar.models.host_ip import HostIP from registrar.utility.enums import DefaultEmail +from registrar.utility import errors from registrar.utility.errors import ( ActionNotAllowed, @@ -192,9 +193,17 @@ class Domain(TimeStampedModel, DomainHelper): @classmethod def available(cls, domain: str) -> bool: - """Check if a domain is available.""" + """Check if a domain is available. + This is called by the availablility api and + is called in the validate function on the request/domain page + + throws- RegistryError or InvalidDomainError""" if not cls.string_could_be_domain(domain): - raise ValueError("Not a valid domain: %s" % str(domain)) + logger.warning("Not a valid domain: %s" % str(domain)) + # throw invalid domain error so that it can be caught in + # validate_and_handle_errors in domain_helper + raise errors.InvalidDomainError() + domain_name = domain.lower() req = commands.CheckDomain([domain_name]) return registry.send(req, cleaned=True).res_data[0].avail diff --git a/src/registrar/models/utility/domain_helper.py b/src/registrar/models/utility/domain_helper.py index 9e3559676..8b9391add 100644 --- a/src/registrar/models/utility/domain_helper.py +++ b/src/registrar/models/utility/domain_helper.py @@ -33,11 +33,12 @@ class DomainHelper: # Split into pieces for the linter domain = cls._validate_domain_string(domain, blank_ok) - try: - if not check_domain_available(domain): - raise errors.DomainUnavailableError() - except RegistryError as err: - raise errors.RegistrySystemError() from err + if domain != "": + try: + if not check_domain_available(domain): + raise errors.DomainUnavailableError() + except RegistryError as err: + raise errors.RegistrySystemError() from err return domain @staticmethod diff --git a/src/registrar/tests/test_models_domain.py b/src/registrar/tests/test_models_domain.py index 1c4d2521e..fbf47a745 100644 --- a/src/registrar/tests/test_models_domain.py +++ b/src/registrar/tests/test_models_domain.py @@ -20,7 +20,7 @@ from registrar.models.user import User from registrar.utility.errors import ActionNotAllowed, NameserverError from registrar.models.utility.contact_error import ContactError, ContactErrorCodes - +from registrar.utility import errors from django_fsm import TransitionNotAllowed # type: ignore from epplibwrapper import ( @@ -502,16 +502,26 @@ class TestDomainAvailable(MockEppLib): self.assertFalse(available) patcher.stop() - def test_domain_available_with_value_error(self): + def test_domain_available_with_invalid_error(self): """ Scenario: Testing whether an invalid domain is available - Should throw ValueError + Should throw InvalidDomainError - Validate ValueError is raised + Validate InvalidDomainError is raised """ - with self.assertRaises(ValueError): + with self.assertRaises(errors.InvalidDomainError()): Domain.available("invalid-string") + def test_domain_available_with_empty_string(self): + """ + Scenario: Testing whether an empty string domain name is available + Should throw InvalidDomainError + + Validate InvalidDomainError is raised + """ + with self.assertRaises(errors.InvalidDomainError()): + Domain.available("") + def test_domain_available_unsuccessful(self): """ Scenario: Testing behavior when registry raises a RegistryError