Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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))
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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))
Пример #7
0
    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))
Пример #8
0
    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))
Пример #9
0
    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))
Пример #10
0
    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))
Пример #11
0
    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)