diff test/test_cgi.py @ 5814:bd6d41f21a5a

More extensive EditCSV testing. Uses test object to cover all types defined by database. Also check for an error with a row that's too short. CSV starts with blank line to verify that it recognises header line. Changes password, date, int, link and other fields. Deletes row and verified that it is retired. Make actions.py properly handle emptying of password field.
author John Rouillard <rouilj@ieee.org>
date Fri, 14 Jun 2019 21:26:19 -0400
parents 39a5f40ae4d4
children 26cd8e8bbed3
line wrap: on
line diff
--- a/test/test_cgi.py	Wed Jun 12 22:13:00 2019 -0400
+++ b/test/test_cgi.py	Fri Jun 14 21:26:19 2019 -0400
@@ -94,7 +94,7 @@
             intval=hyperdb.Integer(), boolean=hyperdb.Boolean(),
             link=hyperdb.Link('test'), multilink=hyperdb.Multilink('test'),
             date=hyperdb.Date(), messages=hyperdb.Multilink('msg'),
-            interval=hyperdb.Interval())
+            interval=hyperdb.Interval(), pw=hyperdb.Password() )
 
         # compile the labels re
         classes = '|'.join(self.db.classes.keys())
@@ -1442,7 +1442,7 @@
         h = HTMLRequest(cl)
         self.assertEqual([x.id for x in h.batch()],['1', '2', '3'])
 
-    def testEditCSV(self):
+    def testEditCSVKeyword(self):
         form = dict(rows='id,name\n1,newkey')
         cl = self._make_client(form, userid='1', classname='keyword')
         cl._ok_message = []
@@ -1458,6 +1458,46 @@
         k = self.db.keyword.getnode('1')
         self.assertEqual(k.name, u2s(u'\xe4\xf6\xfc'))
 
+    def testEditCSVTest(self):
+
+        form = dict(rows='\nid,boolean,date,interval,intval,link,messages,multilink,number,pw,string\n1,true,2019-02-10,2d,4,,,,3.4,pass,foo\n2,no,2017-02-10,1d,-9,1,,1,-2.4,poof,bar\n3,no,2017-02-10,1d,-9,2,,1:2,-2.4,ping,bar')
+        cl = self._make_client(form, userid='1', classname='test')
+        cl._ok_message = []
+        actions.EditCSVAction(cl).handle()
+        self.assertEqual(cl._ok_message, ['Items edited OK'])
+        t = self.db.test.getnode('1')
+        self.assertEqual(t.string, 'foo')
+        self.assertEqual(t['string'], 'foo')
+        self.assertEqual(t.boolean, True)
+        t = self.db.test.getnode('3')
+        self.assertEqual(t.multilink, [ "1", "2" ])
+
+        # now edit existing row and delete row
+        form = dict(rows='\nid,boolean,date,interval,intval,link,messages,multilink,number,pw,string\n1,false,2019-03-10,1d,3,1,,1:2,2.2,pass,bar\n2,,,,,1,,1,,,bar')
+        cl = self._make_client(form, userid='1', classname='test')
+        cl._ok_message = []
+        actions.EditCSVAction(cl).handle()
+        self.assertEqual(cl._ok_message, ['Items edited OK'])
+        t = self.db.test.getnode('1')
+        self.assertEqual(t.string, 'bar')
+        self.assertEqual(t['string'], 'bar')
+        self.assertEqual(t.boolean, False)
+        self.assertEqual(t.multilink, [ "1", "2" ])
+        self.assertEqual(t.link, "1")
+
+        t = self.db.test.getnode('3')
+        self.assertTrue(t.cl.is_retired('3'))
+
+
+    def testEditCSVTestBadRow(self):
+        form = dict(rows='\nid,boolean,date,interval,intval,link,messages,multilink,number,pw,string\n1,2019-02-10,2d,4,,,,3.4,pass,foo')
+        cl = self._make_client(form, userid='1', classname='test')
+        cl._ok_message = []
+        cl._error_message = []
+        actions.EditCSVAction(cl).handle()
+        print(cl._error_message)
+        self.assertEqual(cl._error_message, ['Not enough values on line 3'])
+
     def testEditCSVRestore(self):
         form = dict(rows='id,name\n1,key1\n2,key2')
         cl = self._make_client(form, userid='1', classname='keyword')

Roundup Issue Tracker: http://roundup-tracker.org/