mirror of
https://github.com/Hopiu/django-cachalot.git
synced 2026-05-10 05:34:45 +00:00
84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
# coding: utf-8
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
from django.db import connection, transaction
|
|
from django.test import TransactionTestCase
|
|
|
|
from ..api import *
|
|
from .models import Test
|
|
|
|
|
|
class APITestCase(TransactionTestCase):
|
|
def setUp(self):
|
|
self.t1 = Test.objects.create(name='test1')
|
|
self.cursor = connection.cursor()
|
|
self.is_sqlite = connection.vendor == 'sqlite'
|
|
|
|
def test_invalidate_tables(self):
|
|
with self.assertNumQueries(1):
|
|
data1 = list(Test.objects.values_list('name', flat=True))
|
|
self.assertListEqual(data1, ['test1'])
|
|
|
|
with self.settings(CACHALOT_INVALIDATE_RAW=False):
|
|
self.cursor.execute(
|
|
"INSERT INTO cachalot_test (name, public) "
|
|
"VALUES ('test2', %s);", [1 if self.is_sqlite else 'true'])
|
|
|
|
with self.assertNumQueries(0):
|
|
data2 = list(Test.objects.values_list('name', flat=True))
|
|
self.assertListEqual(data2, ['test1'])
|
|
|
|
invalidate_tables(['cachalot_test'])
|
|
|
|
with self.assertNumQueries(1):
|
|
data3 = list(Test.objects.values_list('name', flat=True))
|
|
self.assertListEqual(data3, ['test1', 'test2'])
|
|
|
|
def test_invalidate_models(self):
|
|
with self.assertNumQueries(1):
|
|
data1 = list(Test.objects.values_list('name', flat=True))
|
|
self.assertListEqual(data1, ['test1'])
|
|
|
|
with self.settings(CACHALOT_INVALIDATE_RAW=False):
|
|
self.cursor.execute(
|
|
"INSERT INTO cachalot_test (name, public) "
|
|
"VALUES ('test2', %s);", [1 if self.is_sqlite else 'true'])
|
|
|
|
with self.assertNumQueries(0):
|
|
data2 = list(Test.objects.values_list('name', flat=True))
|
|
self.assertListEqual(data2, ['test1'])
|
|
|
|
invalidate_models([Test])
|
|
|
|
with self.assertNumQueries(1):
|
|
data3 = list(Test.objects.values_list('name', flat=True))
|
|
self.assertListEqual(data3, ['test1', 'test2'])
|
|
|
|
def test_invalidate_all(self):
|
|
with self.assertNumQueries(1):
|
|
Test.objects.get()
|
|
|
|
with self.assertNumQueries(0):
|
|
Test.objects.get()
|
|
|
|
invalidate_all()
|
|
|
|
with self.assertNumQueries(1):
|
|
Test.objects.get()
|
|
|
|
def test_invalidate_all_in_atomic(self):
|
|
with transaction.atomic():
|
|
with self.assertNumQueries(1):
|
|
Test.objects.get()
|
|
|
|
with self.assertNumQueries(0):
|
|
Test.objects.get()
|
|
|
|
invalidate_all()
|
|
|
|
with self.assertNumQueries(1):
|
|
Test.objects.get()
|
|
|
|
with self.assertNumQueries(1):
|
|
Test.objects.get()
|