From aca6abff0b37c618bd5c82549e9fbe342c215a10 Mon Sep 17 00:00:00 2001 From: Yumna Pratista <yumnanaruto@gmail.com> Date: Mon, 14 Oct 2019 14:25:08 +0700 Subject: [PATCH] Split out unit tests into two files --- .../tests/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 195 bytes .../tests/__pycache__/test_all.cpython-37.pyc | Bin 0 -> 4938 bytes .../__pycache__/test_models.cpython-37.pyc | Bin 0 -> 1088 bytes .../__pycache__/test_views.cpython-37.pyc | Bin 0 -> 4199 bytes app_homepage/tests/test_all.py | 284 +++++++++--------- app_homepage/tests/test_models.py | 33 ++ app_homepage/tests/test_views.py | 114 +++++++ 7 files changed, 289 insertions(+), 142 deletions(-) create mode 100644 app_homepage/tests/__pycache__/__init__.cpython-37.pyc create mode 100644 app_homepage/tests/__pycache__/test_all.cpython-37.pyc create mode 100644 app_homepage/tests/__pycache__/test_models.cpython-37.pyc create mode 100644 app_homepage/tests/__pycache__/test_views.cpython-37.pyc create mode 100644 app_homepage/tests/test_models.py create mode 100644 app_homepage/tests/test_views.py diff --git a/app_homepage/tests/__pycache__/__init__.cpython-37.pyc b/app_homepage/tests/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9deb522eeccc60f96bb0096094b6684200b86e89 GIT binary patch literal 195 zcmZ?b<>g{vU|`TvToMbSAA<-OW@KPsaA06yC}v?`U`SyIX3%8xTggxa5=Icea$Kxp zyi0R36Ek9hQ*%>`OHzvz%wqz41AJm!D^iP+GmBFd3}Xz<49qNy%`DB$bPI|SlS?v_ zQ;o0*#v~RL#AoE^rWPcor^b||7MB#q#K&jmWtPOp>lIYq;;_lhPbtkwwF9~0GsvX? Dc-k@E literal 0 HcmV?d00001 diff --git a/app_homepage/tests/__pycache__/test_all.cpython-37.pyc b/app_homepage/tests/__pycache__/test_all.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e30123c9d4cd015ce4b315dc788bb554d468d42 GIT binary patch literal 4938 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 ZV8x)i8r1LsVF5-SW&u?JSpjhYJ^-s2jK=@~ literal 0 HcmV?d00001 diff --git a/app_homepage/tests/__pycache__/test_models.cpython-37.pyc b/app_homepage/tests/__pycache__/test_models.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b724c5f438f8a4cc8839531234cfba4de3f14631 GIT binary patch literal 1088 zcmZ?b<>g{vU|@(-S`xdSnStRkhy%kc3=9ko3=9m#1`G@gDGVu$ISjdsQH+crHd78$ zE^`!fE=v>(BZE6b3Udle3quM^Dq}Nq6l)4=FoP!BOOQF5jJG&KQj1HR6N^(dnQpOo zmZaw1V)4l=E=dMS!!Q%fDiH<-hE#?q#uSDqrWD2$rWS@M<`m{&22GY*A|PFkc_|<x zeDhOMb3o=MGeV8vU|?VXIoKKG;C&1X3?&TB47H3kj0+eSGB7ffFf}vOGNmxqFvT<1 zfJl}aCL|f=6s8(xuncoNOARwrh9Qe}0oy``T9z7y1?)8}HH-_HKqh6eF5p<mP|FGy zWnI9zkRgQ`BvZqh!Xn8~%T~jh!Yav7%MO-j%VJIe>x1&3rhs|uS<ER+V4WcI*|VT> zDGZ?C^Q)2y$w*a5%PcA`QP4;&OD)n=$jK}&QOGPw&8^}Gg@Qs!Myf(_YI1&F%1clP z7J&leC5X`EDgp(@EtcZMveY7G1_p*(EG4NGCAU~WM%-f0Ps&P7E-Ajn3O4>0cVcmI zYEg-6VQFH{E#}0WoLj8P`K5U!njE)Sic@paZn1*2#oyurD~|`c;1)N;VhD!|WKT*w zNYyQF2pgoR_?7@f2SVtUAXFbhXeC3D1Oo%ZuY4D)81K@Y%*2eC;MCmI;*!)N1@o8y z-vFN&*NW7l<jmq!1;ZFaGXpaVV>3&0Gu?us#N?99<WwVUf-#8&1@RgAxv2$->8UX# zsl_G5U@|@zly-{s3My|YfJEbq6U#F5(&H2JQsRqJONug6!CbKO*+Gd(1C+uT*%&#P z*cd?&L31(kFmW*oFmW()F!F(6l_|DFsz=BkKTVcf9P#maiMgrq@wd3*L2fL~0kL`F z<3W)Ektvd5V1R@bIKUu;BuI>vfq?;pi$TeNgQ*C__S0m$#hsFsn3tXpc0dtGE=m|V sSo9!a0Zt&`1OwIxF&7ji5EjUWTO2mI`6;D2sdk{`RSZg8Jd6U&03-z>i2wiq literal 0 HcmV?d00001 diff --git a/app_homepage/tests/__pycache__/test_views.cpython-37.pyc b/app_homepage/tests/__pycache__/test_views.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..792505a140e7f9ef01f2f6690d11991e9a7e885a GIT binary patch literal 4199 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 literal 0 HcmV?d00001 diff --git a/app_homepage/tests/test_all.py b/app_homepage/tests/test_all.py index f9130be..882a1a3 100644 --- a/app_homepage/tests/test_all.py +++ b/app_homepage/tests/test_all.py @@ -1,143 +1,143 @@ -from django.test import TestCase -from django.urls import resolve -from django.http import HttpRequest -from .views import home_page -from .models import Item, List -from django.template.loader import render_to_string - -# Create your tests here. -class HomePageTest(TestCase): - - def test_uses_home_template(self): - response = self.client.get('/') - self.assertTemplateUsed(response, 'app/home.html') - - def test_can_save_a_POST_request(self): - response = self.client.post('/lists/new', 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') - - # def test_redirects_after_POST(self): - # response = self.client.post('/lists/new', data={'item_text': 'A new list item'}) - # self.assertRedirects(response, '/lists/the-only-list-in-the-world/') - - # def test_if_item_smaller_than_5(self): - # response = self.client.get('/') - # self.assertIn('yey, waktunya libur', response.content.decode()) - - # def test_if_item_smaller_than_5(self): - # Item.objects.create(text='itemey 1') - # Item.objects.create(text='itemey 2') - # response = self.client.get('/') - # self.assertIn('sibuk tapi santai', response.content.decode()) - - # def test_if_item_more_than_5(self): - # Item.objects.create(text='itemey 1') - # Item.objects.create(text='itemey 2') - # Item.objects.create(text='itemey 3') - # Item.objects.create(text='itemey 4') - # Item.objects.create(text='itemey 5') - # Item.objects.create(text='itemey 6') - # response = self.client.get('/') - # self.assertIn('oh tidak', response.content.decode()) - - -class ListAndItemModelTest(TestCase): - - def test_saving_and_retrieving_items(self): - list_ = List() - list_.save() - - first_item = Item() - first_item.text = 'The first (ever) list item' - first_item.list = list_ - first_item.save() - - second_item = Item() - second_item.text = 'Item the second' - second_item.list = list_ - second_item.save() - - saved_list = List.objects.first() - self.assertEqual(saved_list, list_) - - 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(first_saved_item.list, list_) - self.assertEqual(second_saved_item.text, 'Item the second') - self.assertEqual(second_saved_item.list, list_) - -class ListViewTest(TestCase): - - def test_uses_list_template(self): - list_ = List.objects.create() - response = self.client.get(f'/lists/{list_.id}/') - self.assertTemplateUsed(response, 'app/list.html') - - - def test_displays_only_items_for_that_list(self): - correct_list = List.objects.create() - Item.objects.create(text='itemey 1', list=correct_list) - Item.objects.create(text='itemey 2', list=correct_list) - other_list = List.objects.create() - Item.objects.create(text='other list item 1', list=other_list) - Item.objects.create(text='other list item 2', list=other_list) - - response = self.client.get(f'/lists/{correct_list.id}/') - - self.assertContains(response, 'itemey 1') - self.assertContains(response, 'itemey 2') - self.assertNotContains(response, 'other list item 1') - self.assertNotContains(response, 'other list item 2') - -class NewListTest(TestCase): - - def test_can_save_a_POST_request(self): - self.client.post('/lists/new', 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') - - - def test_redirects_after_POST(self): - response = self.client.post('/lists/new', data={'item_text': 'A new list item'}) - new_list = List.objects.first() - self.assertRedirects(response, f'/lists/{new_list.id}/') - -class NewItemTest(TestCase): - def test_can_save_a_POST_request_to_an_existing_list(self): - other_list = List.objects.create() - correct_list = List.objects.create() - - self.client.post( - f'/lists/{correct_list.id}/add_item', - data={'item_text': 'A new item for an existing list'} - ) - - self.assertEqual(Item.objects.count(), 1) - new_item = Item.objects.first() - self.assertEqual(new_item.text, 'A new item for an existing list') - self.assertEqual(new_item.list, correct_list) - - - def test_redirects_to_list_view(self): - other_list = List.objects.create() - correct_list = List.objects.create() - - response = self.client.post( - f'/lists/{correct_list.id}/add_item', - data={'item_text': 'A new item for an existing list'} - ) - - self.assertRedirects(response, f'/lists/{correct_list.id}/') - - def test_passes_correct_list_to_template(self): - other_list = List.objects.create() - correct_list = List.objects.create() - response = self.client.get(f'/lists/{correct_list.id}/') +from django.test import TestCase +from django.urls import resolve +from django.http import HttpRequest +from app_homepage.views import home_page +from app_homepage.models import Item, List +from django.template.loader import render_to_string + +# Create your tests here. +class HomePageTest(TestCase): + + def test_uses_home_template(self): + response = self.client.get('/') + self.assertTemplateUsed(response, 'app/home.html') + + def test_can_save_a_POST_request(self): + response = self.client.post('/lists/new', 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') + + # def test_redirects_after_POST(self): + # response = self.client.post('/lists/new', data={'item_text': 'A new list item'}) + # self.assertRedirects(response, '/lists/the-only-list-in-the-world/') + + # def test_if_item_smaller_than_5(self): + # response = self.client.get('/') + # self.assertIn('yey, waktunya libur', response.content.decode()) + + # def test_if_item_smaller_than_5(self): + # Item.objects.create(text='itemey 1') + # Item.objects.create(text='itemey 2') + # response = self.client.get('/') + # self.assertIn('sibuk tapi santai', response.content.decode()) + + # def test_if_item_more_than_5(self): + # Item.objects.create(text='itemey 1') + # Item.objects.create(text='itemey 2') + # Item.objects.create(text='itemey 3') + # Item.objects.create(text='itemey 4') + # Item.objects.create(text='itemey 5') + # Item.objects.create(text='itemey 6') + # response = self.client.get('/') + # self.assertIn('oh tidak', response.content.decode()) + + +class ListAndItemModelTest(TestCase): + + def test_saving_and_retrieving_items(self): + list_ = List() + list_.save() + + first_item = Item() + first_item.text = 'The first (ever) list item' + first_item.list = list_ + first_item.save() + + second_item = Item() + second_item.text = 'Item the second' + second_item.list = list_ + second_item.save() + + saved_list = List.objects.first() + self.assertEqual(saved_list, list_) + + 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(first_saved_item.list, list_) + self.assertEqual(second_saved_item.text, 'Item the second') + self.assertEqual(second_saved_item.list, list_) + +class ListViewTest(TestCase): + + def test_uses_list_template(self): + list_ = List.objects.create() + response = self.client.get(f'/lists/{list_.id}/') + self.assertTemplateUsed(response, 'app/list.html') + + + def test_displays_only_items_for_that_list(self): + correct_list = List.objects.create() + Item.objects.create(text='itemey 1', list=correct_list) + Item.objects.create(text='itemey 2', list=correct_list) + other_list = List.objects.create() + Item.objects.create(text='other list item 1', list=other_list) + Item.objects.create(text='other list item 2', list=other_list) + + response = self.client.get(f'/lists/{correct_list.id}/') + + self.assertContains(response, 'itemey 1') + self.assertContains(response, 'itemey 2') + self.assertNotContains(response, 'other list item 1') + self.assertNotContains(response, 'other list item 2') + +class NewListTest(TestCase): + + def test_can_save_a_POST_request(self): + self.client.post('/lists/new', 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') + + + def test_redirects_after_POST(self): + response = self.client.post('/lists/new', data={'item_text': 'A new list item'}) + new_list = List.objects.first() + self.assertRedirects(response, f'/lists/{new_list.id}/') + +class NewItemTest(TestCase): + def test_can_save_a_POST_request_to_an_existing_list(self): + other_list = List.objects.create() + correct_list = List.objects.create() + + self.client.post( + f'/lists/{correct_list.id}/add_item', + data={'item_text': 'A new item for an existing list'} + ) + + self.assertEqual(Item.objects.count(), 1) + new_item = Item.objects.first() + self.assertEqual(new_item.text, 'A new item for an existing list') + self.assertEqual(new_item.list, correct_list) + + + def test_redirects_to_list_view(self): + other_list = List.objects.create() + correct_list = List.objects.create() + + response = self.client.post( + f'/lists/{correct_list.id}/add_item', + data={'item_text': 'A new item for an existing list'} + ) + + self.assertRedirects(response, f'/lists/{correct_list.id}/') + + def test_passes_correct_list_to_template(self): + other_list = List.objects.create() + correct_list = List.objects.create() + response = self.client.get(f'/lists/{correct_list.id}/') self.assertEqual(response.context['list'], correct_list) \ No newline at end of file diff --git a/app_homepage/tests/test_models.py b/app_homepage/tests/test_models.py new file mode 100644 index 0000000..49dc296 --- /dev/null +++ b/app_homepage/tests/test_models.py @@ -0,0 +1,33 @@ +from django.test import TestCase +from app_homepage.models import Item, List + +# Create your tests here. +class ListAndItemModelTest(TestCase): + + def test_saving_and_retrieving_items(self): + list_ = List() + list_.save() + + first_item = Item() + first_item.text = 'The first (ever) list item' + first_item.list = list_ + first_item.save() + + second_item = Item() + second_item.text = 'Item the second' + second_item.list = list_ + second_item.save() + + saved_list = List.objects.first() + self.assertEqual(saved_list, list_) + + 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(first_saved_item.list, list_) + self.assertEqual(second_saved_item.text, 'Item the second') + self.assertEqual(second_saved_item.list, list_) + diff --git a/app_homepage/tests/test_views.py b/app_homepage/tests/test_views.py new file mode 100644 index 0000000..8edde11 --- /dev/null +++ b/app_homepage/tests/test_views.py @@ -0,0 +1,114 @@ +from django.test import TestCase +from django.urls import resolve +from django.http import HttpRequest +from app_homepage.views import home_page +from app_homepage.models import Item, List +from django.template.loader import render_to_string + +# Create your tests here. +class HomePageTest(TestCase): + + def test_uses_home_template(self): + response = self.client.get('/') + self.assertTemplateUsed(response, 'app/home.html') + + def test_can_save_a_POST_request(self): + response = self.client.post('/lists/new', 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') + + # def test_redirects_after_POST(self): + # response = self.client.post('/lists/new', data={'item_text': 'A new list item'}) + # self.assertRedirects(response, '/lists/the-only-list-in-the-world/') + + # def test_if_item_smaller_than_5(self): + # response = self.client.get('/') + # self.assertIn('yey, waktunya libur', response.content.decode()) + + # def test_if_item_smaller_than_5(self): + # Item.objects.create(text='itemey 1') + # Item.objects.create(text='itemey 2') + # response = self.client.get('/') + # self.assertIn('sibuk tapi santai', response.content.decode()) + + # def test_if_item_more_than_5(self): + # Item.objects.create(text='itemey 1') + # Item.objects.create(text='itemey 2') + # Item.objects.create(text='itemey 3') + # Item.objects.create(text='itemey 4') + # Item.objects.create(text='itemey 5') + # Item.objects.create(text='itemey 6') + # response = self.client.get('/') + # self.assertIn('oh tidak', response.content.decode()) + + +class ListViewTest(TestCase): + + def test_uses_list_template(self): + list_ = List.objects.create() + response = self.client.get(f'/lists/{list_.id}/') + self.assertTemplateUsed(response, 'app/list.html') + + + def test_displays_only_items_for_that_list(self): + correct_list = List.objects.create() + Item.objects.create(text='itemey 1', list=correct_list) + Item.objects.create(text='itemey 2', list=correct_list) + other_list = List.objects.create() + Item.objects.create(text='other list item 1', list=other_list) + Item.objects.create(text='other list item 2', list=other_list) + + response = self.client.get(f'/lists/{correct_list.id}/') + + self.assertContains(response, 'itemey 1') + self.assertContains(response, 'itemey 2') + self.assertNotContains(response, 'other list item 1') + self.assertNotContains(response, 'other list item 2') + +class NewListTest(TestCase): + + def test_can_save_a_POST_request(self): + self.client.post('/lists/new', 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') + + + def test_redirects_after_POST(self): + response = self.client.post('/lists/new', data={'item_text': 'A new list item'}) + new_list = List.objects.first() + self.assertRedirects(response, f'/lists/{new_list.id}/') + +class NewItemTest(TestCase): + def test_can_save_a_POST_request_to_an_existing_list(self): + other_list = List.objects.create() + correct_list = List.objects.create() + + self.client.post( + f'/lists/{correct_list.id}/add_item', + data={'item_text': 'A new item for an existing list'} + ) + + self.assertEqual(Item.objects.count(), 1) + new_item = Item.objects.first() + self.assertEqual(new_item.text, 'A new item for an existing list') + self.assertEqual(new_item.list, correct_list) + + + def test_redirects_to_list_view(self): + other_list = List.objects.create() + correct_list = List.objects.create() + + response = self.client.post( + f'/lists/{correct_list.id}/add_item', + data={'item_text': 'A new item for an existing list'} + ) + + self.assertRedirects(response, f'/lists/{correct_list.id}/') + + def test_passes_correct_list_to_template(self): + other_list = List.objects.create() + correct_list = List.objects.create() + response = self.client.get(f'/lists/{correct_list.id}/') + self.assertEqual(response.context['list'], correct_list) \ No newline at end of file -- GitLab