From a03d71061ca11916009cfdbe5f406e6972b4c45d Mon Sep 17 00:00:00 2001
From: Yumna Pratista <yumnanaruto@gmail.com>
Date: Wed, 25 Sep 2019 16:25:32 +0700
Subject: [PATCH] Model for list Items and associated migration

---
 .../__pycache__/models.cpython-37.pyc         | Bin 246 -> 432 bytes
 app_homepage/__pycache__/tests.cpython-37.pyc | Bin 1130 -> 1783 bytes
 app_homepage/migrations/0001_initial.py       |  20 ++++++
 app_homepage/migrations/0002_item_text.py     |  18 ++++++
 .../__pycache__/0001_initial.cpython-37.pyc   | Bin 0 -> 628 bytes
 .../__pycache__/0002_item_text.cpython-37.pyc | Bin 0 -> 602 bytes
 app_homepage/models.py                        |   3 +-
 app_homepage/tests.py                         |  20 ++++++
 db.sqlite3                                    | Bin 0 -> 139264 bytes
 functional_test.py                            |  28 ++++++---
 geckodriver.log                               |  58 ++++++++++++++++++
 11 files changed, 139 insertions(+), 8 deletions(-)
 create mode 100644 app_homepage/migrations/0001_initial.py
 create mode 100644 app_homepage/migrations/0002_item_text.py
 create mode 100644 app_homepage/migrations/__pycache__/0001_initial.cpython-37.pyc
 create mode 100644 app_homepage/migrations/__pycache__/0002_item_text.cpython-37.pyc

diff --git a/app_homepage/__pycache__/models.cpython-37.pyc b/app_homepage/__pycache__/models.cpython-37.pyc
index 3869d445de8560a569c1afb19fa0425663d192b1..03d012f4a9ceb0c1e8cbc9a817275a58a0fdd430 100644
GIT binary patch
literal 432
zcmZ?b<>g{vU|^VS&>fq`z`*br#DQTJ1_lNP1_p*=B?bnD6owSW9EM!RC`LvGcZL+E
z6y_F&6y{XMET(4WDCQKFU<OUrmmr;*jJMcw^HWlDijzTH7-ohUCc(hKkjfCnn8Fan
zl**jNlERq6)XNyfn!+5+pviKJ#j_+e_ZEXD<1O}-)U?FXoDx4xwp$$W@p*~4sqyi*
zxZ>k;^HWN5Ky04)_`=e}9EeO269WUoEzXeCiW0ZX)SQ%CEG4NGB`X<<xEUBA#IF<=
zs~GRnoXo_GnBdgh)Z&uVA_eo90N((g7}tu_qU6ltR0YErLo)+23u7}&b2Ht7qQvBq
z%;Z!fY=SX~1qJaL`MIeDiRq~^5HIT$R2G4J3c|%82XQch`F@%#w>VR>67$mY^-_``
gPG$84g%VgA;YJ9H2jmqF8;D2k7(sCWGK_}_0OY@DbN~PV

