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