69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
# coding: utf-8
|
||
|
||
from __future__ import unicode_literals
|
||
from unittest import skipIf
|
||
|
||
from django.conf import settings
|
||
from django.db import DEFAULT_DB_ALIAS, connections
|
||
from django.test import TransactionTestCase
|
||
|
||
from .models import Test
|
||
|
||
|
||
@skipIf(len(settings.DATABASES) == 1,
|
||
'We can’t change the DB used since there’s only one configured')
|
||
class MultiDatabaseTestCase(TransactionTestCase):
|
||
multi_db = True
|
||
|
||
def setUp(self):
|
||
self.t1 = Test.objects.create(name='test1')
|
||
self.t2 = Test.objects.create(name='test2')
|
||
self.db_alias2 = next(alias for alias in settings.DATABASES
|
||
if alias != DEFAULT_DB_ALIAS)
|
||
self.is_sqlite2 = connections[self.db_alias2].vendor == 'sqlite'
|
||
|
||
def test_read(self):
|
||
with self.assertNumQueries(1):
|
||
data1 = list(Test.objects.all())
|
||
self.assertListEqual(data1, [self.t1, self.t2])
|
||
|
||
with self.assertNumQueries(1, using=self.db_alias2):
|
||
data2 = list(Test.objects.using(self.db_alias2))
|
||
self.assertListEqual(data2, [])
|
||
|
||
with self.assertNumQueries(0, using=self.db_alias2):
|
||
data3 = list(Test.objects.using(self.db_alias2))
|
||
self.assertListEqual(data3, [])
|
||
|
||
def test_invalidate_other_db(self):
|
||
"""
|
||
Tests if the non-default database is invalidated when modified.
|
||
"""
|
||
with self.assertNumQueries(1, using=self.db_alias2):
|
||
data1 = list(Test.objects.using(self.db_alias2))
|
||
self.assertListEqual(data1, [])
|
||
|
||
with self.assertNumQueries(2 if self.is_sqlite2 else 1,
|
||
using=self.db_alias2):
|
||
t3 = Test.objects.using(self.db_alias2).create(name='test3')
|
||
|
||
with self.assertNumQueries(1, using=self.db_alias2):
|
||
data2 = list(Test.objects.using(self.db_alias2))
|
||
self.assertListEqual(data2, [t3])
|
||
|
||
def test_invalidation_independence(self):
|
||
"""
|
||
Tests if invalidation doesn’t affect the unmodified databases.
|
||
"""
|
||
with self.assertNumQueries(1):
|
||
data1 = list(Test.objects.all())
|
||
self.assertListEqual(data1, [self.t1, self.t2])
|
||
|
||
with self.assertNumQueries(2 if self.is_sqlite2 else 1,
|
||
using=self.db_alias2):
|
||
Test.objects.using(self.db_alias2).create(name='test3')
|
||
|
||
with self.assertNumQueries(0):
|
||
data2 = list(Test.objects.all())
|
||
self.assertListEqual(data2, [self.t1, self.t2])
|