delta 177
zcmdnM{EackiI<m)fq{V`&7&#ShJk_MF^B`hObiSR4h#$o#R3cr3@HpLj5!Rsj8Tk?
z3@J>(44TX@LFzOaZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzpMX<o@t#KOP;A%2xleD7yd
yP?VpQnp|RF7@v`!n_7^Vo*I)_P=Me-jM6Kpyv1RYo1apelWNDvz`*bsWEBAD{VbdS

diff --git a/app_homepage/__pycache__/tests.cpython-37.pyc b/app_homepage/__pycache__/tests.cpython-37.pyc
index dd513e03a93317ad2baee47f1f210ac2fab1dbbe..3af5b760dc98e6f7b9a54d5cb312ba6336d842af 100644
GIT binary patch
delta 929
zcmaFG@tv2?iI<m)fq{XcTE9E?FUv$e3C5g>>L#`<DQr0$xtvj)j0`CZDeO61x!h6Q
zj12A!DI6)BEet7~sf^9cQ9SMpDO@SsEet8#U_NgOPcVZf@5CAhRu<2a)ZB?X?=lKZ
zp3d0F$URw-sg03q@&YDHM()YCm{etW85kHenTq%r7#NE9L4*LD5S%Q{tjNee*_Ju6
zUI-*A0U{9cV3r_AjFW+Z0fdWL7#J8hm^fI9K)hs-hhUhAfq}t+fq|h|gn@w}l_82T
zg&~S5g)xPxg&~SLg*li(ljRmK$g#fpDXBRjsl_G9j8MI73=H)QAd{Uz`imGC7)ltL
z8EP3*7;6~g8EY69FfC+YgorVvFx4={GuAM{#Il$duq<S#Wv*dZz*@t+fNdc|3iCoH
zMur;Z6c$N_T9z8-6jn)wT2`<;OBQ1aBUl!snl+0tg$cw<VF<2g&}8$gk_yR4RY=P$
zDlSpbNG(e((p1RFEG|*VEJ@9+;s?21p(G<!p*S@;KQHAa$iqb-FBGwYf|$LCoq>Vj
z7E4KLMaeCe;>5DlTkQEsS*gh-#kZIfb8>ERCl(i{7L~XbmL}%hVolC3%`4Gl1IJ4g
zS6V&D(s+<XQQQ#oVVuOW)D$qgI7$HQw0Mx&5TPhRs9J<j5jfJo1SsZiDU_rZmw>cn
z=B39c=B30JrIr+Brj~)YAnS_7Kw&OX4~hy#Hbyo^4kif6#VEkU!N|eL$5^EY@;W@)
z^az>gr^!+z2}(6mAVL~MsDKEtqYwnhc||e|3=E(I!(R*vP7WrpfS)Gc<g3ii8Em<r
zq*4qCSh19>#Ju!;y^_@2f}F&XRK1-1#FW&cA`XzzpwtM~isXH;O(08daoFVMr<CTT
S+JR!L7?cxu7~zmvfExfzb=FD%

delta 253
zcmey)`-+3liI<m)fq{X6y{I!blW8KK1Y^KNbrVH~6t*0WT+S#?Mh16=6!sL37KRj#
zRK{lJD6SOFU<OUDi8CA~KDfomKY2G}BO}*jTc$Qf&dEoZEE%~b|6@{>;bCB4&}1s&
zWnf?^;sX)<a6(|RJ+mSs-{eH*L~}uqs5po~$b(q|ATbUG1_lr=W&tsnI9Q56JU>nD
t$v$k(ljpEWSh2&D6@hgj2$23;95%W6DWy57c8m-R48<UC@-RXnGXO!(DwO~L

diff --git a/app_homepage/migrations/0001_initial.py b/app_homepage/migrations/0001_initial.py
new file mode 100644
index 0000000..d1f51bd
--- /dev/null
+++ b/app_homepage/migrations/0001_initial.py
@@ -0,0 +1,20 @@
+# Generated by Django 2.2.1 on 2019-09-25 09:10
+
+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/app_homepage/migrations/0002_item_text.py b/app_homepage/migrations/0002_item_text.py
new file mode 100644
index 0000000..02183b8
--- /dev/null
+++ b/app_homepage/migrations/0002_item_text.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.1 on 2019-09-25 09:17
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('app_homepage', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='item',
+            name='text',
+            field=models.TextField(default=''),
+        ),
+    ]
diff --git a/app_homepage/migrations/__pycache__/0001_initial.cpython-37.pyc b/app_homepage/migrations/__pycache__/0001_initial.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e5acc0a56ef65389525d30d7e52d9f699069fd1b
GIT binary patch
literal 628
zcmZ?b<>g{vU|`_a?~dKW$iVOz#DQTJ1_lNP1_p*=H3kNT6owSW9EM!RD8^i-C?-Y*
zcZL+E6y_F&6y{XMEaqnBDCQKFU<OUrmmuAmOt-jlGt-L_OEUBGif^&y=BK3Q6eokE
zV3-qTxCH|PLn=cQV+unQQwn1gb2>v5ODby?8_4)n_AHJR#uUaBmK4?$wqBMrrgX*>
z_FkrR#wgAdj$j5&&Rd+mFndC7v3QoG=H6n;OmVx#<msZxa*HRiv?M=1xhOTUBsJw0
zcR^8RZemeoe0FN(EzaW9qRhmc%&OE|JY}gxN%_U8@p*~4shUi;SU~hGwzSODoRnfe
zO|DxU@nEU=_*-1@@wxdar8%kb@wa&5;|og@b3lsY<8QHN=4F;-Cg$AYNl7h8%}Ytm
zOU_I!E@EO}V7SHY40eGpC=`mAK_Z-vr6u`pAPa7B<rkzv18OBhkr)F5g!onJVin_E
znv<EB5fhx6n_66wTBKke6W|-*6XRNuT9lkwoT^|LV`yezW?^h*X>O)lP?VTll9`-p
zgiSCev7jJ6BR@B_ATd2P1`#(g1_lO(@ldzx6;u|1BApEs>7aDM!NkJE!otGH!~_=i
s(`32DnUa;5m!7Yek_7e}*gIfJgwr7`agaYbY#_m92l90>C@=(=0Sx}Ci~s-t

literal 0
HcmV?d00001

diff --git a/app_homepage/migrations/__pycache__/0002_item_text.cpython-37.pyc b/app_homepage/migrations/__pycache__/0002_item_text.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e56f938c3ab9594f126b02e8c5b9e6d8d64656fe
GIT binary patch
literal 602
zcmZ?b<>g{vU|^VM&>h>#$iVOz#DQTJ1_lNP1_p*=H3kNT6owSW9EM!RD8^i-C?-Y*
zcZL+E6y_F&6y{XMEaqnBDCQKFU<OUrmmuAmOt-jlGt-L_OEUBGif^&y=BK3Q6eokE
zV3-YNxDEpYLn=cQV+unQQwn1`V-#~LOBO50@Km-e_7s*B)?UUGwqE9R#wd;y_Fx80
zj$53*Ftat8Zt)}*6vSub=cX1Url;QGF)%PNjL*!=EXhpFxy6!MlA3#qr6jeY<Q9V_
z<1O}-)U?FXoDxmuTU=l_#pfmFrru%!ldNf(sW~Zrnw+;d;=$ta@wd3*<8$*<N^?@<
z<8SfA#}}3+=77|Kcqyp`sd*`>dC8fn#YIdE3=Fq898*%<KxPy%gSea_sTCz){w=Qj
zf>dZ=tYjz>Wnh31zsg;#V!TUpG7~dmf>U!-i%U|A6wG4+d;@%9Tq{zGk~51_6%1nx
z%?!*ejLj^~&2$Tj5|c|ZlT(eb3C19YL<}PQV+;%ojN(B-5f2Ipy@JXjP}G8ApcoYU
z9L#JiER0NyOpIW0KTVcfoGDp}dFlCjDM?_jfjtD4L^vM85(D{^!v+#ab|8NjgTg|9
F835A1p=1C6

