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:
@@ -11,19 +11,34 @@ class HomePageTest(TestCase):
|
||||
self.assertContains(response, '<form method="POST">')
|
||||
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):
|
||||
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)
|
||||
new_item = Item.objects.first()
|
||||
self.assertEqual(new_item.text, 'A new dashboard item')
|
||||
self.assertContains(response, 'A new dashboard item')
|
||||
self.assertTemplateUsed(response, 'apps/dashboard/home.html')
|
||||
self.assertEqual(new_item.text, 'A new list item')
|
||||
|
||||
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):
|
||||
def test_saving_and_retrieving_items(self):
|
||||
first_item = Item()
|
||||
first_item.text = "The first (ever) dashboard item"
|
||||
first_item.text = "The first (ever) list item"
|
||||
first_item.save()
|
||||
|
||||
second_item = Item()
|
||||
@@ -35,6 +50,6 @@ class ItemModelTest(TestCase):
|
||||
|
||||
first_saved_item = saved_items[0]
|
||||
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")
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import redirect, render
|
||||
from .models import Item
|
||||
|
||||
def home_page(request):
|
||||
item = Item()
|
||||
item.text = request.POST.get('item_text', '')
|
||||
item.save()
|
||||
if request.method == 'POST':
|
||||
Item.objects.create(text=request.POST['item_text'])
|
||||
return redirect('/')
|
||||
|
||||
return render(
|
||||
request,
|
||||
'apps/dashboard/home.html',
|
||||
{'new_item_text': request.POST.get('item_text', '')},
|
||||
)
|
||||
items = Item.objects.all()
|
||||
return render(request, 'apps/dashboard/home.html', {'items': items})
|
||||
@@ -9,7 +9,9 @@
|
||||
{% csrf_token %}
|
||||
</form>
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user