Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
6e6b35b5
Commit
6e6b35b5
authored
Jul 08, 2011
by
Craig Blaszczyk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add unit tests which show m2m creation failing for through table
parent
8a2944ac
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
84 additions
and
0 deletions
+84
-0
djangorestframework/runtests/settings.py
+1
-0
djangorestframework/tests/mixins.py
+27
-0
djangorestframework/tests/models.py
+29
-0
djangorestframework/tests/modelviews.py
+27
-0
No files found.
djangorestframework/runtests/settings.py
View file @
6e6b35b5
...
@@ -95,6 +95,7 @@ INSTALLED_APPS = (
...
@@ -95,6 +95,7 @@ INSTALLED_APPS = (
# Uncomment the next line to enable admin documentation:
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
# 'django.contrib.admindocs',
'djangorestframework'
,
'djangorestframework'
,
'djangorestframework.tests'
,
)
)
# OAuth support is optional, so we only test oauth if it's installed.
# OAuth support is optional, so we only test oauth if it's installed.
...
...
djangorestframework/tests/mixins.py
View file @
6e6b35b5
...
@@ -5,6 +5,7 @@ from djangorestframework.compat import RequestFactory
...
@@ -5,6 +5,7 @@ from djangorestframework.compat import RequestFactory
from
django.contrib.auth.models
import
Group
,
User
from
django.contrib.auth.models
import
Group
,
User
from
djangorestframework.mixins
import
CreateModelMixin
from
djangorestframework.mixins
import
CreateModelMixin
from
djangorestframework.resources
import
ModelResource
from
djangorestframework.resources
import
ModelResource
from
djangorestframework.tests.models
import
CustomUser
class
TestModelCreation
(
TestCase
):
class
TestModelCreation
(
TestCase
):
...
@@ -53,4 +54,30 @@ class TestModelCreation(TestCase):
...
@@ -53,4 +54,30 @@ class TestModelCreation(TestCase):
self
.
assertEquals
(
1
,
response
.
cleaned_content
.
groups
.
count
())
self
.
assertEquals
(
1
,
response
.
cleaned_content
.
groups
.
count
())
self
.
assertEquals
(
'foo'
,
response
.
cleaned_content
.
groups
.
all
()[
0
]
.
name
)
self
.
assertEquals
(
'foo'
,
response
.
cleaned_content
.
groups
.
all
()[
0
]
.
name
)
def
test_creation_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
group
=
Group
(
name
=
'foo'
)
group
.
save
()
form_data
=
{
'username'
:
'bar'
,
'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
,
CustomUser
.
objects
.
count
())
self
.
assertEquals
(
1
,
response
.
cleaned_content
.
groups
.
count
())
self
.
assertEquals
(
'foo'
,
response
.
cleaned_content
.
groups
.
all
()[
0
]
.
name
)
djangorestframework/tests/models.py
0 → 100644
View file @
6e6b35b5
from
django.db
import
models
from
django.contrib.auth.models
import
Group
class
CustomUser
(
models
.
Model
):
"""
A custom user model, which uses a 'through' table for the foreign key
"""
username
=
models
.
CharField
(
max_length
=
255
,
unique
=
True
)
groups
=
models
.
ManyToManyField
(
to
=
Group
,
blank
=
True
,
null
=
True
,
through
=
'UserGroupMap'
)
@models.permalink
def
get_absolute_url
(
self
):
return
(
'custom_user'
,
(),
{
'pk'
:
self
.
id
})
class
UserGroupMap
(
models
.
Model
):
user
=
models
.
ForeignKey
(
to
=
CustomUser
)
group
=
models
.
ForeignKey
(
to
=
Group
)
@models.permalink
def
get_absolute_url
(
self
):
return
(
'user_group_map'
,
(),
{
'pk'
:
self
.
id
})
\ No newline at end of file
djangorestframework/tests/modelviews.py
View file @
6e6b35b5
...
@@ -4,6 +4,7 @@ from django.forms import ModelForm
...
@@ -4,6 +4,7 @@ from django.forms import ModelForm
from
django.contrib.auth.models
import
Group
,
User
from
django.contrib.auth.models
import
Group
,
User
from
djangorestframework.resources
import
ModelResource
from
djangorestframework.resources
import
ModelResource
from
djangorestframework.views
import
ListOrCreateModelView
,
InstanceModelView
from
djangorestframework.views
import
ListOrCreateModelView
,
InstanceModelView
from
djangorestframework.tests.models
import
CustomUser
class
GroupResource
(
ModelResource
):
class
GroupResource
(
ModelResource
):
model
=
Group
model
=
Group
...
@@ -17,9 +18,14 @@ class UserResource(ModelResource):
...
@@ -17,9 +18,14 @@ class UserResource(ModelResource):
model
=
User
model
=
User
form
=
UserForm
form
=
UserForm
class
CustomUserResource
(
ModelResource
):
model
=
CustomUser
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
url
(
r'^users/$'
,
ListOrCreateModelView
.
as_view
(
resource
=
UserResource
),
name
=
'users'
),
url
(
r'^users/$'
,
ListOrCreateModelView
.
as_view
(
resource
=
UserResource
),
name
=
'users'
),
url
(
r'^users/(?P<id>[0-9]+)/$'
,
InstanceModelView
.
as_view
(
resource
=
UserResource
)),
url
(
r'^users/(?P<id>[0-9]+)/$'
,
InstanceModelView
.
as_view
(
resource
=
UserResource
)),
url
(
r'^customusers/$'
,
ListOrCreateModelView
.
as_view
(
resource
=
CustomUserResource
),
name
=
'customusers'
),
url
(
r'^customusers/(?P<id>[0-9]+)/$'
,
InstanceModelView
.
as_view
(
resource
=
CustomUserResource
)),
url
(
r'^groups/$'
,
ListOrCreateModelView
.
as_view
(
resource
=
GroupResource
),
name
=
'groups'
),
url
(
r'^groups/$'
,
ListOrCreateModelView
.
as_view
(
resource
=
GroupResource
),
name
=
'groups'
),
url
(
r'^groups/(?P<id>[0-9]+)/$'
,
InstanceModelView
.
as_view
(
resource
=
GroupResource
)),
url
(
r'^groups/(?P<id>[0-9]+)/$'
,
InstanceModelView
.
as_view
(
resource
=
GroupResource
)),
)
)
...
@@ -57,3 +63,24 @@ class ModelViewTests(TestCase):
...
@@ -57,3 +63,24 @@ class ModelViewTests(TestCase):
group
=
user
.
groups
.
all
()[
0
]
group
=
user
.
groups
.
all
()[
0
]
self
.
assertEqual
(
'foo'
,
group
.
name
)
self
.
assertEqual
(
'foo'
,
group
.
name
)
def
test_creation_with_m2m_relation_through
(
self
):
"""
Ensure that a model object with a m2m relation can be created where that
relation uses a through table
"""
group
=
Group
(
name
=
'foo'
)
group
.
save
()
self
.
assertEqual
(
0
,
User
.
objects
.
count
())
response
=
self
.
client
.
post
(
'/customusers/'
,
{
'username'
:
'bar'
,
'groups'
:
[
group
.
id
]})
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
1
,
CustomUser
.
objects
.
count
())
user
=
CustomUser
.
objects
.
all
()[
0
]
self
.
assertEqual
(
'bar'
,
user
.
username
)
self
.
assertEqual
(
1
,
user
.
groups
.
count
())
group
=
user
.
groups
.
all
()[
0
]
self
.
assertEqual
(
'foo'
,
group
.
name
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment