mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-12-03 23:14:07 +03:00
133 lines
4.1 KiB
Python
133 lines
4.1 KiB
Python
from djangorestframework.views import View
|
|
from djangorestframework.resources import ModelResource
|
|
from djangorestframework.tests.testcases import TestModelsTestCase
|
|
from djangorestframework.compat import RequestFactory
|
|
from djangorestframework.tests.models import CustomUser
|
|
from django.contrib.auth.models import Group, User
|
|
|
|
class MockView(View):
|
|
"""This is a basic mock view"""
|
|
pass
|
|
|
|
class TestModelCreation(TestModelsTestCase):
|
|
"""Tests on CreateModelMixin"""
|
|
|
|
def setUp(self):
|
|
super(TestModelsTestCase, self).setUp()
|
|
self.req = RequestFactory()
|
|
|
|
def test_create(self):
|
|
self.assertEquals(0, Group.objects.count())
|
|
|
|
class GroupResource(ModelResource):
|
|
model = Group
|
|
|
|
request = self.req.post('/groups', data={})
|
|
args = []
|
|
kwargs = {'name': 'foo'}
|
|
|
|
resource = GroupResource(view=MockView.as_view())
|
|
resource.create(request, *args, **kwargs)
|
|
|
|
self.assertEquals(1, Group.objects.count())
|
|
self.assertEquals('foo', resource.instance.name)
|
|
|
|
def test_update(self):
|
|
self.assertEquals(0, Group.objects.count())
|
|
|
|
class GroupResource(ModelResource):
|
|
model = Group
|
|
|
|
group = Group(name='foo')
|
|
group.save()
|
|
|
|
request = self.req.post('/groups', data={})
|
|
args = []
|
|
kwargs = {}
|
|
data = {'name': 'bla'}
|
|
|
|
resource = GroupResource(instance=group, view=MockView.as_view())
|
|
resource.update(data, request, *args, **kwargs)
|
|
|
|
self.assertEquals('bla', resource.instance.name)
|
|
|
|
def test_update_with_m2m_relation(self):
|
|
class UserResource(ModelResource):
|
|
model = User
|
|
|
|
def url(self, instance):
|
|
return "/users/%i" % instance.id
|
|
|
|
group = Group(name='foo')
|
|
group.save()
|
|
user = User(username='bar')
|
|
user.save()
|
|
|
|
form_data = {
|
|
'username': 'bar',
|
|
'password': 'baz',
|
|
'groups': [group.id]
|
|
}
|
|
request = self.req.post('/groups', data=form_data)
|
|
args = []
|
|
kwargs = {}
|
|
cleaned_data = dict(form_data, groups=[group])
|
|
|
|
resource = UserResource(instance=user, view=MockView.as_view())
|
|
resource.update(cleaned_data, request, *args, **kwargs)
|
|
|
|
self.assertEquals(1, resource.instance.groups.count())
|
|
self.assertEquals('foo', resource.instance.groups.all()[0].name)
|
|
|
|
def test_update_with_m2m_relation_through(self):
|
|
"""
|
|
Tests creation where the m2m relation uses a through table
|
|
"""
|
|
class UserResource(ModelResource):
|
|
model = CustomUser
|
|
|
|
def url(self, instance):
|
|
return "/customusers/%i" % instance.id
|
|
|
|
user = User(username='bar')
|
|
user.save()
|
|
|
|
form_data = {'groups': []}
|
|
request = self.req.post('/groups', data=form_data)
|
|
args = []
|
|
kwargs = {}
|
|
cleaned_data = dict(form_data, groups=[])
|
|
|
|
resource = UserResource(instance=user, view=MockView.as_view())
|
|
resource.update(cleaned_data, request, *args, **kwargs)
|
|
|
|
self.assertEquals(0, resource.instance.groups.count())
|
|
|
|
|
|
group = Group(name='foo1')
|
|
group.save()
|
|
|
|
form_data = {'groups': [group.id]}
|
|
request = self.req.post('/groups', data=form_data)
|
|
cleaned_data = dict(form_data, groups=[group])
|
|
|
|
resource.update(cleaned_data, request, *args, **kwargs)
|
|
|
|
self.assertEquals(1, resource.instance.groups.count())
|
|
self.assertEquals('foo1', resource.instance.groups.all()[0].name)
|
|
|
|
|
|
group2 = Group(name='foo2')
|
|
group2.save()
|
|
|
|
form_data = {'username': 'bar2', 'groups': [group.id, group2.id]}
|
|
request = self.req.post('/groups', data=form_data)
|
|
cleaned_data = dict(form_data, groups=[group, group2])
|
|
|
|
resource.update(cleaned_data, request, *args, **kwargs)
|
|
|
|
self.assertEquals(2, resource.instance.groups.count())
|
|
self.assertEquals('foo1', resource.instance.groups.all()[0].name)
|
|
self.assertEquals('foo2', resource.instance.groups.all()[1].name)
|
|
|