now enforcing model validation in list FBV; all UTs & FTs passing

This commit is contained in:
Disco DeDisco
2026-01-19 19:09:11 -05:00
parent af3e20faef
commit 91ede73e89
4 changed files with 44 additions and 25 deletions

View File

@@ -16,6 +16,30 @@ class HomePageTest(TestCase):
inputs = form.cssselect('input') inputs = form.cssselect('input')
self.assertIn('item_text', [input.get('name') for input in inputs]) self.assertIn('item_text', [input.get('name') for input in inputs])
class NewListTest(TestCase):
def test_can_save_a_POST_request(self):
self. client.post('/apps/dashboard/newlist', data={'item_text': 'A new list item'})
self.assertEqual(Item.objects.count(), 1)
new_item = Item.objects.get()
self.assertEqual(new_item.text, 'A new list item')
def test_redirects_after_POST(self):
response = self.client.post('/apps/dashboard/newlist', data={'item_text': 'A new list item'})
new_list = List.objects.get()
self.assertRedirects(response, f'/apps/dashboard/{new_list.id}/')
def test_validation_errors_are_sent_back_to_home_page_template(self):
response = self.client.post("/apps/dashboard/newlist", data={"item_text": ""})
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "apps/dashboard/home.html")
expected_error = html.escape("You can't have an empty list item")
self.assertContains(response, expected_error)
def test_invalid_list_items_never_save(self):
self.client.post("/apps/dashboard/newlist", data={"item_text": ""})
self.assertEqual(List.objects.count(), 0)
self.assertEqual(Item.objects.count(), 0)
class DashViewTest(TestCase): class DashViewTest(TestCase):
def test_uses_list_template(self): def test_uses_list_template(self):
mylist = List.objects.create() mylist = List.objects.create()
@@ -70,26 +94,13 @@ class DashViewTest(TestCase):
self.assertRedirects(response, f'/apps/dashboard/{correct_list.id}/') self.assertRedirects(response, f'/apps/dashboard/{correct_list.id}/')
class NewListTest(TestCase): def test_validation_errors_end_up_on_lists_page(self):
def test_can_save_a_POST_request(self): list_ = List.objects.create()
self. client.post('/apps/dashboard/newlist', data={'item_text': 'A new list item'}) response = self.client.post(
self.assertEqual(Item.objects.count(), 1) f"/apps/dashboard/{list_.id}/",
new_item = Item.objects.get() data={"item_text": ""},
self.assertEqual(new_item.text, 'A new list item') )
def test_redirects_after_POST(self):
response = self.client.post('/apps/dashboard/newlist', data={'item_text': 'A new list item'})
new_list = List.objects.get()
self.assertRedirects(response, f'/apps/dashboard/{new_list.id}/')
def test_validation_errors_are_sent_back_to_home_page_template(self):
response = self.client.post("/apps/dashboard/newlist", data={"item_text": ""})
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "apps/dashboard/home.html") self.assertTemplateUsed(response, "apps/dashboard/list.html")
expected_error = html.escape("You can't have an empty list item") expected_error = html.escape("You can't have an empty list item")
self.assertContains(response, expected_error) self.assertContains(response, expected_error)
def test_invalid_list_items_never_save(self):
self.client.post("/apps/dashboard/newlist", data={"item_text": ""})
self.assertEqual(List.objects.count(), 0)
self.assertEqual(Item.objects.count(), 0)

View File

@@ -19,7 +19,16 @@ def new_list(request):
def view_list(request, list_id): def view_list(request, list_id):
our_list = List.objects.get(id=list_id) our_list = List.objects.get(id=list_id)
error = None
if request.method == "POST": if request.method == "POST":
Item.objects.create(text=request.POST['item_text'], list=our_list) try:
return redirect(f'/apps/dashboard/{our_list.id}/') item = Item(text=request.POST['item_text'], list=our_list)
return render(request, 'apps/dashboard/list.html', {'list': our_list}) item.full_clean()
item.save()
return redirect(f'/apps/dashboard/{our_list.id}/')
except ValidationError:
error = "You can't have an empty list item"
return render(request, 'apps/dashboard/list.html', {'list': our_list, "error": error})

View File

@@ -8,7 +8,7 @@ class LayoutAndStylingTest(FunctionalTest):
self.browser.get(self.live_server_url) self.browser.get(self.live_server_url)
self.browser.set_window_size(1024, 768) self.browser.set_window_size(1024, 768)
print("Viewport width:", self.browser.execute_script("return window.innerWidth")) # print("Viewport width:", self.browser.execute_script("return window.innerWidth"))
inputbox = self.browser.find_element(By.ID, 'id-new-item') inputbox = self.browser.find_element(By.ID, 'id-new-item')
self.assertAlmostEqual( self.assertAlmostEqual(

View File

@@ -18,7 +18,6 @@ class ItemValidationTest(FunctionalTest):
self.browser.find_element(By.ID, "id-new-item").send_keys("Purchase milk") self.browser.find_element(By.ID, "id-new-item").send_keys("Purchase milk")
self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER) self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER)
return # TO-DO: re-enable rest of test
self.wait_for_row_in_list_table("1. Purchase milk") self.wait_for_row_in_list_table("1. Purchase milk")
self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER) self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER)