Mercurial > p > roundup > code
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 = [] |
