diff --git a/homepage/functional_tests/tests.py b/homepage/functional_tests/tests.py index 342322160cacdb4ec76222d354d8612f04747cb7..fca4b8f24eee3de257388b1acacd90735e09a308 100644 --- a/homepage/functional_tests/tests.py +++ b/homepage/functional_tests/tests.py @@ -40,7 +40,7 @@ class NewVisitorTest(FunctionalTest): # to check out its homepage self.login_first() - time.sleep(2) + # She notices the page title and header mention to-do lists self.assertIn('To-Do list', self.browser.title) @@ -59,7 +59,7 @@ class NewVisitorTest(FunctionalTest): # "1: Buy peacock feathers" as an item in a to-do list table inputbox.send_keys(Keys.ENTER) - time.sleep(2) + table = self.browser.find_element_by_id('id_list_table') rows = table.find_elements_by_tag_name('tr') @@ -72,7 +72,7 @@ class NewVisitorTest(FunctionalTest): inputbox.send_keys('Use peacock feathers to make a fly') inputbox.send_keys(Keys.ENTER) - time.sleep(2) + # The page updates again, and now shows both items on her list table = self.browser.find_element_by_id('id_list_table') @@ -88,7 +88,7 @@ class NewVisitorTest(FunctionalTest): # Satisfied, she goes back to sleep - time.sleep(2) + @unittest.skip("deprecated : not used anymore since / is list") def test_go_to_todo_from_homepage(self): @@ -122,6 +122,41 @@ class NewVisitorTest(FunctionalTest): delta=10 ) + def test_delete_todo_from_list(self): + self.login_first() + + self.assertIn('To-Do list', self.browser.title) + header_text = self.browser.find_element_by_tag_name('h1').text + self.assertIn('To-Do list', header_text) + + inputbox = self.browser.find_element_by_id('id_new_item') + + inputbox.send_keys('Buy peacock feathers') + + inputbox.send_keys(Keys.ENTER) + + + + table = self.browser.find_element_by_id('id_list_table') + rows = table.find_elements_by_tag_name('tr') + self.check_for_row_in_list_table('1: Buy peacock feathers') + + inputbox = self.browser.find_element_by_id('id_new_item') + inputbox.send_keys('Use peacock feathers to make a fly') + inputbox.send_keys(Keys.ENTER) + + + + self.browser.find_element_by_id('delete-button').click() + + table = self.browser.find_element_by_id('id_list_table') + try: + rows = table.find_elements_by_tag_name('tr') + self.check_for_row_in_list_table('1: Buy peacock feathers') + self.fail("item is not deleted") + except AssertionError: + pass + if __name__ == "__main__": unittest.main(warnings="ignore") \ No newline at end of file diff --git a/homepage/homepage/urls.py b/homepage/homepage/urls.py index 930078cae27973351762d5b5008036627c7ed0e8..cf7baa10f9890f193b4c7061cfec0b586173b4ff 100644 --- a/homepage/homepage/urls.py +++ b/homepage/homepage/urls.py @@ -16,13 +16,14 @@ Including another URLconf from django.contrib import admin from django.urls import path, include from home.views import index -from todo.views import todo +from todo.views import todo, delete_todo from django.views.generic import RedirectView urlpatterns = [ #path('admin/', admin.site.urls), #path("", index, name="index"), path("", todo, name="index"), + path("delete/", delete_todo, name="delete_todo"), #path("todo/", todo, name="todo"), path("accounts/", include('accounts.urls')), ] diff --git a/homepage/todo/models.py b/homepage/todo/models.py index 02af58bff48e46210a9d2899b4a8aa4692c1a357..fa74c6ca1643cfcd49de5c58da1bd23fa143ce03 100644 --- a/homepage/todo/models.py +++ b/homepage/todo/models.py @@ -1,5 +1,7 @@ from django.db import models +import uuid # Create your models here. class Item(models.Model): - text = models.TextField(default="") \ No newline at end of file + text = models.TextField(default="") + uid = models.CharField(default=uuid.uuid4, max_length=40) \ No newline at end of file diff --git a/homepage/todo/templates/base.html b/homepage/todo/templates/base.html index 070557b69f3fa1355001553370118756a6a677a5..ddb3eb8079b3593cd0f070b7a9d98b37b55f8956 100644 --- a/homepage/todo/templates/base.html +++ b/homepage/todo/templates/base.html @@ -50,8 +50,8 @@ <input name="item_text" id="id_new_item" class="form-control input-lg" placeholder="Enter a to-do item" /> - {% csrf_token %} - </form> + {% csrf_token %} + </form> </div> </div> <div class="col-md-6 col-md-offset-3"> diff --git a/homepage/todo/templates/todo.html b/homepage/todo/templates/todo.html index b1b37d976bfb2ee1324be6a96bc85ffbb67b0753..3dbb25237318909d73fb06ccc2727b7f5e8a4c23 100644 --- a/homepage/todo/templates/todo.html +++ b/homepage/todo/templates/todo.html @@ -9,7 +9,16 @@ {% block form_action %}{% endblock %} {% block table %} - <table id="id_list_table" class="table"> + {% if items %} + <div class="text-center"> + <form method="POST" action="delete/" style="margin-top: 10px;"> + <input name="delete-button" id="delete-button" + type="submit" value="Delete All"/> + {% csrf_token %} + </form> + </div> + {% endif %} + <table id="id_list_table" class="table"> {% for item in items %} <tr><td>{{ forloop.counter }}: {{ item.text }}</td></tr> {% endfor %} diff --git a/homepage/todo/tests.py b/homepage/todo/tests.py index 683aa22c7bab4d09bac34ffd939704a12ea3d334..96c875f7b3c56bd617671815f752a2bf30ba8f68 100644 --- a/homepage/todo/tests.py +++ b/homepage/todo/tests.py @@ -2,7 +2,7 @@ from django.test import TestCase from django.urls import reverse from django.http import HttpRequest from django.template.loader import render_to_string -from todo.views import todo +from todo.views import todo, delete_todo from todo.models import Item # Create your tests here. @@ -77,6 +77,16 @@ class TodoPageTests(TestCase): self.assertEqual(100, Item.objects.count()) #self.assertIn("<p class=\"comment\">oh tidak</p>", response.content.decode()) + def test_todo_page_delete_all_list_items(self): + Item.objects.create(text='itemey 1') + Item.objects.create(text='itemey 2') + request = HttpRequest() + request.method = "POST" + response = delete_todo(request) + + self.assertEqual(0, Item.objects.count()) + + class ItemModelTest(TestCase): def test_saving_and_retrieving_items(self): first_item = Item() diff --git a/homepage/todo/views.py b/homepage/todo/views.py index 6d370e31f7b8c37f1b38ead93a1f1d84cc512757..c53752267eea86d60990cd794fffee1bdc747518 100644 --- a/homepage/todo/views.py +++ b/homepage/todo/views.py @@ -1,17 +1,23 @@ from django.shortcuts import render, redirect from django.http import HttpResponse from todo.models import Item +import uuid # Create your views here. def todo(request): if request.method == 'POST': - Item.objects.create(text=request.POST['item_text']) + Item.objects.create(uid=uuid.uuid4 ,text=request.POST.get('item_text')) return redirect('/') items = Item.objects.all() comment = get_custom_comment(items) return render(request, 'todo.html', {'items': items, 'comment': comment}) +def delete_todo(request): + if request.method == "POST": + Item.objects.all().delete() + return redirect('/') + def get_custom_comment(items): if(items.count() == 0): return "yey, waktunya berlibur"