fix exception when iterating grouped devices
[mygpo.git] / mygpo / test.py
blob62785177dac2855897fee78e5337fed49b6baa31
1 import os.path
3 from django.conf import settings
4 from django.core.management.base import BaseCommand
6 from couchdbkit import Database
7 from couchdbkit.loaders import FileSystemDocsLoader
8 from couchdbkit.ext.django.testrunner import CouchDbKitTestSuiteRunner
10 from django.conf import settings
13 # inspired by
14 # http://djangosnippets.org/snippets/2211/
16 class MygpoTestSuiteRunner(CouchDbKitTestSuiteRunner):
17 """
18 Test runner that is able to skip some tests according to settings.py
19 """
21 def __init__(self, *args, **kwargs):
22 self.EXCLUDED_APPS = getattr(settings, 'TEST_EXCLUDE', [])
23 settings.TESTING = True
24 super(MygpoTestSuiteRunner, self).__init__(*args, **kwargs)
27 def setup_databases(self, **kwargs):
28 ret = super(MygpoTestSuiteRunner, self).setup_databases(**kwargs)
29 path = os.path.join(settings.BASE_DIR, '..', 'couchdb', '_design')
30 loader = FileSystemDocsLoader(path)
32 db_urls = set(db_url for pkg, db_url in self.dbs)
33 for db_url in db_urls:
34 db = Database(db_url)
35 loader.sync(db, verbose=True)
37 return ret
40 def build_suite(self, *args, **kwargs):
41 suite = super(MygpoTestSuiteRunner, self).build_suite(*args, **kwargs)
42 if not args[0] and not getattr(settings, 'RUN_ALL_TESTS', False):
43 tests = []
44 for case in suite:
45 pkg = case.__class__.__module__.split('.')[0]
46 if pkg not in self.EXCLUDED_APPS:
47 tests.append(case)
48 suite._tests = tests
49 return suite
52 def create_auth_string(username, password):
53 import base64
54 credentials = base64.encodestring("%s:%s" % (username, password)).rstrip()
55 auth_string = 'Basic %s' % credentials
56 return auth_string