now enforcing model validation in list FBV; all UTs & FTs passing
This commit is contained in:
@@ -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)
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
item = Item(text=request.POST['item_text'], list=our_list)
|
||||||
|
item.full_clean()
|
||||||
|
item.save()
|
||||||
return redirect(f'/apps/dashboard/{our_list.id}/')
|
return redirect(f'/apps/dashboard/{our_list.id}/')
|
||||||
return render(request, 'apps/dashboard/list.html', {'list': our_list})
|
except ValidationError:
|
||||||
|
error = "You can't have an empty list item"
|
||||||
|
|
||||||
|
return render(request, 'apps/dashboard/list.html', {'list': our_list, "error": error})
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user