review feedback: error checking, timeouts, add .gov if missing

This commit is contained in:
Neil Martinsen-Burrell 2022-11-01 10:34:48 -05:00
parent 5d9a469ebd
commit 61b4cbf10b
No known key found for this signature in database
GPG key ID: 6A3C818CC10D0184
3 changed files with 77 additions and 14 deletions

View file

@ -2,11 +2,14 @@
import json
from django.core.exceptions import BadRequest
from django.contrib.auth import get_user_model
from django.test import TestCase, RequestFactory
from ..views import available, _domains, in_domains
API_BASE_PATH = "/api/v1/available/"
class AvailableViewTest(TestCase):
@ -17,7 +20,7 @@ class AvailableViewTest(TestCase):
self.factory = RequestFactory()
def test_view_function(self):
request = self.factory.get("/available/test.gov")
request = self.factory.get(API_BASE_PATH + "test.gov")
request.user = self.user
response = available(request, domain="test.gov")
# has the right text in it
@ -27,7 +30,11 @@ class AvailableViewTest(TestCase):
self.assertIn("available", response_object)
def test_domain_list(self):
"""Test the domain list that is returned."""
"""Test the domain list that is returned from Github.
This does not mock out the external file, it is actually fetched from
the internet.
"""
domains = _domains()
self.assertIn("gsa.gov", domains)
# entries are all lowercase so GSA.GOV is not in the set
@ -42,23 +49,44 @@ class AvailableViewTest(TestCase):
self.assertTrue(in_domains("GSA.GOV"))
# This domain should not have been registered
self.assertFalse(in_domains("igorville.gov"))
# all the entries have dots
self.assertFalse(in_domains("gsa"))
def test_in_domains_dotgov(self):
"""Domain searches work without trailing .gov"""
self.assertTrue(in_domains("gsa"))
# input is lowercased so GSA.GOV should be found
self.assertTrue(in_domains("GSA"))
# This domain should not have been registered
self.assertFalse(in_domains("igorville"))
def test_not_available_domain(self):
"""gsa.gov is not available"""
request = self.factory.get("/available/gsa.gov")
request = self.factory.get(API_BASE_PATH + "gsa.gov")
request.user = self.user
response = available(request, domain="gsa.gov")
self.assertFalse(json.loads(response.content)["available"])
def test_available_domain(self):
"""igorville.gov is still available"""
request = self.factory.get("/available/igorville.gov")
request = self.factory.get(API_BASE_PATH + "igorville.gov")
request.user = self.user
response = available(request, domain="igorville.gov")
self.assertTrue(json.loads(response.content)["available"])
def test_available_domain_dotgov(self):
"""igorville.gov is still available even without the .gov suffix"""
request = self.factory.get(API_BASE_PATH + "igorville")
request.user = self.user
response = available(request, domain="igorville")
self.assertTrue(json.loads(response.content)["available"])
def test_error_handling(self):
"""Calling with bad strings raises an error."""
bad_string = "blah!;"
request = self.factory.get(API_BASE_PATH + bad_string)
request.user = self.user
with self.assertRaisesMessage(BadRequest, "Invalid"):
available(request, domain=bad_string)
class AvailableAPITest(TestCase):
@ -69,12 +97,17 @@ class AvailableAPITest(TestCase):
def test_available_get(self):
self.client.force_login(self.user)
response = self.client.get("/available/nonsense")
response = self.client.get(API_BASE_PATH + "nonsense")
self.assertContains(response, "available")
response_object = json.loads(response.content)
self.assertIn("available", response_object)
def test_available_post(self):
"""Cannot post to the /available/ API endpoint."""
response = self.client.post("/available/nonsense")
response = self.client.post(API_BASE_PATH + "nonsense")
self.assertEqual(response.status_code, 405)
def test_available_bad_input(self):
self.client.force_login(self.user)
response = self.client.get(API_BASE_PATH + "blah!;")
self.assertEqual(response.status_code, 400)