comparison 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
comparison
equal deleted inserted replaced
5813:4b2c6f7bc9b4 5814:bd6d41f21a5a
92 test = self.instance.backend.Class(self.db, "test", 92 test = self.instance.backend.Class(self.db, "test",
93 string=hyperdb.String(), number=hyperdb.Number(), 93 string=hyperdb.String(), number=hyperdb.Number(),
94 intval=hyperdb.Integer(), boolean=hyperdb.Boolean(), 94 intval=hyperdb.Integer(), boolean=hyperdb.Boolean(),
95 link=hyperdb.Link('test'), multilink=hyperdb.Multilink('test'), 95 link=hyperdb.Link('test'), multilink=hyperdb.Multilink('test'),
96 date=hyperdb.Date(), messages=hyperdb.Multilink('msg'), 96 date=hyperdb.Date(), messages=hyperdb.Multilink('msg'),
97 interval=hyperdb.Interval()) 97 interval=hyperdb.Interval(), pw=hyperdb.Password() )
98 98
99 # compile the labels re 99 # compile the labels re
100 classes = '|'.join(self.db.classes.keys()) 100 classes = '|'.join(self.db.classes.keys())
101 self.FV_SPECIAL = re.compile(FormParser.FV_LABELS%classes, 101 self.FV_SPECIAL = re.compile(FormParser.FV_LABELS%classes,
102 re.VERBOSE) 102 re.VERBOSE)
1440 cl = self._make_client(depgrp, classname='iss', nodeid=None, 1440 cl = self._make_client(depgrp, classname='iss', nodeid=None,
1441 userid=mary, template='index') 1441 userid=mary, template='index')
1442 h = HTMLRequest(cl) 1442 h = HTMLRequest(cl)
1443 self.assertEqual([x.id for x in h.batch()],['1', '2', '3']) 1443 self.assertEqual([x.id for x in h.batch()],['1', '2', '3'])
1444 1444
1445 def testEditCSV(self): 1445 def testEditCSVKeyword(self):
1446 form = dict(rows='id,name\n1,newkey') 1446 form = dict(rows='id,name\n1,newkey')
1447 cl = self._make_client(form, userid='1', classname='keyword') 1447 cl = self._make_client(form, userid='1', classname='keyword')
1448 cl._ok_message = [] 1448 cl._ok_message = []
1449 actions.EditCSVAction(cl).handle() 1449 actions.EditCSVAction(cl).handle()
1450 self.assertEqual(cl._ok_message, ['Items edited OK']) 1450 self.assertEqual(cl._ok_message, ['Items edited OK'])
1455 cl._ok_message = [] 1455 cl._ok_message = []
1456 actions.EditCSVAction(cl).handle() 1456 actions.EditCSVAction(cl).handle()
1457 self.assertEqual(cl._ok_message, ['Items edited OK']) 1457 self.assertEqual(cl._ok_message, ['Items edited OK'])
1458 k = self.db.keyword.getnode('1') 1458 k = self.db.keyword.getnode('1')
1459 self.assertEqual(k.name, u2s(u'\xe4\xf6\xfc')) 1459 self.assertEqual(k.name, u2s(u'\xe4\xf6\xfc'))
1460
1461 def testEditCSVTest(self):
1462
1463 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')
1464 cl = self._make_client(form, userid='1', classname='test')
1465 cl._ok_message = []
1466 actions.EditCSVAction(cl).handle()
1467 self.assertEqual(cl._ok_message, ['Items edited OK'])
1468 t = self.db.test.getnode('1')
1469 self.assertEqual(t.string, 'foo')
1470 self.assertEqual(t['string'], 'foo')
1471 self.assertEqual(t.boolean, True)
1472 t = self.db.test.getnode('3')
1473 self.assertEqual(t.multilink, [ "1", "2" ])
1474
1475 # now edit existing row and delete row
1476 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')
1477 cl = self._make_client(form, userid='1', classname='test')
1478 cl._ok_message = []
1479 actions.EditCSVAction(cl).handle()
1480 self.assertEqual(cl._ok_message, ['Items edited OK'])
1481 t = self.db.test.getnode('1')
1482 self.assertEqual(t.string, 'bar')
1483 self.assertEqual(t['string'], 'bar')
1484 self.assertEqual(t.boolean, False)
1485 self.assertEqual(t.multilink, [ "1", "2" ])
1486 self.assertEqual(t.link, "1")
1487
1488 t = self.db.test.getnode('3')
1489 self.assertTrue(t.cl.is_retired('3'))
1490
1491
1492 def testEditCSVTestBadRow(self):
1493 form = dict(rows='\nid,boolean,date,interval,intval,link,messages,multilink,number,pw,string\n1,2019-02-10,2d,4,,,,3.4,pass,foo')
1494 cl = self._make_client(form, userid='1', classname='test')
1495 cl._ok_message = []
1496 cl._error_message = []
1497 actions.EditCSVAction(cl).handle()
1498 print(cl._error_message)
1499 self.assertEqual(cl._error_message, ['Not enough values on line 3'])
1460 1500
1461 def testEditCSVRestore(self): 1501 def testEditCSVRestore(self):
1462 form = dict(rows='id,name\n1,key1\n2,key2') 1502 form = dict(rows='id,name\n1,key1\n2,key2')
1463 cl = self._make_client(form, userid='1', classname='keyword') 1503 cl = self._make_client(form, userid='1', classname='keyword')
1464 cl._ok_message = [] 1504 cl._ok_message = []

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