new and refined tests for dashboard app; home iterates list w. django templating; views refined for redirect after post request

This commit is contained in:
Disco DeDisco
2025-12-31 14:39:26 -05:00
parent 1950eaa12e
commit c318a526fc
3 changed files with 30 additions and 17 deletions

View File

@@ -11,19 +11,34 @@ class HomePageTest(TestCase):
self.assertContains(response, '<form method="POST">') self.assertContains(response, '<form method="POST">')
self.assertContains(response, '<input name="item-text"') self.assertContains(response, '<input name="item-text"')
def test_displays_all_list_items(self):
# Given/Arrange
Item.objects.create(text='itemey 1')
Item.objects.create(text='itemey 2')
# When/Act
response = self.client.get('/')
# Then/Assert
self.assertContains(response, 'itemey 1')
self.assertContains(response, 'itemey 2')
def test_can_save_a_POST_request(self): def test_can_save_a_POST_request(self):
response = self.client.post('/', data={'item_text': 'A new dashboard item'}) self. client.post('/', data={'item_text': "A new list item"})
self.assertEqual(Item.objects.count(), 1) self.assertEqual(Item.objects.count(), 1)
new_item = Item.objects.first() new_item = Item.objects.first()
self.assertEqual(new_item.text, 'A new dashboard item') self.assertEqual(new_item.text, 'A new list item')
self.assertContains(response, 'A new dashboard item')
self.assertTemplateUsed(response, 'apps/dashboard/home.html')
def test_redirects_after_POST(self):
response = self.client.post('/', data={'item_text': 'A new list item'})
self.assertRedirects(response, '/')
def test_only_saves_items_when_necessary(self):
self.client.get('/')
self.assertEqual(Item.objects.count(), 0)
class ItemModelTest(TestCase): class ItemModelTest(TestCase):
def test_saving_and_retrieving_items(self): def test_saving_and_retrieving_items(self):
first_item = Item() first_item = Item()
first_item.text = "The first (ever) dashboard item" first_item.text = "The first (ever) list item"
first_item.save() first_item.save()
second_item = Item() second_item = Item()
@@ -35,6 +50,6 @@ class ItemModelTest(TestCase):
first_saved_item = saved_items[0] first_saved_item = saved_items[0]
second_saved_item = saved_items[1] second_saved_item = saved_items[1]
self.assertEqual(first_saved_item.text, "The first (ever) dashboard item") self.assertEqual(first_saved_item.text, "The first (ever) list item")
self.assertEqual(second_saved_item.text, "A sequel somehow better than the first") self.assertEqual(second_saved_item.text, "A sequel somehow better than the first")

View File

@@ -1,14 +1,10 @@
from django.http import HttpResponse from django.shortcuts import redirect, render
from django.shortcuts import render
from .models import Item from .models import Item
def home_page(request): def home_page(request):
item = Item() if request.method == 'POST':
item.text = request.POST.get('item_text', '') Item.objects.create(text=request.POST['item_text'])
item.save() return redirect('/')
return render( items = Item.objects.all()
request, return render(request, 'apps/dashboard/home.html', {'items': items})
'apps/dashboard/home.html',
{'new_item_text': request.POST.get('item_text', '')},
)

View File

@@ -9,7 +9,9 @@
{% csrf_token %} {% csrf_token %}
</form> </form>
<table id="id-list-table"> <table id="id-list-table">
<tr><td>1: {{ new_item_text }}</td></tr> {% for item in items %}
<tr><td>1: {{ item.text }}</td></tr>
{% endfor %}
</table> </table>
</body> </body>
</html> </html>