Skip to content

Commit

Permalink
Tests for CreateModelMixin (unit and integration test via ListOrCreat…
Browse files Browse the repository at this point in the history
…eModelView).
  • Loading branch information
fzunino committed Jul 8, 2011
1 parent a634d10 commit 8a2944a
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
56 changes: 56 additions & 0 deletions djangorestframework/tests/mixins.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
"""Tests for the status module"""
from django.test import TestCase
from djangorestframework import status
from djangorestframework.compat import RequestFactory
from django.contrib.auth.models import Group, User
from djangorestframework.mixins import CreateModelMixin
from djangorestframework.resources import ModelResource


class TestModelCreation(TestCase):
"""Tests on CreateModelMixin"""

def setUp(self):
self.req = RequestFactory()

def test_creation(self):
self.assertEquals(0, Group.objects.count())

class GroupResource(ModelResource):
model = Group

form_data = {'name': 'foo'}
request = self.req.post('/groups', data=form_data)
mixin = CreateModelMixin()
mixin.resource = GroupResource
mixin.CONTENT = form_data

response = mixin.post(request)
self.assertEquals(1, Group.objects.count())
self.assertEquals('foo', response.cleaned_content.name)


def test_creation_with_m2m_relation(self):
class UserResource(ModelResource):
model = User

def url(self, instance):
return "/users/%i" % instance.id

group = Group(name='foo')
group.save()

form_data = {'username': 'bar', 'password': 'baz', 'groups': [group.id]}
request = self.req.post('/groups', data=form_data)
cleaned_data = dict(form_data)
cleaned_data['groups'] = [group]
mixin = CreateModelMixin()
mixin.resource = UserResource
mixin.CONTENT = cleaned_data

response = mixin.post(request)
self.assertEquals(1, User.objects.count())
self.assertEquals(1, response.cleaned_content.groups.count())
self.assertEquals('foo', response.cleaned_content.groups.all()[0].name)


59 changes: 59 additions & 0 deletions djangorestframework/tests/modelviews.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from django.conf.urls.defaults import patterns, url
from django.test import TestCase
from django.forms import ModelForm
from django.contrib.auth.models import Group, User
from djangorestframework.resources import ModelResource
from djangorestframework.views import ListOrCreateModelView, InstanceModelView

class GroupResource(ModelResource):
model = Group

class UserForm(ModelForm):
class Meta:
model = User
exclude = ('last_login', 'date_joined')

class UserResource(ModelResource):
model = User
form = UserForm

urlpatterns = patterns('',
url(r'^users/$', ListOrCreateModelView.as_view(resource=UserResource), name='users'),
url(r'^users/(?P<id>[0-9]+)/$', InstanceModelView.as_view(resource=UserResource)),
url(r'^groups/$', ListOrCreateModelView.as_view(resource=GroupResource), name='groups'),
url(r'^groups/(?P<id>[0-9]+)/$', InstanceModelView.as_view(resource=GroupResource)),
)


class ModelViewTests(TestCase):
"""Test the model views djangorestframework provides"""
urls = 'djangorestframework.tests.modelviews'

def test_creation(self):
"""Ensure that a model object can be created"""
self.assertEqual(0, Group.objects.count())

response = self.client.post('/groups/', {'name': 'foo'})

self.assertEqual(response.status_code, 201)
self.assertEqual(1, Group.objects.count())
self.assertEqual('foo', Group.objects.all()[0].name)

def test_creation_with_m2m_relation(self):
"""Ensure that a model object with a m2m relation can be created"""
group = Group(name='foo')
group.save()
self.assertEqual(0, User.objects.count())

response = self.client.post('/users/', {'username': 'bar', 'password': 'baz', 'groups': [group.id]})

self.assertEqual(response.status_code, 201)
self.assertEqual(1, User.objects.count())

user = User.objects.all()[0]
self.assertEqual('bar', user.username)
self.assertEqual('baz', user.password)
self.assertEqual(1, user.groups.count())

group = user.groups.all()[0]
self.assertEqual('foo', group.name)

0 comments on commit 8a2944a

Please sign in to comment.