Skip to content

Commit 2b716e9

Browse files
committed
Use self.dirname, add testing for genconfig/updateconfig
Add comparison of updateconfig to config.ini. Should be same except for timestamp line. Replace hardcoded _test_admin with self.dirname.
1 parent a3e04a0 commit 2b716e9

File tree

1 file changed

+68
-36
lines changed

1 file changed

+68
-36
lines changed

test/test_admin.py

Lines changed: 68 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ def captured_output():
3434
finally:
3535
sys.stdout, sys.stderr = old_out, old_err
3636

37+
def normalize_file(filename, skiplines = [ None ]):
38+
# https://stackoverflow.com/questions/4710067/using-python-for-deleting-a-specific-line-in-a-file
39+
40+
with open(filename, "r+") as f:
41+
d = f.readlines()
42+
f.seek(0)
43+
for i in d:
44+
for skip in skiplines:
45+
if skip not in i:
46+
f.write(i)
47+
f.truncate()
48+
3749
class AdminTest(object):
3850

3951
backend = None
@@ -64,7 +76,7 @@ def install_init(self, type="classic",
6476

6577
# Run under context manager to suppress output of help text.
6678
with captured_output() as (out, err):
67-
sys.argv=['main', '-i', '_test_admin', 'install',
79+
sys.argv=['main', '-i', self.dirname, 'install',
6880
type, self.backend, settings ]
6981
ret = admin.main()
7082
self.assertEqual(ret, 0)
@@ -77,7 +89,7 @@ def install_init(self, type="classic",
7789

7890
# initialize tracker with initial_data.py. Put password
7991
# on cli so I don't have to respond to prompting.
80-
sys.argv=['main', '-i', '_test_admin', 'initialise', 'admin']
92+
sys.argv=['main', '-i', self.dirname, 'initialise', 'admin']
8193
admin.force = True # force it to nuke existing database
8294
ret = admin.main()
8395
self.assertEqual(ret, 0)
@@ -94,7 +106,7 @@ def testGet(self):
94106
self.admin=AdminTool()
95107

96108
with captured_output() as (out, err):
97-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
109+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
98110
'title="foo bar"', 'assignedto=admin' ]
99111
ret = self.admin.main()
100112

@@ -104,7 +116,7 @@ def testGet(self):
104116

105117
self.admin=AdminTool()
106118
with captured_output() as (out, err):
107-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
119+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
108120
'title="bar foo bar"', 'assignedto=anonymous',
109121
'superseder=1']
110122
ret = self.admin.main()
@@ -116,7 +128,7 @@ def testGet(self):
116128

117129
self.admin=AdminTool()
118130
with captured_output() as (out, err):
119-
sys.argv=['main', '-i', '_test_admin', 'get', 'assignedto',
131+
sys.argv=['main', '-i', self.dirname, 'get', 'assignedto',
120132
'issue2' ]
121133
ret = self.admin.main()
122134

@@ -128,7 +140,7 @@ def testGet(self):
128140

129141
self.admin=AdminTool()
130142
with captured_output() as (out, err):
131-
sys.argv=['main', '-i', '_test_admin', 'get', 'superseder',
143+
sys.argv=['main', '-i', self.dirname, 'get', 'superseder',
132144
'issue2' ]
133145
ret = self.admin.main()
134146

@@ -140,7 +152,7 @@ def testGet(self):
140152

141153
self.admin=AdminTool()
142154
with captured_output() as (out, err):
143-
sys.argv=['main', '-i', '_test_admin', 'get', 'title', 'issue1']
155+
sys.argv=['main', '-i', self.dirname, 'get', 'title', 'issue1']
144156
ret = self.admin.main()
145157

146158
self.assertEqual(ret, 0)
@@ -151,7 +163,7 @@ def testGet(self):
151163

152164
self.admin=AdminTool()
153165
with captured_output() as (out, err):
154-
sys.argv=['main', '-i', '_test_admin', 'get', 'tile', 'issue1']
166+
sys.argv=['main', '-i', self.dirname, 'get', 'tile', 'issue1']
155167
ret = self.admin.main()
156168

157169
expected_err = 'Error: no such issue property "tile"'
@@ -165,7 +177,7 @@ def testGet(self):
165177
def testInit(self):
166178
import sys
167179
self.admin=AdminTool()
168-
sys.argv=['main', '-i', '_test_admin', 'install', 'classic', self.backend]
180+
sys.argv=['main', '-i', self.dirname, 'install', 'classic', self.backend]
169181
ret = self.admin.main()
170182
print(ret)
171183
self.assertTrue(ret == 0)
@@ -176,7 +188,7 @@ def testInitWithConfig_ini(self):
176188
import sys
177189
from roundup.configuration import CoreConfig
178190
self.admin=AdminTool()
179-
sys.argv=['main', '-i', '_test_admin', 'install', 'classic', self.backend]
191+
sys.argv=['main', '-i', self.dirname, 'install', 'classic', self.backend]
180192
# create a config_ini.ini file in classic template
181193
templates=self.admin.listTemplates()
182194
config_ini_content = "[mail]\n# comment\ndebug = SendMail.LOG\n"
@@ -215,7 +227,7 @@ def testFind(self):
215227
self.install_init()
216228

217229
with captured_output() as (out, err):
218-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
230+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
219231
'title="foo bar"', 'assignedto=admin' ]
220232
ret = self.admin.main()
221233

@@ -225,7 +237,7 @@ def testFind(self):
225237

226238
self.admin=AdminTool()
227239
with captured_output() as (out, err):
228-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
240+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
229241
'title="bar foo bar"', 'assignedto=anonymous' ]
230242
ret = self.admin.main()
231243

@@ -235,7 +247,7 @@ def testFind(self):
235247

236248
self.admin=AdminTool()
237249
with captured_output() as (out, err):
238-
sys.argv=['main', '-i', '_test_admin', 'find', 'issue',
250+
sys.argv=['main', '-i', self.dirname, 'find', 'issue',
239251
'assignedto=1']
240252
ret = self.admin.main()
241253

@@ -249,7 +261,7 @@ def testFind(self):
249261
''' 1,2 should return all entries that have assignedto
250262
either admin or anonymous
251263
'''
252-
sys.argv=['main', '-i', '_test_admin', 'find', 'issue',
264+
sys.argv=['main', '-i', self.dirname, 'find', 'issue',
253265
'assignedto=1,2']
254266
ret = self.admin.main()
255267

@@ -265,7 +277,7 @@ def testFind(self):
265277
''' 1,2 should return all entries that have assignedto
266278
either admin or anonymous
267279
'''
268-
sys.argv=['main', '-i', '_test_admin', 'find', 'issue',
280+
sys.argv=['main', '-i', self.dirname, 'find', 'issue',
269281
'assignedto=admin,anonymous']
270282
ret = self.admin.main()
271283

@@ -280,13 +292,13 @@ def testGenconfigUpdate(self):
280292
the context managers capture the pdb prompts and this screws
281293
up the stdout strings with (pdb) prefixed to the line.
282294
'''
283-
import sys
295+
import sys, filecmp
284296

285297
self.admin=AdminTool()
286298
self.install_init()
287299

288300
with captured_output() as (out, err):
289-
sys.argv=['main', '-i', '_test_admin', 'genconfig']
301+
sys.argv=['main', '-i', self.dirname, 'genconfig']
290302
ret = self.admin.main()
291303

292304
out = out.getvalue().strip()
@@ -298,27 +310,47 @@ def testGenconfigUpdate(self):
298310
self.admin=AdminTool()
299311

300312
with captured_output() as (out, err):
301-
sys.argv=['main', '-i', '_test_admin', 'genconfig', "foo"]
313+
sys.argv=['main', '-i', self.dirname, 'genconfig',
314+
self.dirname + "/config2.ini"]
302315
ret = self.admin.main()
303316

304317
out = out.getvalue().strip()
305318
print(out)
306319
# FIXME get better successful test later.
307320
expected = ""
308321
self.assertTrue(expected in out)
322+
self.assertTrue(os.path.isfile(self.dirname + "/config2.ini"))
323+
# Files aren't the same. Lines need to be removed.
324+
# like user, web, backend etc. Genconfig generates a file
325+
# to be customized.
326+
#self.assertTrue(filecmp.cmp(self.dirname + "/config2.ini",
327+
# self.dirname + "/config.ini"))
309328

310329
# Reopen the db closed by previous call
311330
self.admin=AdminTool()
312331

313332
with captured_output() as (out, err):
314-
sys.argv=['main', '-i', '_test_admin', 'update', "foo2"]
333+
sys.argv=['main', '-i', self.dirname, 'update',
334+
self.dirname + "/foo2.ini"]
315335
ret = self.admin.main()
316336

317337
out = out.getvalue().strip()
318338
print(out)
319339
# FIXME get better successful test later.
320340
expected = ""
321341
self.assertTrue(expected in out)
342+
self.assertTrue(os.path.isfile(self.dirname + "/foo2.ini"))
343+
344+
# Autogenerated date header is different. Remove it
345+
# so filecmp passes.
346+
normalize_file(self.dirname + "/foo2.ini",
347+
[ '# Autogenerated at' ])
348+
normalize_file(self.dirname + "/config.ini",
349+
[ '# Autogenerated at' ])
350+
351+
self.assertTrue(filecmp.cmp(self.dirname + "/config.ini",
352+
self.dirname + "/foo2.ini"))
353+
322354

323355
def testCliParse(self):
324356
''' Note the tests will fail if you run this under pdb.
@@ -336,7 +368,7 @@ def testCliParse(self):
336368
''' assignedto is not a valid property=value, so
337369
report error.
338370
'''
339-
sys.argv=['main', '-i', '_test_admin', 'fin', 'issue',
371+
sys.argv=['main', '-i', self.dirname, 'fin', 'issue',
340372
'assignedto=1']
341373
ret = self.admin.main()
342374

@@ -352,7 +384,7 @@ def testCliParse(self):
352384
''' assignedto is not a valid property=value, so
353385
report error.
354386
'''
355-
sys.argv=['main', '-i', '_test_admin', 'f', 'issue',
387+
sys.argv=['main', '-i', self.dirname, 'f', 'issue',
356388
'assignedto']
357389
ret = self.admin.main()
358390

@@ -368,7 +400,7 @@ def testCliParse(self):
368400
''' assignedto is not a valid property=value, so
369401
report error.
370402
'''
371-
sys.argv=['main', '-i', '_test_admin', 'xyzzy', 'issue',
403+
sys.argv=['main', '-i', self.dirname, 'xyzzy', 'issue',
372404
'assignedto']
373405
ret = self.admin.main()
374406

@@ -385,7 +417,7 @@ def testCliParse(self):
385417
''' assignedto is not a valid property=value, so
386418
report error.
387419
'''
388-
sys.argv=['main', '-i', '_test_admin', 'find', 'issue',
420+
sys.argv=['main', '-i', self.dirname, 'find', 'issue',
389421
'assignedto']
390422
ret = self.admin.main()
391423

@@ -405,7 +437,7 @@ def testFilter(self):
405437
self.install_init()
406438

407439
with captured_output() as (out, err):
408-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
440+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
409441
'title="foo bar"', 'assignedto=admin' ]
410442
ret = self.admin.main()
411443

@@ -415,7 +447,7 @@ def testFilter(self):
415447

416448
self.admin=AdminTool()
417449
with captured_output() as (out, err):
418-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
450+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
419451
'title="bar foo bar"', 'assignedto=anonymous' ]
420452
ret = self.admin.main()
421453

@@ -428,7 +460,7 @@ def testFilter(self):
428460
# test string - one results, one value, substring
429461
self.admin=AdminTool()
430462
with captured_output() as (out, err):
431-
sys.argv=['main', '-i', '_test_admin', 'filter', 'user',
463+
sys.argv=['main', '-i', self.dirname, 'filter', 'user',
432464
'username=admin']
433465
ret = self.admin.main()
434466

@@ -443,7 +475,7 @@ def testFilter(self):
443475
''' a,n should return all entries that have an a and n
444476
so admin or anonymous
445477
'''
446-
sys.argv=['main', '-i', '_test_admin', 'filter', 'user',
478+
sys.argv=['main', '-i', self.dirname, 'filter', 'user',
447479
'username=a,n']
448480
ret = self.admin.main()
449481

@@ -460,7 +492,7 @@ def testFilter(self):
460492
''' a,y should return all entries that have an a and y
461493
so anonymous
462494
'''
463-
sys.argv=['main', '-i', '_test_admin', 'filter', 'user',
495+
sys.argv=['main', '-i', self.dirname, 'filter', 'user',
464496
'username=a,y']
465497
ret = self.admin.main()
466498

@@ -474,7 +506,7 @@ def testFilter(self):
474506
with captured_output() as (out, err):
475507
''' will return empty set as admin!=anonymous
476508
'''
477-
sys.argv=['main', '-i', '_test_admin', 'filter', 'user',
509+
sys.argv=['main', '-i', self.dirname, 'filter', 'user',
478510
'username=admin,anonymous']
479511
ret = self.admin.main()
480512

@@ -486,7 +518,7 @@ def testFilter(self):
486518
# test link using ids
487519
self.admin=AdminTool()
488520
with captured_output() as (out, err):
489-
sys.argv=['main', '-i', '_test_admin', 'filter', 'issue',
521+
sys.argv=['main', '-i', self.dirname, 'filter', 'issue',
490522
'assignedto=1,2']
491523
ret = self.admin.main()
492524

@@ -500,7 +532,7 @@ def testFilter(self):
500532
with captured_output() as (out, err):
501533
''' will return empty set as admin!=anonymous
502534
'''
503-
sys.argv=['main', '-i', '_test_admin', 'filter', 'issue',
535+
sys.argv=['main', '-i', self.dirname, 'filter', 'issue',
504536
'assignedto=admin,anonymous']
505537
ret = self.admin.main()
506538

@@ -519,7 +551,7 @@ def testSet(self):
519551
self.admin=AdminTool()
520552

521553
with captured_output() as (out, err):
522-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
554+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
523555
'title="foo bar"', 'assignedto=admin' ]
524556
ret = self.admin.main()
525557

@@ -529,7 +561,7 @@ def testSet(self):
529561

530562
self.admin=AdminTool()
531563
with captured_output() as (out, err):
532-
sys.argv=['main', '-i', '_test_admin', 'create', 'issue',
564+
sys.argv=['main', '-i', self.dirname, 'create', 'issue',
533565
'title="bar foo bar"', 'assignedto=anonymous' ]
534566
ret = self.admin.main()
535567

@@ -539,7 +571,7 @@ def testSet(self):
539571

540572
self.admin=AdminTool()
541573
with captured_output() as (out, err):
542-
sys.argv=['main', '-i', '_test_admin', 'set', 'issue2', 'title="new title"']
574+
sys.argv=['main', '-i', self.dirname, 'set', 'issue2', 'title="new title"']
543575
ret = self.admin.main()
544576

545577
out = out.getvalue().strip()
@@ -549,7 +581,7 @@ def testSet(self):
549581

550582
self.admin=AdminTool()
551583
with captured_output() as (out, err):
552-
sys.argv=['main', '-i', '_test_admin', 'set', 'issue2', 'tile="new title"']
584+
sys.argv=['main', '-i', self.dirname, 'set', 'issue2', 'tile="new title"']
553585
ret = self.admin.main()
554586

555587
expected_err = "Error: 'tile' is not a property of issue"
@@ -583,7 +615,7 @@ def testSpecification(self):
583615
]
584616

585617
with captured_output() as (out, err):
586-
sys.argv=['main', '-i', '_test_admin', 'specification', 'user']
618+
sys.argv=['main', '-i', self.dirname, 'specification', 'user']
587619
ret = self.admin.main()
588620

589621
outlist = out.getvalue().strip().split("\n")

0 commit comments

Comments
 (0)