class CachingQuerySetTests(TestCase):
    """
    Tests for django_cache_manager.cache_manager.CachingQuerySet
    """    

    def setUp(self):
        self.cache_manager = CacheManager()
        self.cache_manager.model = Manufacturer()
        self.query_set = Manufacturer.objects.filter(name='name')
        ManufacturerFactory.create(name='name')

    def test_iterate_cache_hit(self, mock_generate_key, mock_cache_backend, invalidate_model_cache):
        """
        A cache hit will not result in call to the database.
        """
        mock_generate_key.return_value = 'key'
        mock_cache_backend.get.return_value = ['result_1', 'result_2']
        results = list(self.query_set.iterator())
        self.assertEquals(results, ['result_1', 'result_2'])
        self.assertEquals(mock_cache_backend.set.call_count, 0)

    def test_iterate_cache_miss(self, mock_generate_key, mock_cache_backend, invalidate_model_cache):
        """
        A cache miss will result in call to the database.
        """
        mock_generate_key.return_value = 'key'
        mock_cache_backend.get.return_value = None
        results = list(self.query_set.iterator())
        self.assertEquals(results[0].name, 'name')
        self.assertEquals(mock_cache_backend.set.call_count, 1)

    def test_bulk_create(self, mock_generate_key, mock_cache_backend, invalidate_model_cache):
        """
        Bulk create invalidates model cache
        """
        self.cache_manager.bulk_create([
            Manufacturer(name='Toyota'),
            Manufacturer(name='BMW'),
        ])
        self.assertEquals(invalidate_model_cache.call_count, 1)

    def test_update(self, mock_generate_key, mock_cache_backend, invalidate_model_cache):
        """
        Updating several records at once invalidates model cache
        """
        self.query_set.update(name='name')
        self.assertEquals(invalidate_model_cache.call_count, 1)

    def test_catch_empty_result_set(self, mock_generate_key, mock_cache_backend, invalidate_model_cache):
        """
        When an EmptyResultSet exception is raised in the process
        of passing an empty iterable to an __in parameter, CacheManager
        should correctly handle it and return None.
        """
        mock_generate_key.side_effect = EmptyResultSet()
        manufacturers = Manufacturer.objects.filter(name__in=[])
        self.assertEqual([], list(manufacturers))
class CacheManagerTests(TestCase):
    """
    Tests for django_cache_manager.cache_manager.CacheManager
    """

    def setUp(self):
        self.cache_manager = CacheManager()
        self.cache_manager.model = Manufacturer()

    def test_get_query_set(self):
        self.assertTrue(isinstance(self.cache_manager.get_query_set(), CachingQuerySet))

    def test_get_queryset(self):
        self.assertTrue(isinstance(self.cache_manager.get_queryset(), CachingQuerySet))        
Exemplo n.º 3
0
class CacheManagerTests(TestCase):
    """
    Tests for django_cache_manager.cache_manager.CacheManager
    """
    def setUp(self):
        self.cache_manager = CacheManager()
        self.cache_manager.model = Manufacturer()

    def test_get_query_set(self):
        self.assertTrue(
            isinstance(self.cache_manager.get_query_set(), CachingQuerySet))

    def test_get_queryset(self):
        self.assertTrue(
            isinstance(self.cache_manager.get_queryset(), CachingQuerySet))
Exemplo n.º 4
0
class Car(models.Model):
    make = models.ForeignKey('Manufacturer', related_name='cars')
    model = models.CharField(max_length=128)
    year = models.IntegerField()
    engine = models.OneToOneField('Engine')

    objects = CacheManager()
Exemplo n.º 5
0
class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

    objects = CacheManager()
Exemplo n.º 6
0
class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person,
                                     through='Membership',
                                     related_name='groups')

    objects = CacheManager()
Exemplo n.º 7
0
class Manufacturer(models.Model):
    name = models.CharField(max_length=128)

    objects = CacheManager()
Exemplo n.º 8
0
class Engine(models.Model):
    name = models.CharField(max_length=128)
    horse_power = models.IntegerField()
    torque = models.CharField(max_length=128)

    objects = CacheManager()
Exemplo n.º 9
0
class Driver(models.Model):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    cars = models.ManyToManyField('Car')

    objects = CacheManager()
Exemplo n.º 10
0
 def setUp(self):
     self.cache_manager = CacheManager()
     self.cache_manager.model = Manufacturer()
     self.query_set = Manufacturer.objects.filter(name='name')
     ManufacturerFactory.create(name='name')
Exemplo n.º 11
0
class CachingQuerySetTests(TestCase):
    """
    Tests for django_cache_manager.cache_manager.CachingQuerySet
    """
    def setUp(self):
        self.cache_manager = CacheManager()
        self.cache_manager.model = Manufacturer()
        self.query_set = Manufacturer.objects.filter(name='name')
        ManufacturerFactory.create(name='name')

    def test_iterate_cache_hit(self, mock_generate_key, mock_cache_backend,
                               invalidate_model_cache):
        """
        A cache hit will not result in call to the database.
        """
        mock_generate_key.return_value = 'key'
        mock_cache_backend.get.return_value = ['result_1', 'result_2']
        results = list(self.query_set.iterator())
        self.assertEquals(results, ['result_1', 'result_2'])
        self.assertEquals(mock_cache_backend.set.call_count, 0)

    def test_iterate_cache_miss(self, mock_generate_key, mock_cache_backend,
                                invalidate_model_cache):
        """
        A cache miss will result in call to the database.
        """
        mock_generate_key.return_value = 'key'
        mock_cache_backend.get.return_value = None
        results = list(self.query_set.iterator())
        self.assertEquals(results[0].name, 'name')
        self.assertEquals(mock_cache_backend.set.call_count, 1)

    def test_bulk_create(self, mock_generate_key, mock_cache_backend,
                         invalidate_model_cache):
        """
        Bulk create invalidates model cache
        """
        self.cache_manager.bulk_create([
            Manufacturer(name='Toyota'),
            Manufacturer(name='BMW'),
        ])
        self.assertEquals(invalidate_model_cache.call_count, 1)

    def test_update(self, mock_generate_key, mock_cache_backend,
                    invalidate_model_cache):
        """
        Updating several records at once invalidates model cache
        """
        self.query_set.update(name='name')
        self.assertEquals(invalidate_model_cache.call_count, 1)

    def test_catch_empty_result_set(self, mock_generate_key,
                                    mock_cache_backend,
                                    invalidate_model_cache):
        """
        When an EmptyResultSet exception is raised in the process
        of passing an empty iterable to an __in parameter, CacheManager
        should correctly handle it and return None.
        """
        mock_generate_key.side_effect = EmptyResultSet()
        manufacturers = Manufacturer.objects.filter(name__in=[])
        self.assertEqual([], list(manufacturers))
Exemplo n.º 12
0
 def setUp(self):
     self.cache_manager = CacheManager()
     self.cache_manager.model = Manufacturer()
Exemplo n.º 13
0
class Person(models.Model):
    name = models.CharField(max_length=128)

    objects = CacheManager()
 def setUp(self):
     self.cache_manager = CacheManager()
     self.cache_manager.model = Manufacturer()
     self.query_set = Manufacturer.objects.filter(name='name')
     ManufacturerFactory.create(name='name')
 def setUp(self):
     self.cache_manager = CacheManager()
     self.cache_manager.model = Manufacturer()