changeset 6178:227c05ce2d85

Nuke database on install and fix specification test Need to empty database as part of install_init(). Wasn't a problem for sqlite/anydbm as those got nuked by killing the test directory on each new test. For postgres/mysql in CI it needs to be nuked. Using admin.force=True to get the admin.py module to do it. If that doesn't work can open the instance and nuke it manually. Fields listed when getting specification for class are in different orders for different databases backends and versions. Use sorted lines for comparison.
author John Rouillard <rouilj@ieee.org>
date Tue, 19 May 2020 01:14:48 -0400
parents 41907e1f9c3f
children a701c9c81597
files test/test_admin.py
diffstat 1 files changed, 27 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/test/test_admin.py	Tue May 19 00:16:21 2020 -0400
+++ b/test/test_admin.py	Tue May 19 01:14:48 2020 -0400
@@ -13,6 +13,8 @@
 from .test_mysql import skip_mysql
 from .test_postgresql import skip_postgresql
 
+#from roundup import instance
+
 # https://stackoverflow.com/questions/4219717/how-to-assert-output-with-nosetest-unittest-in-python
 # lightly modified
 from contextlib import contextmanager
@@ -58,6 +60,7 @@
         '''
 
         admin=AdminTool()
+        admin.force = True  # force it to nuke existing tracker
 
         # Run under context manager to suppress output of help text.
         with captured_output() as (out, err):
@@ -66,12 +69,20 @@
             ret = admin.main()
         self.assertEqual(ret, 0)
 
+        # nuke any existing database (mysql/postgreql)
+        # possible method in case admin.force doesn't work
+        #tracker = instance.open(self.dirname)
+        #if tracker.exists():
+        #    tracker.nuke()
+
         # initialize tracker with initial_data.py. Put password
         # on cli so I don't have to respond to prompting.
         sys.argv=['main', '-i', '_test_admin', 'initialise', 'admin']
+        admin.force = True  # force it to nuke existing database
         ret = admin.main()
         self.assertEqual(ret, 0)
 
+
     def testInit(self):
         import sys
         self.admin=AdminTool()
@@ -309,27 +320,28 @@
         self.install_init()
         self.admin=AdminTool()
 
+        self.maxDiff = 0
         import inspect
         
-        spec='''username: <roundup.hyperdb.String> (key property)
-              alternate_addresses: <roundup.hyperdb.String>
-              realname: <roundup.hyperdb.String>
-              roles: <roundup.hyperdb.String>
-              organisation: <roundup.hyperdb.String>
-              queries: <roundup.hyperdb.Multilink to "query">
-              phone: <roundup.hyperdb.String>
-              address: <roundup.hyperdb.String>
-              timezone: <roundup.hyperdb.String>
-              password: <roundup.hyperdb.Password>'''
-
-        spec = inspect.cleandoc(spec)
+        spec= [ 'username: <roundup.hyperdb.String> (key property)',
+                'alternate_addresses: <roundup.hyperdb.String>',
+                'realname: <roundup.hyperdb.String>',
+                'roles: <roundup.hyperdb.String>',
+                'organisation: <roundup.hyperdb.String>',
+                'queries: <roundup.hyperdb.Multilink to "query">',
+                'phone: <roundup.hyperdb.String>',
+                'address: <roundup.hyperdb.String>',
+                'timezone: <roundup.hyperdb.String>',
+                'password: <roundup.hyperdb.Password>',
+            ]
+            
         with captured_output() as (out, err):
             sys.argv=['main', '-i', '_test_admin', 'specification', 'user']
             ret = self.admin.main()
 
-        out = out.getvalue().strip()
-        print(out)
-        self.assertEqual(out, spec)
+        outlist = out.getvalue().strip().split("\n")
+        print(outlist)
+        self.assertEqual(sorted(outlist), sorted(spec))
 
 
 class anydbmAdminTest(AdminTest, unittest.TestCase):

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