def test_sync_all_optimal_queries(self): """ Tests optimal queries of syncing all entities. """ # Create five test accounts accounts = [Account.objects.create() for i in range(5)] # Create two teams to assign to some of the accounts teams = [Team.objects.create() for i in range(2)] accounts[0].team = teams[0] accounts[0].save() accounts[1].team = teams[0] accounts[1].save() accounts[2].team = teams[1] accounts[2].save() accounts[3].team = teams[1] accounts[3].save() # Use an entity registry that only has accounts and teams. This ensures that other registered # entity models dont pollute the test case new_registry = EntityRegistry() new_registry.register_entity(AccountConfig) new_registry.register_entity(TeamConfig) with patch('entity.sync.entity_registry') as mock_entity_registry: mock_entity_registry.entity_registry = new_registry.entity_registry ContentType.objects.clear_cache() with self.assertNumQueries(19): sync_entities() self.assertEquals(Entity.objects.filter(entity_type=ContentType.objects.get_for_model(Account)).count(), 5) self.assertEquals(Entity.objects.filter(entity_type=ContentType.objects.get_for_model(Team)).count(), 2) self.assertEquals(Entity.objects.all().count(), 7) # There should be four entity relationships since four accounts have teams self.assertEquals(EntityRelationship.objects.all().count(), 4)
def test_register_non_model_or_qset(self): """ Tests that a value error is raised when trying to register something that isnt a model or a queryset. """ class InvalidEntityObject(object): pass with self.assertRaises(ValueError): EntityRegistry().register_entity(InvalidEntityObject)
def test_register_model(self): """ Tests registering a model class. """ class ValidRegistryModel(Model): pass entity_registry = EntityRegistry() entity_registry.register_entity(ValidRegistryModel) entity_registry_info = entity_registry._entity_registry[ValidRegistryModel] self.assertEquals(entity_registry_info[0], None) self.assertTrue(isinstance(entity_registry_info[1], EntityConfig))
def test_register_invalid_entity_config(self): """ Tests registering an invalid entity config with a model. """ class ValidRegistryModel(Model): pass class InvalidEntityConfig(object): pass entity_registry = EntityRegistry() with self.assertRaises(ValueError): entity_registry.register_entity(ValidRegistryModel, InvalidEntityConfig)
def test_register_invalid_entity_config_no_qset(self): """ Tests registering an invalid entity config that does not have queryset """ class ValidRegistryModel(Model): pass class InvalidEntityConfig(EntityConfig): pass entity_registry = EntityRegistry() with self.assertRaises(ValueError): entity_registry.register_entity(InvalidEntityConfig)
def test_register_valid_entity_config(self): """ Tests registering an entity config with a model. """ class ValidRegistryModel(Model): pass class ValidEntityConfig(EntityConfig): queryset = ValidRegistryModel.objects.all() entity_registry = EntityRegistry() entity_registry.register_entity(ValidEntityConfig) entity_registry_info = entity_registry._entity_registry[ValidRegistryModel] self.assertTrue(isinstance(entity_registry_info, ValidEntityConfig))
def test_register_valid_entity_config(self): """ Tests registering an entity config with a model. """ class ValidRegistryModel(Model): pass class ValidEntityConfig(EntityConfig): pass entity_registry = EntityRegistry() entity_registry.register_entity(ValidRegistryModel, ValidEntityConfig) entity_registry_info = entity_registry._entity_registry[ValidRegistryModel] self.assertEquals(entity_registry_info[0], None) self.assertTrue(isinstance(entity_registry_info[1], ValidEntityConfig))
def test_register_manager(self): """ Tests registering a manager class. """ class ValidRegistryManager(Manager): pass class ValidRegistryModel(Model): objects = ValidRegistryManager() entity_registry = EntityRegistry() entity_registry.register_entity(ValidRegistryModel.objects) entity_registry_info = entity_registry._entity_registry[ValidRegistryModel] self.assertTrue(isinstance(entity_registry_info[0], QuerySet)) self.assertEquals(entity_registry_info[0].model, ValidRegistryModel) self.assertTrue(isinstance(entity_registry_info[1], EntityConfig))
def test_register_inherited_model(self): """ Tests registering a model class that extends an abstract model. """ class BaseModel(Model): class Meta: abstract = True class ValidRegistryModel(BaseModel): pass entity_registry = EntityRegistry() entity_registry.register_entity(ValidRegistryModel) entity_registry_info = entity_registry._entity_registry[ValidRegistryModel] self.assertEquals(entity_registry_info[0], None) self.assertTrue(isinstance(entity_registry_info[1], EntityConfig))
def test_register_inherited_manager(self): """ Tests registering a manager class that extends another manager. """ class BaseManager(Manager): pass class ValidRegistryManager(BaseManager): pass class ValidRegistryModel(Model): objects = ValidRegistryManager() entity_registry = EntityRegistry() entity_registry.register_entity(ValidRegistryModel.objects) entity_registry_info = entity_registry._entity_registry[ValidRegistryModel] self.assertTrue(isinstance(entity_registry_info[0], QuerySet)) self.assertTrue(isinstance(entity_registry_info[1], EntityConfig))
def test_sync_all_optimal_queries(self): """ Tests optimal queries of syncing all entities. """ # Create five test accounts accounts = [Account.objects.create() for i in range(5)] # Create two teams to assign to some of the accounts teams = [Team.objects.create() for i in range(2)] accounts[0].team = teams[0] accounts[0].save() accounts[1].team = teams[0] accounts[1].save() accounts[2].team = teams[1] accounts[2].save() accounts[3].team = teams[1] accounts[3].save() # Use an entity registry that only has accounts and teams. This ensures that other registered # entity models dont pollute the test case new_registry = EntityRegistry() new_registry.register_entity( Account.objects.select_related('team', 'team2', 'team_group', 'competitor'), AccountConfig) new_registry.register_entity(Team.objects.select_related('team_group'), TeamConfig) with patch('entity.sync.entity_registry') as mock_entity_registry: mock_entity_registry.entity_registry = new_registry.entity_registry ContentType.objects.clear_cache() with self.assertNumQueries(20): sync_entities() self.assertEquals( Entity.objects.filter(entity_type=ContentType.objects. get_for_model(Account)).count(), 5) self.assertEquals( Entity.objects.filter( entity_type=ContentType.objects.get_for_model(Team)).count(), 2) self.assertEquals(Entity.objects.all().count(), 7) # There should be four entity relationships since four accounts have teams self.assertEquals(EntityRelationship.objects.all().count(), 4)