literal 0
HcmV?d00001

diff --git a/app_homepage/models.py b/app_homepage/models.py
index 71a8362..2339168 100644
--- a/app_homepage/models.py
+++ b/app_homepage/models.py
@@ -1,3 +1,4 @@
 from django.db import models
 
-# Create your models here.
+class Item(models.Model):
+    text = models.TextField(default = '')
diff --git a/app_homepage/tests.py b/app_homepage/tests.py
index f798f5d..7e88a00 100644
--- a/app_homepage/tests.py
+++ b/app_homepage/tests.py
@@ -2,6 +2,7 @@ from django.test import TestCase
 from django.urls import resolve
 from django.http import HttpRequest
 from .views import home_page
+from .models import Item
 from django.template.loader import render_to_string
 
 # Create your tests here.
@@ -15,4 +16,23 @@ class HomePageTest(TestCase):
 		response = self.client.post('/', data={'item_text':'A new list item'})
 		self.assertIn('A new list item', response.content.decode())
 		self.assertTemplateUsed(response, 'app/home.html')
+
+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')
 	
\ No newline at end of file
diff --git a/db.sqlite3 b/db.sqlite3
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..84a97d59846267e90d4d32eb9caeb5944b75d86f 100644
GIT binary patch
literal 139264
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

literal 0
HcmV?d00001

diff --git a/functional_test.py b/functional_test.py
index 82f6057..c6268c4 100644
--- a/functional_test.py
+++ b/functional_test.py
@@ -11,6 +11,11 @@ class NewVisitorTest(unittest.TestCase):
     def tearDown(self):
         self.browser.quit()
 
+    def check_for_row_in_list_table(self, row_text):
+        table = self.browser.find_element_by_id('id_list_table')
+        rows = table.find_elements_by_tag_name('tr')
+        self.assertIn(row_text, [row_text for row in rows])
+
     def test_can_start_a_list_and_retrieve_it_later(self):
         # Edith has heard about a cool new online to-do app. She goes
         # to check out its homepage
@@ -21,6 +26,11 @@ class NewVisitorTest(unittest.TestCase):
         header_text = self.browser.find_element_by_tag_name('h1').text  
         self.assertIn('To-Do', header_text)
 
+        inputbox = self.browser.find_element_by_id('id_new_item')
+        inputbox.send_keys(Keys.ENTER)
+        time.sleep(1)
+        # The page updates again, and now shows both items on her list
+        self.check_for_row_in_list_table('1: Buy peacock feathers')
         # She is invited to enter a to-do item straight away
         # There is still a text box inviting her to add another item. She
         # enters "Use peacock feathers to make a fly" (Edith is very
@@ -31,13 +41,17 @@ class NewVisitorTest(unittest.TestCase):
         time.sleep(1)
 
         # The page updates again, and now shows both items on her list
