Skip to content

Commit d25d91b

Browse files
committed
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.
1 parent b67061f commit d25d91b

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

roundup/cgi/actions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,9 @@ def handle(self):
558558
# nuke the existing value
559559
if isinstance(prop, hyperdb.Multilink):
560560
d[name] = []
561+
elif isinstance(prop, hyperdb.Password):
562+
# create empty password entry
563+
d[name] = password.Password("", config=self.db.config)
561564
else:
562565
d[name] = None
563566

test/test_cgi.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def setUp(self):
9494
intval=hyperdb.Integer(), boolean=hyperdb.Boolean(),
9595
link=hyperdb.Link('test'), multilink=hyperdb.Multilink('test'),
9696
date=hyperdb.Date(), messages=hyperdb.Multilink('msg'),
97-
interval=hyperdb.Interval())
97+
interval=hyperdb.Interval(), pw=hyperdb.Password() )
9898

9999
# compile the labels re
100100
classes = '|'.join(self.db.classes.keys())
@@ -1442,7 +1442,7 @@ def testSearchPermission(self):
14421442
h = HTMLRequest(cl)
14431443
self.assertEqual([x.id for x in h.batch()],['1', '2', '3'])
14441444

1445-
def testEditCSV(self):
1445+
def testEditCSVKeyword(self):
14461446
form = dict(rows='id,name\n1,newkey')
14471447
cl = self._make_client(form, userid='1', classname='keyword')
14481448
cl._ok_message = []
@@ -1458,6 +1458,46 @@ def testEditCSV(self):
14581458
k = self.db.keyword.getnode('1')
14591459
self.assertEqual(k.name, u2s(u'\xe4\xf6\xfc'))
14601460

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'])
1500+
14611501
def testEditCSVRestore(self):
14621502
form = dict(rows='id,name\n1,key1\n2,key2')
14631503
cl = self._make_client(form, userid='1', classname='keyword')

0 commit comments

Comments
 (0)