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
7224b20d
Commit
7224b20d
authored
Jun 28, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added APIRequestFactory
parent
4ee9cdc7
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
180 additions
and
116 deletions
+180
-116
rest_framework/compat.py
+37
-1
rest_framework/renderers.py
+11
-0
rest_framework/response.py
+1
-1
rest_framework/test.py
+48
-0
rest_framework/tests/test_authentication.py
+3
-3
rest_framework/tests/test_decorators.py
+5
-6
rest_framework/tests/test_filters.py
+2
-2
rest_framework/tests/test_generics.py
+24
-36
rest_framework/tests/test_hyperlinkedserializers.py
+7
-4
rest_framework/tests/test_negotiation.py
+2
-2
rest_framework/tests/test_pagination.py
+3
-3
rest_framework/tests/test_permissions.py
+14
-21
rest_framework/tests/test_relations_hyperlink.py
+2
-2
rest_framework/tests/test_renderers.py
+3
-5
rest_framework/tests/test_request.py
+3
-12
rest_framework/tests/test_reverse.py
+2
-2
rest_framework/tests/test_routers.py
+3
-2
rest_framework/tests/test_throttling.py
+3
-3
rest_framework/tests/test_urlpatterns.py
+2
-2
rest_framework/tests/test_validation.py
+3
-5
rest_framework/tests/test_views.py
+2
-4
No files found.
rest_framework/compat.py
View file @
7224b20d
...
@@ -8,6 +8,7 @@ from __future__ import unicode_literals
...
@@ -8,6 +8,7 @@ from __future__ import unicode_literals
import
django
import
django
from
django.core.exceptions
import
ImproperlyConfigured
from
django.core.exceptions
import
ImproperlyConfigured
from
django.conf
import
settings
# Try to import six from Django, fallback to included `six`.
# Try to import six from Django, fallback to included `six`.
try
:
try
:
...
@@ -83,7 +84,6 @@ def get_concrete_model(model_cls):
...
@@ -83,7 +84,6 @@ def get_concrete_model(model_cls):
# Django 1.5 add support for custom auth user model
# Django 1.5 add support for custom auth user model
if
django
.
VERSION
>=
(
1
,
5
):
if
django
.
VERSION
>=
(
1
,
5
):
from
django.conf
import
settings
AUTH_USER_MODEL
=
settings
.
AUTH_USER_MODEL
AUTH_USER_MODEL
=
settings
.
AUTH_USER_MODEL
else
:
else
:
AUTH_USER_MODEL
=
'auth.User'
AUTH_USER_MODEL
=
'auth.User'
...
@@ -436,6 +436,42 @@ except ImportError:
...
@@ -436,6 +436,42 @@ except ImportError:
return
force_text
(
url
)
return
force_text
(
url
)
# RequestFactory only provide `generic` from 1.5 onwards
from
django.test.client
import
RequestFactory
as
DjangoRequestFactory
from
django.test.client
import
FakePayload
try
:
# In 1.5 the test client uses force_bytes
from
django.utils.encoding
import
force_bytes_or_smart_bytes
except
ImportError
:
# In 1.3 and 1.4 the test client just uses smart_str
from
django.utils.encoding
import
smart_str
as
force_bytes_or_smart_bytes
class
RequestFactory
(
DjangoRequestFactory
):
def
generic
(
self
,
method
,
path
,
data
=
''
,
content_type
=
'application/octet-stream'
,
**
extra
):
parsed
=
urlparse
.
urlparse
(
path
)
data
=
force_bytes_or_smart_bytes
(
data
,
settings
.
DEFAULT_CHARSET
)
r
=
{
'PATH_INFO'
:
self
.
_get_path
(
parsed
),
'QUERY_STRING'
:
force_text
(
parsed
[
4
]),
'REQUEST_METHOD'
:
str
(
method
),
}
if
data
:
r
.
update
({
'CONTENT_LENGTH'
:
len
(
data
),
'CONTENT_TYPE'
:
str
(
content_type
),
'wsgi.input'
:
FakePayload
(
data
),
})
elif
django
.
VERSION
<=
(
1
,
4
):
# For 1.3 we need an empty WSGI payload
r
.
update
({
'wsgi.input'
:
FakePayload
(
''
)
})
r
.
update
(
extra
)
return
self
.
request
(
**
r
)
# Markdown is optional
# Markdown is optional
try
:
try
:
import
markdown
import
markdown
...
...
rest_framework/renderers.py
View file @
7224b20d
...
@@ -14,6 +14,7 @@ from django import forms
...
@@ -14,6 +14,7 @@ from django import forms
from
django.core.exceptions
import
ImproperlyConfigured
from
django.core.exceptions
import
ImproperlyConfigured
from
django.http.multipartparser
import
parse_header
from
django.http.multipartparser
import
parse_header
from
django.template
import
RequestContext
,
loader
,
Template
from
django.template
import
RequestContext
,
loader
,
Template
from
django.test.client
import
encode_multipart
from
django.utils.xmlutils
import
SimplerXMLGenerator
from
django.utils.xmlutils
import
SimplerXMLGenerator
from
rest_framework.compat
import
StringIO
from
rest_framework.compat
import
StringIO
from
rest_framework.compat
import
six
from
rest_framework.compat
import
six
...
@@ -571,3 +572,13 @@ class BrowsableAPIRenderer(BaseRenderer):
...
@@ -571,3 +572,13 @@ class BrowsableAPIRenderer(BaseRenderer):
response
.
status_code
=
status
.
HTTP_200_OK
response
.
status_code
=
status
.
HTTP_200_OK
return
ret
return
ret
class
MultiPartRenderer
(
BaseRenderer
):
media_type
=
'multipart/form-data; boundary=BoUnDaRyStRiNg'
format
=
'form'
charset
=
'utf-8'
BOUNDARY
=
'BoUnDaRyStRiNg'
def
render
(
self
,
data
,
accepted_media_type
=
None
,
renderer_context
=
None
):
return
encode_multipart
(
self
.
BOUNDARY
,
data
)
rest_framework/response.py
View file @
7224b20d
...
@@ -50,7 +50,7 @@ class Response(SimpleTemplateResponse):
...
@@ -50,7 +50,7 @@ class Response(SimpleTemplateResponse):
charset
=
renderer
.
charset
charset
=
renderer
.
charset
content_type
=
self
.
content_type
content_type
=
self
.
content_type
if
content_type
is
None
and
charset
is
not
None
:
if
content_type
is
None
and
charset
is
not
None
and
';'
not
in
media_type
:
content_type
=
"{0}; charset={1}"
.
format
(
media_type
,
charset
)
content_type
=
"{0}; charset={1}"
.
format
(
media_type
,
charset
)
elif
content_type
is
None
:
elif
content_type
is
None
:
content_type
=
media_type
content_type
=
media_type
...
...
rest_framework/test.py
0 → 100644
View file @
7224b20d
from
rest_framework.compat
import
six
,
RequestFactory
from
rest_framework.renderers
import
JSONRenderer
,
MultiPartRenderer
class
APIRequestFactory
(
RequestFactory
):
renderer_classes
=
{
'json'
:
JSONRenderer
,
'form'
:
MultiPartRenderer
}
default_format
=
'form'
def
__init__
(
self
,
format
=
None
,
**
defaults
):
self
.
format
=
format
or
self
.
default_format
super
(
APIRequestFactory
,
self
)
.
__init__
(
**
defaults
)
def
_encode_data
(
self
,
data
,
format
,
content_type
):
if
not
data
:
return
(
''
,
None
)
format
=
format
or
self
.
format
if
content_type
is
None
and
data
is
not
None
:
renderer
=
self
.
renderer_classes
[
format
]()
data
=
renderer
.
render
(
data
)
# Determine the content-type header
if
';'
in
renderer
.
media_type
:
content_type
=
renderer
.
media_type
else
:
content_type
=
"{0}; charset={1}"
.
format
(
renderer
.
media_type
,
renderer
.
charset
)
# Coerce text to bytes if required.
if
isinstance
(
data
,
six
.
text_type
):
data
=
bytes
(
data
.
encode
(
renderer
.
charset
))
return
data
,
content_type
def
post
(
self
,
path
,
data
=
None
,
format
=
None
,
content_type
=
None
,
**
extra
):
data
,
content_type
=
self
.
_encode_data
(
data
,
format
,
content_type
)
return
self
.
generic
(
'POST'
,
path
,
data
,
content_type
,
**
extra
)
def
put
(
self
,
path
,
data
=
None
,
format
=
None
,
content_type
=
None
,
**
extra
):
data
,
content_type
=
self
.
_encode_data
(
data
,
format
,
content_type
)
return
self
.
generic
(
'PUT'
,
path
,
data
,
content_type
,
**
extra
)
def
patch
(
self
,
path
,
data
=
None
,
format
=
None
,
content_type
=
None
,
**
extra
):
data
,
content_type
=
self
.
_encode_data
(
data
,
format
,
content_type
)
return
self
.
generic
(
'PATCH'
,
path
,
data
,
content_type
,
**
extra
)
rest_framework/tests/test_authentication.py
View file @
7224b20d
...
@@ -21,14 +21,14 @@ from rest_framework.authtoken.models import Token
...
@@ -21,14 +21,14 @@ from rest_framework.authtoken.models import Token
from
rest_framework.compat
import
patterns
,
url
,
include
from
rest_framework.compat
import
patterns
,
url
,
include
from
rest_framework.compat
import
oauth2_provider
,
oauth2_provider_models
,
oauth2_provider_scope
from
rest_framework.compat
import
oauth2_provider
,
oauth2_provider_models
,
oauth2_provider_scope
from
rest_framework.compat
import
oauth
,
oauth_provider
from
rest_framework.compat
import
oauth
,
oauth_provider
from
rest_framework.test
s.utils
import
RequestFactory
from
rest_framework.test
import
API
RequestFactory
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
import
json
import
base64
import
base64
import
time
import
time
import
datetime
import
datetime
import
json
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
MockView
(
APIView
):
class
MockView
(
APIView
):
...
...
rest_framework/tests/test_decorators.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
status
from
rest_framework
import
status
from
rest_framework.authentication
import
BasicAuthentication
from
rest_framework.parsers
import
JSONParser
from
rest_framework.permissions
import
IsAuthenticated
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.renderers
import
JSONRenderer
from
rest_framework.renderers
import
JSONRenderer
from
rest_framework.parsers
import
JSONParser
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.authentication
import
BasicAuthentication
from
rest_framework.throttling
import
UserRateThrottle
from
rest_framework.throttling
import
UserRateThrottle
from
rest_framework.permissions
import
IsAuthenticated
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
rest_framework.decorators
import
(
from
rest_framework.decorators
import
(
api_view
,
api_view
,
...
@@ -17,13 +18,11 @@ from rest_framework.decorators import (
...
@@ -17,13 +18,11 @@ from rest_framework.decorators import (
permission_classes
,
permission_classes
,
)
)
from
rest_framework.tests.utils
import
RequestFactory
class
DecoratorTestCase
(
TestCase
):
class
DecoratorTestCase
(
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
factory
=
RequestFactory
()
self
.
factory
=
API
RequestFactory
()
def
_finalize_response
(
self
,
request
,
response
,
*
args
,
**
kwargs
):
def
_finalize_response
(
self
,
request
,
response
,
*
args
,
**
kwargs
):
response
.
request
=
request
response
.
request
=
request
...
...
rest_framework/tests/test_filters.py
View file @
7224b20d
...
@@ -4,13 +4,13 @@ from decimal import Decimal
...
@@ -4,13 +4,13 @@ from decimal import Decimal
from
django.db
import
models
from
django.db
import
models
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.utils
import
unittest
from
django.utils
import
unittest
from
rest_framework
import
generics
,
serializers
,
status
,
filters
from
rest_framework
import
generics
,
serializers
,
status
,
filters
from
rest_framework.compat
import
django_filters
,
patterns
,
url
from
rest_framework.compat
import
django_filters
,
patterns
,
url
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.tests.models
import
BasicModel
from
rest_framework.tests.models
import
BasicModel
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
FilterableItem
(
models
.
Model
):
class
FilterableItem
(
models
.
Model
):
...
...
rest_framework/tests/test_generics.py
View file @
7224b20d
...
@@ -3,12 +3,11 @@ from django.db import models
...
@@ -3,12 +3,11 @@ from django.db import models
from
django.shortcuts
import
get_object_or_404
from
django.shortcuts
import
get_object_or_404
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
generics
,
renderers
,
serializers
,
status
from
rest_framework
import
generics
,
renderers
,
serializers
,
status
from
rest_framework.test
s.utils
import
RequestFactory
from
rest_framework.test
import
API
RequestFactory
from
rest_framework.tests.models
import
BasicModel
,
Comment
,
SlugBasedModel
from
rest_framework.tests.models
import
BasicModel
,
Comment
,
SlugBasedModel
from
rest_framework.compat
import
six
from
rest_framework.compat
import
six
import
json
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
RootView
(
generics
.
ListCreateAPIView
):
class
RootView
(
generics
.
ListCreateAPIView
):
...
@@ -71,9 +70,8 @@ class TestRootView(TestCase):
...
@@ -71,9 +70,8 @@ class TestRootView(TestCase):
"""
"""
POST requests to ListCreateAPIView should create a new object.
POST requests to ListCreateAPIView should create a new object.
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
request
=
factory
.
post
(
'/'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
1
):
with
self
.
assertNumQueries
(
1
):
response
=
self
.
view
(
request
)
.
render
()
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
...
@@ -85,9 +83,8 @@ class TestRootView(TestCase):
...
@@ -85,9 +83,8 @@ class TestRootView(TestCase):
"""
"""
PUT requests to ListCreateAPIView should not be allowed
PUT requests to ListCreateAPIView should not be allowed
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
put
(
'/'
,
json
.
dumps
(
content
),
request
=
factory
.
put
(
'/'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
0
):
with
self
.
assertNumQueries
(
0
):
response
=
self
.
view
(
request
)
.
render
()
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
...
@@ -148,9 +145,8 @@ class TestRootView(TestCase):
...
@@ -148,9 +145,8 @@ class TestRootView(TestCase):
"""
"""
POST requests to create a new object should not be able to set the id.
POST requests to create a new object should not be able to set the id.
"""
"""
content
=
{
'id'
:
999
,
'text'
:
'foobar'
}
data
=
{
'id'
:
999
,
'text'
:
'foobar'
}
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
request
=
factory
.
post
(
'/'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
1
):
with
self
.
assertNumQueries
(
1
):
response
=
self
.
view
(
request
)
.
render
()
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
...
@@ -189,9 +185,8 @@ class TestInstanceView(TestCase):
...
@@ -189,9 +185,8 @@ class TestInstanceView(TestCase):
"""
"""
POST requests to RetrieveUpdateDestroyAPIView should not be allowed
POST requests to RetrieveUpdateDestroyAPIView should not be allowed
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
request
=
factory
.
post
(
'/'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
0
):
with
self
.
assertNumQueries
(
0
):
response
=
self
.
view
(
request
)
.
render
()
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
...
@@ -201,9 +196,8 @@ class TestInstanceView(TestCase):
...
@@ -201,9 +196,8 @@ class TestInstanceView(TestCase):
"""
"""
PUT requests to RetrieveUpdateDestroyAPIView should update an object.
PUT requests to RetrieveUpdateDestroyAPIView should update an object.
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
put
(
'/1'
,
json
.
dumps
(
content
),
request
=
factory
.
put
(
'/1'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
2
):
with
self
.
assertNumQueries
(
2
):
response
=
self
.
view
(
request
,
pk
=
'1'
)
.
render
()
response
=
self
.
view
(
request
,
pk
=
'1'
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
...
@@ -215,9 +209,8 @@ class TestInstanceView(TestCase):
...
@@ -215,9 +209,8 @@ class TestInstanceView(TestCase):
"""
"""
PATCH requests to RetrieveUpdateDestroyAPIView should update an object.
PATCH requests to RetrieveUpdateDestroyAPIView should update an object.
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
patch
(
'/1'
,
json
.
dumps
(
content
),
request
=
factory
.
patch
(
'/1'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
2
):
with
self
.
assertNumQueries
(
2
):
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
...
@@ -293,9 +286,8 @@ class TestInstanceView(TestCase):
...
@@ -293,9 +286,8 @@ class TestInstanceView(TestCase):
"""
"""
PUT requests to create a new object should not be able to set the id.
PUT requests to create a new object should not be able to set the id.
"""
"""
content
=
{
'id'
:
999
,
'text'
:
'foobar'
}
data
=
{
'id'
:
999
,
'text'
:
'foobar'
}
request
=
factory
.
put
(
'/1'
,
json
.
dumps
(
content
),
request
=
factory
.
put
(
'/1'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
2
):
with
self
.
assertNumQueries
(
2
):
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
...
@@ -309,9 +301,8 @@ class TestInstanceView(TestCase):
...
@@ -309,9 +301,8 @@ class TestInstanceView(TestCase):
if it does not currently exist.
if it does not currently exist.
"""
"""
self
.
objects
.
get
(
id
=
1
)
.
delete
()
self
.
objects
.
get
(
id
=
1
)
.
delete
()
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
put
(
'/1'
,
json
.
dumps
(
content
),
request
=
factory
.
put
(
'/1'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
3
):
with
self
.
assertNumQueries
(
3
):
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
...
@@ -324,10 +315,9 @@ class TestInstanceView(TestCase):
...
@@ -324,10 +315,9 @@ class TestInstanceView(TestCase):
PUT requests to RetrieveUpdateDestroyAPIView should create an object
PUT requests to RetrieveUpdateDestroyAPIView should create an object
at the requested url if it doesn't exist.
at the requested url if it doesn't exist.
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
# pk fields can not be created on demand, only the database can set the pk for a new object
# pk fields can not be created on demand, only the database can set the pk for a new object
request
=
factory
.
put
(
'/5'
,
json
.
dumps
(
content
),
request
=
factory
.
put
(
'/5'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
3
):
with
self
.
assertNumQueries
(
3
):
response
=
self
.
view
(
request
,
pk
=
5
)
.
render
()
response
=
self
.
view
(
request
,
pk
=
5
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
...
@@ -339,9 +329,8 @@ class TestInstanceView(TestCase):
...
@@ -339,9 +329,8 @@ class TestInstanceView(TestCase):
PUT requests to RetrieveUpdateDestroyAPIView should create an object
PUT requests to RetrieveUpdateDestroyAPIView should create an object
at the requested url if possible, else return HTTP_403_FORBIDDEN error-response.
at the requested url if possible, else return HTTP_403_FORBIDDEN error-response.
"""
"""
content
=
{
'text'
:
'foobar'
}
data
=
{
'text'
:
'foobar'
}
request
=
factory
.
put
(
'/test_slug'
,
json
.
dumps
(
content
),
request
=
factory
.
put
(
'/test_slug'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
with
self
.
assertNumQueries
(
2
):
with
self
.
assertNumQueries
(
2
):
response
=
self
.
slug_based_view
(
request
,
slug
=
'test_slug'
)
.
render
()
response
=
self
.
slug_based_view
(
request
,
slug
=
'test_slug'
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
...
@@ -415,9 +404,8 @@ class TestCreateModelWithAutoNowAddField(TestCase):
...
@@ -415,9 +404,8 @@ class TestCreateModelWithAutoNowAddField(TestCase):
https://github.com/tomchristie/django-rest-framework/issues/285
https://github.com/tomchristie/django-rest-framework/issues/285
"""
"""
content
=
{
'email'
:
'foobar@example.com'
,
'content'
:
'foobar'
}
data
=
{
'email'
:
'foobar@example.com'
,
'content'
:
'foobar'
}
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
request
=
factory
.
post
(
'/'
,
data
,
format
=
'json'
)
content_type
=
'application/json'
)
response
=
self
.
view
(
request
)
.
render
()
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
created
=
self
.
objects
.
get
(
id
=
1
)
created
=
self
.
objects
.
get
(
id
=
1
)
...
...
rest_framework/tests/test_hyperlinkedserializers.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
import
json
import
json
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.tests.models
import
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
Album
,
Photo
,
OptionalRelationModel
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.tests.models
import
(
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
Album
,
Photo
,
OptionalRelationModel
)
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
BlogPostCommentSerializer
(
serializers
.
ModelSerializer
):
class
BlogPostCommentSerializer
(
serializers
.
ModelSerializer
):
...
@@ -21,7 +24,7 @@ class BlogPostCommentSerializer(serializers.ModelSerializer):
...
@@ -21,7 +24,7 @@ class BlogPostCommentSerializer(serializers.ModelSerializer):
class
PhotoSerializer
(
serializers
.
Serializer
):
class
PhotoSerializer
(
serializers
.
Serializer
):
description
=
serializers
.
CharField
()
description
=
serializers
.
CharField
()
album_url
=
serializers
.
HyperlinkedRelatedField
(
source
=
'album'
,
view_name
=
'album-detail'
,
queryset
=
Album
.
objects
.
all
(),
slug
_field
=
'title'
,
slug_url_kwarg
=
'title'
)
album_url
=
serializers
.
HyperlinkedRelatedField
(
source
=
'album'
,
view_name
=
'album-detail'
,
queryset
=
Album
.
objects
.
all
(),
lookup
_field
=
'title'
,
slug_url_kwarg
=
'title'
)
def
restore_object
(
self
,
attrs
,
instance
=
None
):
def
restore_object
(
self
,
attrs
,
instance
=
None
):
return
Photo
(
**
attrs
)
return
Photo
(
**
attrs
)
...
...
rest_framework/tests/test_negotiation.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework.negotiation
import
DefaultContentNegotiation
from
rest_framework.negotiation
import
DefaultContentNegotiation
from
rest_framework.request
import
Request
from
rest_framework.request
import
Request
from
rest_framework.renderers
import
BaseRenderer
from
rest_framework.renderers
import
BaseRenderer
from
rest_framework.test
import
APIRequestFactory
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
MockJSONRenderer
(
BaseRenderer
):
class
MockJSONRenderer
(
BaseRenderer
):
...
...
rest_framework/tests/test_pagination.py
View file @
7224b20d
...
@@ -4,13 +4,13 @@ from decimal import Decimal
...
@@ -4,13 +4,13 @@ from decimal import Decimal
from
django.db
import
models
from
django.db
import
models
from
django.core.paginator
import
Paginator
from
django.core.paginator
import
Paginator
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.utils
import
unittest
from
django.utils
import
unittest
from
rest_framework
import
generics
,
status
,
pagination
,
filters
,
serializers
from
rest_framework
import
generics
,
status
,
pagination
,
filters
,
serializers
from
rest_framework.compat
import
django_filters
from
rest_framework.compat
import
django_filters
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.tests.models
import
BasicModel
from
rest_framework.tests.models
import
BasicModel
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
FilterableItem
(
models
.
Model
):
class
FilterableItem
(
models
.
Model
):
...
@@ -369,7 +369,7 @@ class TestCustomPaginationSerializer(TestCase):
...
@@ -369,7 +369,7 @@ class TestCustomPaginationSerializer(TestCase):
self
.
page
=
paginator
.
page
(
1
)
self
.
page
=
paginator
.
page
(
1
)
def
test_custom_pagination_serializer
(
self
):
def
test_custom_pagination_serializer
(
self
):
request
=
RequestFactory
()
.
get
(
'/foobar'
)
request
=
API
RequestFactory
()
.
get
(
'/foobar'
)
serializer
=
CustomPaginationSerializer
(
serializer
=
CustomPaginationSerializer
(
instance
=
self
.
page
,
instance
=
self
.
page
,
context
=
{
'request'
:
request
}
context
=
{
'request'
:
request
}
...
...
rest_framework/tests/test_permissions.py
View file @
7224b20d
...
@@ -3,11 +3,10 @@ from django.contrib.auth.models import User, Permission
...
@@ -3,11 +3,10 @@ from django.contrib.auth.models import User, Permission
from
django.db
import
models
from
django.db
import
models
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
generics
,
status
,
permissions
,
authentication
,
HTTP_HEADER_ENCODING
from
rest_framework
import
generics
,
status
,
permissions
,
authentication
,
HTTP_HEADER_ENCODING
from
rest_framework.test
s.utils
import
RequestFactory
from
rest_framework.test
import
API
RequestFactory
import
base64
import
base64
import
json
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
BasicModel
(
models
.
Model
):
class
BasicModel
(
models
.
Model
):
...
@@ -56,15 +55,13 @@ class ModelPermissionsIntegrationTests(TestCase):
...
@@ -56,15 +55,13 @@ class ModelPermissionsIntegrationTests(TestCase):
BasicModel
(
text
=
'foo'
)
.
save
()
BasicModel
(
text
=
'foo'
)
.
save
()
def
test_has_create_permissions
(
self
):
def
test_has_create_permissions
(
self
):
request
=
factory
.
post
(
'/'
,
json
.
dumps
({
'text'
:
'foobar'
}),
request
=
factory
.
post
(
'/'
,
{
'text'
:
'foobar'
},
format
=
'json'
,
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
root_view
(
request
,
pk
=
1
)
response
=
root_view
(
request
,
pk
=
1
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
def
test_has_put_permissions
(
self
):
def
test_has_put_permissions
(
self
):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
({
'text'
:
'foobar'
}),
request
=
factory
.
put
(
'/1'
,
{
'text'
:
'foobar'
},
format
=
'json'
,
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
...
@@ -75,15 +72,13 @@ class ModelPermissionsIntegrationTests(TestCase):
...
@@ -75,15 +72,13 @@ class ModelPermissionsIntegrationTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_204_NO_CONTENT
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_204_NO_CONTENT
)
def
test_does_not_have_create_permissions
(
self
):
def
test_does_not_have_create_permissions
(
self
):
request
=
factory
.
post
(
'/'
,
json
.
dumps
({
'text'
:
'foobar'
}),
request
=
factory
.
post
(
'/'
,
{
'text'
:
'foobar'
},
format
=
'json'
,
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
root_view
(
request
,
pk
=
1
)
response
=
root_view
(
request
,
pk
=
1
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
def
test_does_not_have_put_permissions
(
self
):
def
test_does_not_have_put_permissions
(
self
):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
({
'text'
:
'foobar'
}),
request
=
factory
.
put
(
'/1'
,
{
'text'
:
'foobar'
},
format
=
'json'
,
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
...
@@ -95,28 +90,26 @@ class ModelPermissionsIntegrationTests(TestCase):
...
@@ -95,28 +90,26 @@ class ModelPermissionsIntegrationTests(TestCase):
def
test_has_put_as_create_permissions
(
self
):
def
test_has_put_as_create_permissions
(
self
):
# User only has update permissions - should be able to update an entity.
# User only has update permissions - should be able to update an entity.
request
=
factory
.
put
(
'/1'
,
json
.
dumps
({
'text'
:
'foobar'
}),
request
=
factory
.
put
(
'/1'
,
{
'text'
:
'foobar'
},
format
=
'json'
,
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
# But if PUTing to a new entity, permission should be denied.
# But if PUTing to a new entity, permission should be denied.
request
=
factory
.
put
(
'/2'
,
json
.
dumps
({
'text'
:
'foobar'
}),
request
=
factory
.
put
(
'/2'
,
{
'text'
:
'foobar'
},
format
=
'json'
,
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
response
=
instance_view
(
request
,
pk
=
'2'
)
response
=
instance_view
(
request
,
pk
=
'2'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
def
test_options_permitted
(
self
):
def
test_options_permitted
(
self
):
request
=
factory
.
options
(
'/'
,
content_type
=
'application/json'
,
request
=
factory
.
options
(
'/'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
root_view
(
request
,
pk
=
'1'
)
response
=
root_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertIn
(
'actions'
,
response
.
data
)
self
.
assertIn
(
'actions'
,
response
.
data
)
self
.
assertEqual
(
list
(
response
.
data
[
'actions'
]
.
keys
()),
[
'POST'
])
self
.
assertEqual
(
list
(
response
.
data
[
'actions'
]
.
keys
()),
[
'POST'
])
request
=
factory
.
options
(
'/1'
,
content_type
=
'application/json'
,
request
=
factory
.
options
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
...
@@ -124,26 +117,26 @@ class ModelPermissionsIntegrationTests(TestCase):
...
@@ -124,26 +117,26 @@ class ModelPermissionsIntegrationTests(TestCase):
self
.
assertEqual
(
list
(
response
.
data
[
'actions'
]
.
keys
()),
[
'PUT'
])
self
.
assertEqual
(
list
(
response
.
data
[
'actions'
]
.
keys
()),
[
'PUT'
])
def
test_options_disallowed
(
self
):
def
test_options_disallowed
(
self
):
request
=
factory
.
options
(
'/'
,
content_type
=
'application/json'
,
request
=
factory
.
options
(
'/'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
root_view
(
request
,
pk
=
'1'
)
response
=
root_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertNotIn
(
'actions'
,
response
.
data
)
self
.
assertNotIn
(
'actions'
,
response
.
data
)
request
=
factory
.
options
(
'/1'
,
content_type
=
'application/json'
,
request
=
factory
.
options
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertNotIn
(
'actions'
,
response
.
data
)
self
.
assertNotIn
(
'actions'
,
response
.
data
)
def
test_options_updateonly
(
self
):
def
test_options_updateonly
(
self
):
request
=
factory
.
options
(
'/'
,
content_type
=
'application/json'
,
request
=
factory
.
options
(
'/'
,
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
response
=
root_view
(
request
,
pk
=
'1'
)
response
=
root_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertNotIn
(
'actions'
,
response
.
data
)
self
.
assertNotIn
(
'actions'
,
response
.
data
)
request
=
factory
.
options
(
'/1'
,
content_type
=
'application/json'
,
request
=
factory
.
options
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
...
...
rest_framework/tests/test_relations_hyperlink.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.tests.models
import
(
from
rest_framework.tests.models
import
(
BlogPost
,
BlogPost
,
ManyToManyTarget
,
ManyToManySource
,
ForeignKeyTarget
,
ForeignKeySource
,
ManyToManyTarget
,
ManyToManySource
,
ForeignKeyTarget
,
ForeignKeySource
,
NullableForeignKeySource
,
OneToOneTarget
,
NullableOneToOneSource
NullableForeignKeySource
,
OneToOneTarget
,
NullableOneToOneSource
)
)
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
request
=
factory
.
get
(
'/'
)
# Just to ensure we have a request in the serializer context
request
=
factory
.
get
(
'/'
)
# Just to ensure we have a request in the serializer context
...
...
rest_framework/tests/test_renderers.py
View file @
7224b20d
...
@@ -4,19 +4,17 @@ from __future__ import unicode_literals
...
@@ -4,19 +4,17 @@ from __future__ import unicode_literals
from
decimal
import
Decimal
from
decimal
import
Decimal
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.utils
import
unittest
from
django.utils
import
unittest
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.utils.translation
import
ugettext_lazy
as
_
from
rest_framework
import
status
,
permissions
from
rest_framework
import
status
,
permissions
from
rest_framework.compat
import
yaml
,
etree
,
patterns
,
url
,
include
from
rest_framework.compat
import
yaml
,
etree
,
patterns
,
url
,
include
,
six
,
StringIO
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
rest_framework.renderers
import
BaseRenderer
,
JSONRenderer
,
YAMLRenderer
,
\
from
rest_framework.renderers
import
BaseRenderer
,
JSONRenderer
,
YAMLRenderer
,
\
XMLRenderer
,
JSONPRenderer
,
BrowsableAPIRenderer
,
UnicodeJSONRenderer
XMLRenderer
,
JSONPRenderer
,
BrowsableAPIRenderer
,
UnicodeJSONRenderer
from
rest_framework.parsers
import
YAMLParser
,
XMLParser
from
rest_framework.parsers
import
YAMLParser
,
XMLParser
from
rest_framework.settings
import
api_settings
from
rest_framework.settings
import
api_settings
from
rest_framework.compat
import
StringIO
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.compat
import
six
import
datetime
import
datetime
import
pickle
import
pickle
import
re
import
re
...
@@ -121,7 +119,7 @@ class POSTDeniedView(APIView):
...
@@ -121,7 +119,7 @@ class POSTDeniedView(APIView):
class
DocumentingRendererTests
(
TestCase
):
class
DocumentingRendererTests
(
TestCase
):
def
test_only_permitted_forms_are_displayed
(
self
):
def
test_only_permitted_forms_are_displayed
(
self
):
view
=
POSTDeniedView
.
as_view
()
view
=
POSTDeniedView
.
as_view
()
request
=
RequestFactory
()
.
get
(
'/'
)
request
=
API
RequestFactory
()
.
get
(
'/'
)
response
=
view
(
request
)
.
render
()
response
=
view
(
request
)
.
render
()
self
.
assertNotContains
(
response
,
'>POST<'
)
self
.
assertNotContains
(
response
,
'>POST<'
)
self
.
assertContains
(
response
,
'>PUT<'
)
self
.
assertContains
(
response
,
'>PUT<'
)
...
...
rest_framework/tests/test_request.py
View file @
7224b20d
...
@@ -6,7 +6,6 @@ from django.contrib.auth.models import User
...
@@ -6,7 +6,6 @@ from django.contrib.auth.models import User
from
django.contrib.auth
import
authenticate
,
login
,
logout
from
django.contrib.auth
import
authenticate
,
login
,
logout
from
django.contrib.sessions.middleware
import
SessionMiddleware
from
django.contrib.sessions.middleware
import
SessionMiddleware
from
django.test
import
TestCase
,
Client
from
django.test
import
TestCase
,
Client
from
django.test.client
import
RequestFactory
from
rest_framework
import
status
from
rest_framework
import
status
from
rest_framework.authentication
import
SessionAuthentication
from
rest_framework.authentication
import
SessionAuthentication
from
rest_framework.compat
import
patterns
from
rest_framework.compat
import
patterns
...
@@ -19,12 +18,13 @@ from rest_framework.parsers import (
...
@@ -19,12 +18,13 @@ from rest_framework.parsers import (
from
rest_framework.request
import
Request
from
rest_framework.request
import
Request
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.settings
import
api_settings
from
rest_framework.settings
import
api_settings
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
rest_framework.compat
import
six
from
rest_framework.compat
import
six
import
json
import
json
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
PlainTextParser
(
BaseParser
):
class
PlainTextParser
(
BaseParser
):
...
@@ -116,16 +116,7 @@ class TestContentParsing(TestCase):
...
@@ -116,16 +116,7 @@ class TestContentParsing(TestCase):
Ensure request.DATA returns content for PUT request with form content.
Ensure request.DATA returns content for PUT request with form content.
"""
"""
data
=
{
'qwerty'
:
'uiop'
}
data
=
{
'qwerty'
:
'uiop'
}
request
=
Request
(
factory
.
put
(
'/'
,
data
))
from
django
import
VERSION
if
VERSION
>=
(
1
,
5
):
from
django.test.client
import
MULTIPART_CONTENT
,
BOUNDARY
,
encode_multipart
request
=
Request
(
factory
.
put
(
'/'
,
encode_multipart
(
BOUNDARY
,
data
),
content_type
=
MULTIPART_CONTENT
))
else
:
request
=
Request
(
factory
.
put
(
'/'
,
data
))
request
.
parsers
=
(
FormParser
(),
MultiPartParser
())
request
.
parsers
=
(
FormParser
(),
MultiPartParser
())
self
.
assertEqual
(
list
(
request
.
DATA
.
items
()),
list
(
data
.
items
()))
self
.
assertEqual
(
list
(
request
.
DATA
.
items
()),
list
(
data
.
items
()))
...
...
rest_framework/tests/test_reverse.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.reverse
import
reverse
from
rest_framework.reverse
import
reverse
from
rest_framework.test
import
APIRequestFactory
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
def
null_view
(
request
):
def
null_view
(
request
):
...
...
rest_framework/tests/test_routers.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
from
django.db
import
models
from
django.db
import
models
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.core.exceptions
import
ImproperlyConfigured
from
django.core.exceptions
import
ImproperlyConfigured
from
rest_framework
import
serializers
,
viewsets
,
permissions
from
rest_framework
import
serializers
,
viewsets
,
permissions
from
rest_framework.compat
import
include
,
patterns
,
url
from
rest_framework.compat
import
include
,
patterns
,
url
from
rest_framework.decorators
import
link
,
action
from
rest_framework.decorators
import
link
,
action
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.routers
import
SimpleRouter
,
DefaultRouter
from
rest_framework.routers
import
SimpleRouter
,
DefaultRouter
from
rest_framework.test
import
APIRequestFactory
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
urlpatterns
=
patterns
(
''
,)
urlpatterns
=
patterns
(
''
,)
...
@@ -193,6 +193,7 @@ class TestActionKeywordArgs(TestCase):
...
@@ -193,6 +193,7 @@ class TestActionKeywordArgs(TestCase):
{
'permission_classes'
:
[
permissions
.
AllowAny
]}
{
'permission_classes'
:
[
permissions
.
AllowAny
]}
)
)
class
TestActionAppliedToExistingRoute
(
TestCase
):
class
TestActionAppliedToExistingRoute
(
TestCase
):
"""
"""
Ensure `@action` decorator raises an except when applied
Ensure `@action` decorator raises an except when applied
...
...
rest_framework/tests/test_throttling.py
View file @
7224b20d
...
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
...
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.test.client
import
RequestFactory
from
rest_framework.test
import
API
RequestFactory
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
rest_framework.throttling
import
UserRateThrottle
,
ScopedRateThrottle
from
rest_framework.throttling
import
UserRateThrottle
,
ScopedRateThrottle
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
...
@@ -41,7 +41,7 @@ class ThrottlingTests(TestCase):
...
@@ -41,7 +41,7 @@ class ThrottlingTests(TestCase):
Reset the cache so that no throttles will be active
Reset the cache so that no throttles will be active
"""
"""
cache
.
clear
()
cache
.
clear
()
self
.
factory
=
RequestFactory
()
self
.
factory
=
API
RequestFactory
()
def
test_requests_are_throttled
(
self
):
def
test_requests_are_throttled
(
self
):
"""
"""
...
@@ -173,7 +173,7 @@ class ScopedRateThrottleTests(TestCase):
...
@@ -173,7 +173,7 @@ class ScopedRateThrottleTests(TestCase):
return
Response
(
'y'
)
return
Response
(
'y'
)
self
.
throttle_class
=
XYScopedRateThrottle
self
.
throttle_class
=
XYScopedRateThrottle
self
.
factory
=
RequestFactory
()
self
.
factory
=
API
RequestFactory
()
self
.
x_view
=
XView
.
as_view
()
self
.
x_view
=
XView
.
as_view
()
self
.
y_view
=
YView
.
as_view
()
self
.
y_view
=
YView
.
as_view
()
self
.
unscoped_view
=
UnscopedView
.
as_view
()
self
.
unscoped_view
=
UnscopedView
.
as_view
()
...
...
rest_framework/tests/test_urlpatterns.py
View file @
7224b20d
...
@@ -2,7 +2,7 @@ from __future__ import unicode_literals
...
@@ -2,7 +2,7 @@ from __future__ import unicode_literals
from
collections
import
namedtuple
from
collections
import
namedtuple
from
django.core
import
urlresolvers
from
django.core
import
urlresolvers
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework.test
import
API
RequestFactory
from
rest_framework.compat
import
patterns
,
url
,
include
from
rest_framework.compat
import
patterns
,
url
,
include
from
rest_framework.urlpatterns
import
format_suffix_patterns
from
rest_framework.urlpatterns
import
format_suffix_patterns
...
@@ -20,7 +20,7 @@ class FormatSuffixTests(TestCase):
...
@@ -20,7 +20,7 @@ class FormatSuffixTests(TestCase):
Tests `format_suffix_patterns` against different URLPatterns to ensure the URLs still resolve properly, including any captured parameters.
Tests `format_suffix_patterns` against different URLPatterns to ensure the URLs still resolve properly, including any captured parameters.
"""
"""
def
_resolve_urlpatterns
(
self
,
urlpatterns
,
test_paths
):
def
_resolve_urlpatterns
(
self
,
urlpatterns
,
test_paths
):
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
try
:
try
:
urlpatterns
=
format_suffix_patterns
(
urlpatterns
)
urlpatterns
=
format_suffix_patterns
(
urlpatterns
)
except
Exception
:
except
Exception
:
...
...
rest_framework/tests/test_validation.py
View file @
7224b20d
...
@@ -2,10 +2,9 @@ from __future__ import unicode_literals
...
@@ -2,10 +2,9 @@ from __future__ import unicode_literals
from
django.db
import
models
from
django.db
import
models
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
generics
,
serializers
,
status
from
rest_framework
import
generics
,
serializers
,
status
from
rest_framework.tests.utils
import
RequestFactory
from
rest_framework.test
import
APIRequestFactory
import
json
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
# Regression for #666
# Regression for #666
...
@@ -33,8 +32,7 @@ class TestPreSaveValidationExclusions(TestCase):
...
@@ -33,8 +32,7 @@ class TestPreSaveValidationExclusions(TestCase):
validation on read only fields.
validation on read only fields.
"""
"""
obj
=
ValidationModel
.
objects
.
create
(
blank_validated_field
=
''
)
obj
=
ValidationModel
.
objects
.
create
(
blank_validated_field
=
''
)
request
=
factory
.
put
(
'/'
,
json
.
dumps
({}),
request
=
factory
.
put
(
'/'
,
{},
format
=
'json'
)
content_type
=
'application/json'
)
view
=
UpdateValidationModel
()
.
as_view
()
view
=
UpdateValidationModel
()
.
as_view
()
response
=
view
(
request
,
pk
=
obj
.
pk
)
.
render
()
response
=
view
(
request
,
pk
=
obj
.
pk
)
.
render
()
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
...
...
rest_framework/tests/test_views.py
View file @
7224b20d
from
__future__
import
unicode_literals
from
__future__
import
unicode_literals
import
copy
import
copy
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework
import
status
from
rest_framework
import
status
from
rest_framework.decorators
import
api_view
from
rest_framework.decorators
import
api_view
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.settings
import
api_settings
from
rest_framework.settings
import
api_settings
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
factory
=
RequestFactory
()
factory
=
API
RequestFactory
()
class
BasicView
(
APIView
):
class
BasicView
(
APIView
):
...
...
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