-        table = self.browser.find_element_by_id('id_list_table')
-        rows = table.find_elements_by_tag_name('tr')
-        self.assertIn('1: Buy peacock feathers', [row.text for row in rows])
-        self.assertIn(
-            '2: Use peacock feathers to make a fly',
-             [row.text for row in rows]
-        )
+        self.check_for_row_in_list_table('1: Buy peacock feathers')
+        self.check_for_row_in_list_table('2: Use peacock feathers to make a fly')
+
+        # The page updates again, and now shows both items on her list
+        # table = self.browser.find_element_by_id('id_list_table')
+        # rows = table.find_elements_by_tag_name('tr')
+        # self.assertIn('1: Buy peacock feathers', [row.text for row in rows])
+        # self.assertIn(
+        #     '2: Use peacock feathers to make a fly',
+        #      [row.text for row in rows]
+        # )
 
         # Edith wonders whether the site will remember her list. Then she sees
         # that the site has generated a unique URL for her -- there is some
diff --git a/geckodriver.log b/geckodriver.log
index 5f7171a..50662d2 100644
--- a/geckodriver.log
+++ b/geckodriver.log
@@ -520,3 +520,61 @@ JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't fin
 [Child 11912, Chrome_ChJavaScript error: resource://gre/modules/ExtensionSettingsStore.jsm, line 117: Error: The ExtensionSettingsStore was accessed before the initialize promise resolved.
 console.error: (new Error("Transaction canceled due to a closed connection.", "resource://gre/modules/Sqlite.jsm", 613))
 console.error: (new Error("Transaction canceled due to a closed connection.", "resource://gre/modules/Sqlite.jsm", 613))
+1569290323575	mozrunner::runner	INFO	Running command: "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\YUMNAP~1\\AppData\\Local\\Temp\\rust_mozprofileYP5ql9"
+1569290324406	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
+1569290324406	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
+1569290324406	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
+1569290324407	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
+JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't find profile directory.
+1569290327278	Marionette	INFO	Listening on port 56936
+1569290327401	Marionette	WARN	TLS certificate errors will be ignored for this session
+1569290328922	Marionette	INFO	Stopped listening on port 56936
+JavaScript error: resource://activity-stream/lib/ActivityStreamPrefs.jsm, line 27: NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIPrefBranch.removeObserver]
+[Child 19360, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 19360, Chrome_ChildThread] WARNING[Child 6428, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 6428, Chrome_ChildThread] WARNING: pipe e[Parent 7632, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 13208, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 13208, Chrome_C
+###!!! [Child][RunMessage] Error: Channel closing: too late to send/recv, messages will be lost
+
+[G
+###!!! [Child][MessageChannel::SendAndWait] Error: Channel error: cannot send/recv
+
+1569290599845	mozrunner::runner	INFO	Running command: "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\YUMNAP~1\\AppData\\Local\\Temp\\rust_mozprofile3vJRSq"
+1569290600768	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
+1569290600768	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
+1569290600768	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
+1569290600768	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
+JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't find profile directory.
+1569290609517	Marionette	INFO	Listening on port 57003
+1569290609684	Marionette	WARN	TLS certificate errors will be ignored for this session
+1569290610259	Marionette	INFO	Stopped listening on port 57003
+JavaScript error: resource://activity-stream/lib/ActivityStreamPrefs.jsm, line 27: NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIPrefBranch.removeObserver]
+[Child 6[Parent 18116, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 21176, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 21176, Chrome_JavaScript error: resource://gre/modules/ExtensionSettingsStore.jsm, line 117: Error: The ExtensionSettingsStore was accessed before the initialize promise resolved.
+JavaScript error: resource://gre/modules/Sqlite.jsm, line 912: Error: Connection is not open.
+
+###!!! [Parent][DispatchAsyncMessage] Error: PBackgroundIDBFactory::Msg_PBackgroundIDBFactoryRequestConstructor Value error: message was deserialized, but contained an illegal value
+
+[GPU 9480, Chrome
+###!!! [Child][RunMessage] Error: Channel closing: too late to send/recv, messages will be lost
+
+_
+###!!! [Child][MessageChannel::SendAndWait] Error: Channel error: cannot send/recv
+
+1569290666739	mozrunner::runner	INFO	Running command: "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\YUMNAP~1\\AppData\\Local\\Temp\\rust_mozprofileKddsnv"
+1569290667493	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
+1569290667493	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
+1569290667493	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
+1569290667493	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
+JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't find profile directory.
+1569290670921	Marionette	INFO	Listening on port 57043
+1569290671052	Marionette	WARN	TLS certificate errors will be ignored for this session
+1569290673569	Marionette	INFO	Stopped listening on port 57043
+[Child 18832, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 18832, Ch[Child 12040, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 12040, Chrome_ChildThread] WARNIJavaScript error: resource://gre/modules/UrlClassifierListManager.jsm, line 680: TypeError: this.tablesData[table] is undefined
+[Parent 17632, Gecko_IOThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 18196, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566861941/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
+[Child 18196, Chrome_Child
\ No newline at end of file
-- 
GitLab