diff --git a/lists/__pycache__/models.cpython-38.pyc b/lists/__pycache__/models.cpython-38.pyc index a36af7d79607bf711539b1f63d05c14c21d65427..c6edec9e458fb35da70716cf2cd0e239a189afce 100644 Binary files a/lists/__pycache__/models.cpython-38.pyc and b/lists/__pycache__/models.cpython-38.pyc differ diff --git a/lists/__pycache__/tests.cpython-38.pyc b/lists/__pycache__/tests.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d67a369ec4ecd427b1185f7879b5398087f57541 Binary files /dev/null and b/lists/__pycache__/tests.cpython-38.pyc differ diff --git a/lists/__pycache__/views.cpython-38.pyc b/lists/__pycache__/views.cpython-38.pyc index f33d14f48356ee6888215a7e01e0da0b90af4ae5..b16b805213660d482cf16968de9505115f0567c5 100644 Binary files a/lists/__pycache__/views.cpython-38.pyc and b/lists/__pycache__/views.cpython-38.pyc differ diff --git a/lists/migrations/0001_initial.py b/lists/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..e1f87d1e6bf4a66268887523749edb05c7010496 --- /dev/null +++ b/lists/migrations/0001_initial.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.5 on 2019-09-26 15:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Item', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + ), + ] diff --git a/lists/migrations/0002_item_text.py b/lists/migrations/0002_item_text.py new file mode 100644 index 0000000000000000000000000000000000000000..70b573fed753a37f81841a60cd8b3628bbb06cd7 --- /dev/null +++ b/lists/migrations/0002_item_text.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.5 on 2019-09-26 15:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('lists', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='item', + name='text', + field=models.TextField(default=''), + ), + ] diff --git a/lists/migrations/__pycache__/0001_initial.cpython-38.pyc b/lists/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee1e90758f19fbaf9bae9717e4f57d55e1603659 Binary files /dev/null and b/lists/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/lists/migrations/__pycache__/0002_item_text.cpython-38.pyc b/lists/migrations/__pycache__/0002_item_text.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..152ed7efbf0c976468572716f6feb320f331742d Binary files /dev/null and b/lists/migrations/__pycache__/0002_item_text.cpython-38.pyc differ diff --git a/lists/models.py b/lists/models.py index 71a836239075aa6e6e4ecb700e9c42c95c022d91..02be5df811fa8de7051030077d725a8ef9e02d5b 100644 --- a/lists/models.py +++ b/lists/models.py @@ -1,3 +1,4 @@ from django.db import models -# Create your models here. +class Item(models.Model): + text = models.TextField(default='') \ No newline at end of file diff --git a/lists/templates/home.html b/lists/templates/home.html index 3bedb83ea7af2a78b46d3d96af990e14caf59eba..9ad5489d7e4c6cf1200aca02faa96fe6787084a4 100644 --- a/lists/templates/home.html +++ b/lists/templates/home.html @@ -1,5 +1,18 @@ <html> <title>To-Do lists</title> - <p>Alvin Raihan</p> - <h1>To-Do</h1> + <body> + <p>Alvin Raihan</p> + <h1>To-Do</h1> + <body> + <h1>Your To-Do list</h1> + <form method="POST"> + <input name="item_text" id="id_new_item" placeholder="Enter a to-do item" /> + {% csrf_token %} + </form> + <table id="id_list_table"> + {% for item in items %} + <tr><td>{{ forloop.counter }}: {{ item.text }}</td></tr> + {% endfor %} + </table> + </body> </html> \ No newline at end of file diff --git a/lists/tests.py b/lists/tests.py index 75346f61505161733e3778a0269702cef84f8f0e..9fd32d32d51337835c583309d7e81963160692b7 100644 --- a/lists/tests.py +++ b/lists/tests.py @@ -3,6 +3,7 @@ from django.test import TestCase from django.http import HttpRequest from lists.views import home_page +from lists.models import Item class HomePageTest(TestCase): @@ -10,12 +11,52 @@ class HomePageTest(TestCase): def test_root_url_resolves_to_home_page_view(self): found = resolve('/') self.assertEqual(found.func, home_page) - - def test_home_page_returns_correct_html(self): request = HttpRequest() response = home_page(request) html = response.content.decode('utf8') self.assertTrue(html.startswith('<html>')) self.assertIn('<title>To-Do lists</title>', html) - self.assertTrue(html.endswith('</html>')) \ No newline at end of file + self.assertTrue(html.endswith('</html>')) + def test_uses_home_template(self): + response = self.client.get('/') + self.assertTemplateUsed(response, 'home.html') + def test_can_save_a_POST_request(self): + response = 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 list item') + self.assertEqual(response.status_code, 302) + self.assertEqual(response['location'], '/') + 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) list item' + first_item.save() + + second_item = Item() + second_item.text = 'Item the second' + second_item.save() + + saved_items = Item.objects.all() + self.assertEqual(saved_items.count(), 2) + + first_saved_item = saved_items[0] + second_saved_item = saved_items[1] + self.assertEqual(first_saved_item.text, 'The first (ever) list item') + self.assertEqual(second_saved_item.text, 'Item the second') + + def test_can_save_a_POST_request(self): + response = 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 list item') + + self.assertIn('A new list item', response.content.decode()) + self.assertTemplateUsed(response, 'home.html') \ No newline at end of file diff --git a/lists/views.py b/lists/views.py index e90445a5b03f975c07a64376b3bd5a0fb41e1c51..36b4b4a754339487436ebc0d84fc695d2bee209d 100644 --- a/lists/views.py +++ b/lists/views.py @@ -1,4 +1,11 @@ -from django.shortcuts import render +from django.http import HttpResponse +from django.shortcuts import redirect,render +from lists.models import Item def home_page(request): - return render(request, 'home.html') \ No newline at end of file + if request.method == 'POST': + Item.objects.create(text=request.POST['item_text']) + return redirect('/') + + items = Item.objects.all() + return render(request, 'home.html', {'items': items}) \ No newline at end of file