mirror of
https://github.com/Hopiu/django-cachalot.git
synced 2026-05-18 17:41:06 +00:00
Adds tests for many-to-many managers.
This commit is contained in:
parent
1c1b6ebd26
commit
7efb8ae232
2 changed files with 56 additions and 0 deletions
|
|
@ -4,6 +4,7 @@ from __future__ import unicode_literals
|
|||
import datetime
|
||||
|
||||
from django.contrib.auth.models import Group, Permission, User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.cache import cache
|
||||
from django.db import connection, transaction
|
||||
from django.db.models import Count
|
||||
|
|
@ -303,6 +304,23 @@ class ReadTestCase(TransactionTestCase):
|
|||
self.assertListEqual(data2, data1)
|
||||
self.assertListEqual(data2, [self.user, self.admin])
|
||||
|
||||
def test_many_to_many(self):
|
||||
u = User.objects.create_user('test_user')
|
||||
ct = ContentType.objects.get_for_model(User)
|
||||
u.user_permissions.add(
|
||||
Permission.objects.create(
|
||||
name='Can discuss', content_type=ct, codename='discuss'),
|
||||
Permission.objects.create(
|
||||
name='Can touch', content_type=ct, codename='touch'),
|
||||
Permission.objects.create(
|
||||
name='Can cuddle', content_type=ct, codename='cuddle'))
|
||||
with self.assertNumQueries(1):
|
||||
data1 = [p.codename for p in u.user_permissions.all()]
|
||||
with self.assertNumQueries(0):
|
||||
data2 = [p.codename for p in u.user_permissions.all()]
|
||||
self.assertListEqual(data2, data1)
|
||||
self.assertListEqual(data2, ['cuddle', 'discuss', 'touch'])
|
||||
|
||||
def test_subquery(self):
|
||||
with self.assertNumQueries(1):
|
||||
data1 = list(Test.objects.filter(owner__in=User.objects.all()))
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.auth.models import User, Permission, Group
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.exceptions import MultipleObjectsReturned
|
||||
from django.core.management import call_command
|
||||
from django.db import connection, transaction
|
||||
|
|
@ -285,6 +286,35 @@ class WriteTestCase(TransactionTestCase):
|
|||
data8 = [t.owner.username for t in Test.objects.all() if t.owner]
|
||||
self.assertListEqual(data8, ['user1', 'user2', 'user3'])
|
||||
|
||||
def test_invalidate_many_to_many(self):
|
||||
u = User.objects.create_user('test_user')
|
||||
ct = ContentType.objects.get_for_model(User)
|
||||
discuss = Permission.objects.create(
|
||||
name='Can discuss', content_type=ct, codename='discuss')
|
||||
touch = Permission.objects.create(
|
||||
name='Can touch', content_type=ct, codename='touch')
|
||||
cuddle = Permission.objects.create(
|
||||
name='Can cuddle', content_type=ct, codename='cuddle')
|
||||
u.user_permissions.add(discuss, touch, cuddle)
|
||||
with self.assertNumQueries(1):
|
||||
data1 = [p.codename for p in u.user_permissions.all()]
|
||||
self.assertListEqual(data1, ['cuddle', 'discuss', 'touch'])
|
||||
|
||||
touch.name = 'Can lick'
|
||||
touch.codename = 'lick'
|
||||
touch.save()
|
||||
|
||||
with self.assertNumQueries(1):
|
||||
data2 = [p.codename for p in u.user_permissions.all()]
|
||||
self.assertListEqual(data2, ['cuddle', 'discuss', 'lick'])
|
||||
|
||||
Permission.objects.filter(pk=discuss.pk).update(
|
||||
name='Can finger', codename='finger')
|
||||
|
||||
with self.assertNumQueries(1):
|
||||
data3 = [p.codename for p in u.user_permissions.all()]
|
||||
self.assertListEqual(data3, ['cuddle', 'finger', 'lick'])
|
||||
|
||||
def test_invalidate_aggregate(self):
|
||||
with self.assertNumQueries(1):
|
||||
self.assertEqual(User.objects.aggregate(n=Count('test'))['n'], 0)
|
||||
|
|
@ -790,6 +820,14 @@ class WriteTestCase(TransactionTestCase):
|
|||
self.assertEqual(modified_t_child.pk, t_child.pk)
|
||||
self.assertEqual(modified_t_child.name, 'modified')
|
||||
|
||||
with self.assertNumQueries(3 if self.is_sqlite else 2):
|
||||
TestChild.objects.filter(pk=t_child.pk).update(name='modified2')
|
||||
|
||||
with self.assertNumQueries(1):
|
||||
modified2_t_child = TestChild.objects.get()
|
||||
self.assertEqual(modified2_t_child.pk, t_child.pk)
|
||||
self.assertEqual(modified2_t_child.name, 'modified2')
|
||||
|
||||
def test_raw_insert(self):
|
||||
with self.assertNumQueries(1):
|
||||
self.assertListEqual(
|
||||
|
|
|
|||
Loading…
Reference in a new issue