예제 #1
0
 def setUp(self):
     from databaserouters import AppModelRouter
     settings.APP_MODEL_DATABASE_ROUTING = {}
     self.router = AppModelRouter()
예제 #2
0
class AppModelRouterTestCase(unittest.TestCase):

    def setUp(self):
        from databaserouters import AppModelRouter
        settings.APP_MODEL_DATABASE_ROUTING = {}
        self.router = AppModelRouter()

    def test_check_configuration(self):
        # If no APP_MODEL_DATABASE_ROUTING settings is specified an ImproperlyConfigured
        # exception should be raised.
        try:
            del settings.APP_MODEL_DATABASE_ROUTING
        except AttributeError:
            pass
        self.assertRaises(ImproperlyConfigured, self.router.check_configuration)     

        # If an invalid APP_MODEL_DATABASE_ROUTING setting is specified an ImproperlConfigured
        # exception should be raised.
        settings.APP_MODEL_DATABASE_ROUTING = None
        self.assertRaises(ImproperlyConfigured, self.router.check_configuration)     
        
    def test_allow_syncdb(self):
        # Return False if the model is not specified for the allow_syncdb router.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {'default': []},
        }
        self.failIf(self.router.allow_syncdb(db='default', model=TestModel))
        
        # Return False if the model is specified for the allow_syncdb router but not for the database.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {'invalid_database': ['databaserouters.testmodel']},
        }
        self.failIf(self.router.allow_syncdb(db='default', model=TestModel))
        
        # Return True if the model is specified for the allow_syncdb router and database.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {'default': ['databaserouters.testmodel']},
        }
        self.failUnless(self.router.allow_syncdb(db='default', model=TestModel))
    
    def test_db_for_read(self):
        # Return None if the the model is not specified for the db_for_read router
        settings.APP_MODEL_DATABASE_ROUTING = {
            'db_for_read': {
                'default': [],
            },
        }
        self.failIf(self.router.db_for_read(model=TestModel))
        
        # Return the first database the the model is specified for under the db_for_read router
        settings.APP_MODEL_DATABASE_ROUTING = {
            'db_for_read': {
                'default': ['databaserouters.testmodel'],
                'some_other_database': ['databaserouters.testmodel'],
            },
        }
        self.failUnless(self.router.db_for_read(model=TestModel) == 'default')
    
    def test_db_for_write(self):
        # Return None if the the model is not specified for the db_for_write router
        settings.APP_MODEL_DATABASE_ROUTING = {
            'db_for_write': {
                'default': [],
            },
        }
        self.failIf(self.router.db_for_write(model=TestModel))
        
        # Return the first database the the model is specified for under the db_for_write router
        settings.APP_MODEL_DATABASE_ROUTING = {
            'db_for_write': {
                'default': ['databaserouters.testmodel'],
                'some_other_database': ['databaserouters.testmodel'],
            },
        }
        self.failUnless(self.router.db_for_write(model=TestModel) == 'default')
   
    def test_resolve_dbs_for_router_by_model(self):
        # Return the empty list if an invalid router is specified.
        self.failUnless(self.router.resolve_dbs_for_router_by_model(model=TestModel, router='invalid_router') == [])
        
        # Return the empty list if an valid router is specified but without any databases.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {}
        }
        self.failUnless(self.router.resolve_dbs_for_router_by_model(model=TestModel, router='allow_syncdb') == [])
        
        # Return the empty list if an valid router is specified with a database but without any models.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {'default': []}
        }
        self.failUnless(self.router.resolve_dbs_for_router_by_model(model=TestModel, router='allow_syncdb') == [])
        
        # Return the empty list if an valid router is specified with a database but with an invalid model.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {'default': ['invalid.model']}
        }
        self.failUnless(self.router.resolve_dbs_for_router_by_model(model=TestModel, router='allow_syncdb') == [])
        
        # Return the list of databases if a valid router is specified with a database and models.
        settings.APP_MODEL_DATABASE_ROUTING = {
            'allow_syncdb': {'default': ['databaserouters.testmodel']}
        }
        self.failUnless('default' in self.router.resolve_dbs_for_router_by_model(model=TestModel, router='allow_syncdb'))