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
a1dbd93f
Commit
a1dbd93f
authored
Feb 27, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
`assertEquals` -> `assertEqual`
parent
6e6f6f2c
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
444 additions
and
444 deletions
+444
-444
rest_framework/tests/decorators.py
+3
-3
rest_framework/tests/description.py
+7
-7
rest_framework/tests/fields.py
+3
-3
rest_framework/tests/files.py
+2
-2
rest_framework/tests/filterset.py
+17
-17
rest_framework/tests/genericrelations.py
+2
-2
rest_framework/tests/generics.py
+43
-43
rest_framework/tests/htmlrenderer.py
+13
-13
rest_framework/tests/hyperlinkedserializers.py
+10
-10
rest_framework/tests/negotiation.py
+3
-3
rest_framework/tests/pagination.py
+45
-45
rest_framework/tests/permissions.py
+10
-10
rest_framework/tests/relations_hyperlink.py
+35
-35
rest_framework/tests/relations_nested.py
+4
-4
rest_framework/tests/relations_pk.py
+35
-35
rest_framework/tests/relations_slug.py
+22
-22
rest_framework/tests/renderers.py
+42
-42
rest_framework/tests/response.py
+27
-27
rest_framework/tests/serializer.py
+106
-106
rest_framework/tests/status.py
+2
-2
rest_framework/tests/throttling.py
+1
-1
rest_framework/tests/urlpatterns.py
+2
-2
rest_framework/tests/validation.py
+2
-2
rest_framework/tests/views.py
+8
-8
No files found.
rest_framework/tests/decorators.py
View file @
a1dbd93f
...
...
@@ -139,7 +139,7 @@ class DecoratorTestCase(TestCase):
request
=
self
.
factory
.
get
(
'/'
)
response
=
view
(
request
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
def
test_throttle_classes
(
self
):
class
OncePerDayUserThrottle
(
UserRateThrottle
):
...
...
@@ -152,7 +152,7 @@ class DecoratorTestCase(TestCase):
request
=
self
.
factory
.
get
(
'/'
)
response
=
view
(
request
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
response
=
view
(
request
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_429_TOO_MANY_REQUESTS
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_429_TOO_MANY_REQUESTS
)
rest_framework/tests/description.py
View file @
a1dbd93f
...
...
@@ -53,7 +53,7 @@ class TestViewNamesAndDescriptions(TestCase):
"""Ensure Resource names are based on the classname by default."""
class
MockView
(
APIView
):
pass
self
.
assertEqual
s
(
MockView
()
.
get_name
(),
'Mock'
)
self
.
assertEqual
(
MockView
()
.
get_name
(),
'Mock'
)
def
test_resource_name_can_be_set_explicitly
(
self
):
"""Ensure Resource names can be set using the 'get_name' method."""
...
...
@@ -61,7 +61,7 @@ class TestViewNamesAndDescriptions(TestCase):
class
MockView
(
APIView
):
def
get_name
(
self
):
return
example
self
.
assertEqual
s
(
MockView
()
.
get_name
(),
example
)
self
.
assertEqual
(
MockView
()
.
get_name
(),
example
)
def
test_resource_description_uses_docstring_by_default
(
self
):
"""Ensure Resource names are based on the docstring by default."""
...
...
@@ -81,7 +81,7 @@ class TestViewNamesAndDescriptions(TestCase):
# hash style header #"""
self
.
assertEqual
s
(
MockView
()
.
get_description
(),
DESCRIPTION
)
self
.
assertEqual
(
MockView
()
.
get_description
(),
DESCRIPTION
)
def
test_resource_description_can_be_set_explicitly
(
self
):
"""Ensure Resource descriptions can be set using the 'get_description' method."""
...
...
@@ -91,7 +91,7 @@ class TestViewNamesAndDescriptions(TestCase):
"""docstring"""
def
get_description
(
self
):
return
example
self
.
assertEqual
s
(
MockView
()
.
get_description
(),
example
)
self
.
assertEqual
(
MockView
()
.
get_description
(),
example
)
def
test_resource_description_supports_unicode
(
self
):
...
...
@@ -99,7 +99,7 @@ class TestViewNamesAndDescriptions(TestCase):
"""Проверка"""
pass
self
.
assertEqual
s
(
MockView
()
.
get_description
(),
"Проверка"
)
self
.
assertEqual
(
MockView
()
.
get_description
(),
"Проверка"
)
def
test_resource_description_does_not_require_docstring
(
self
):
...
...
@@ -109,13 +109,13 @@ class TestViewNamesAndDescriptions(TestCase):
class
MockView
(
APIView
):
def
get_description
(
self
):
return
example
self
.
assertEqual
s
(
MockView
()
.
get_description
(),
example
)
self
.
assertEqual
(
MockView
()
.
get_description
(),
example
)
def
test_resource_description_can_be_empty
(
self
):
"""Ensure that if a resource has no doctring or 'description' class attribute, then it's description is the empty string."""
class
MockView
(
APIView
):
pass
self
.
assertEqual
s
(
MockView
()
.
get_description
(),
''
)
self
.
assertEqual
(
MockView
()
.
get_description
(),
''
)
def
test_markdown
(
self
):
"""Ensure markdown to HTML works as expected"""
...
...
rest_framework/tests/fields.py
View file @
a1dbd93f
...
...
@@ -43,21 +43,21 @@ class BasicFieldTests(TestCase):
auto_now and auto_now_add fields should be read_only by default.
"""
serializer
=
TimestampedModelSerializer
()
self
.
assertEqual
s
(
serializer
.
fields
[
'added'
]
.
read_only
,
True
)
self
.
assertEqual
(
serializer
.
fields
[
'added'
]
.
read_only
,
True
)
def
test_auto_pk_fields_read_only
(
self
):
"""
AutoField fields should be read_only by default.
"""
serializer
=
TimestampedModelSerializer
()
self
.
assertEqual
s
(
serializer
.
fields
[
'id'
]
.
read_only
,
True
)
self
.
assertEqual
(
serializer
.
fields
[
'id'
]
.
read_only
,
True
)
def
test_non_auto_pk_fields_not_read_only
(
self
):
"""
PK fields other than AutoField fields should not be read_only by default.
"""
serializer
=
CharPrimaryKeyModelSerializer
()
self
.
assertEqual
s
(
serializer
.
fields
[
'id'
]
.
read_only
,
False
)
self
.
assertEqual
(
serializer
.
fields
[
'id'
]
.
read_only
,
False
)
def
test_TimeField_from_native
(
self
):
f
=
serializers
.
TimeField
()
...
...
rest_framework/tests/files.py
View file @
a1dbd93f
...
...
@@ -33,8 +33,8 @@ class FileSerializerTests(TestCase):
serializer
=
UploadedFileSerializer
(
data
=
{
'created'
:
now
},
files
=
{
'file'
:
file
})
uploaded_file
=
UploadedFile
(
file
=
file
,
created
=
now
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
object
.
created
,
uploaded_file
.
created
)
self
.
assertEqual
s
(
serializer
.
object
.
file
,
uploaded_file
.
file
)
self
.
assertEqual
(
serializer
.
object
.
created
,
uploaded_file
.
created
)
self
.
assertEqual
(
serializer
.
object
.
file
,
uploaded_file
.
file
)
self
.
assertFalse
(
serializer
.
object
is
uploaded_file
)
def
test_creation_failure
(
self
):
...
...
rest_framework/tests/filterset.py
View file @
a1dbd93f
...
...
@@ -79,24 +79,24 @@ class IntegrationTestFiltering(TestCase):
# Basic test with no filter.
request
=
factory
.
get
(
'/'
)
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
# Tests that the decimal filter works.
search_decimal
=
Decimal
(
'2.25'
)
request
=
factory
.
get
(
'/?decimal=
%
s'
%
search_decimal
)
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
expected_data
=
[
f
for
f
in
self
.
data
if
f
[
'decimal'
]
==
search_decimal
]
self
.
assertEqual
s
(
response
.
data
,
expected_data
)
self
.
assertEqual
(
response
.
data
,
expected_data
)
# Tests that the date filter works.
search_date
=
datetime
.
date
(
2012
,
9
,
22
)
request
=
factory
.
get
(
'/?date=
%
s'
%
search_date
)
# search_date str: '2012-09-22'
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
expected_data
=
[
f
for
f
in
self
.
data
if
f
[
'date'
]
==
search_date
]
self
.
assertEqual
s
(
response
.
data
,
expected_data
)
self
.
assertEqual
(
response
.
data
,
expected_data
)
@unittest.skipUnless
(
django_filters
,
'django-filters not installed'
)
def
test_get_filtered_class_root_view
(
self
):
...
...
@@ -109,42 +109,42 @@ class IntegrationTestFiltering(TestCase):
# Basic test with no filter.
request
=
factory
.
get
(
'/'
)
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
# Tests that the decimal filter set with 'lt' in the filter class works.
search_decimal
=
Decimal
(
'4.25'
)
request
=
factory
.
get
(
'/?decimal=
%
s'
%
search_decimal
)
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
expected_data
=
[
f
for
f
in
self
.
data
if
f
[
'decimal'
]
<
search_decimal
]
self
.
assertEqual
s
(
response
.
data
,
expected_data
)
self
.
assertEqual
(
response
.
data
,
expected_data
)
# Tests that the date filter set with 'gt' in the filter class works.
search_date
=
datetime
.
date
(
2012
,
10
,
2
)
request
=
factory
.
get
(
'/?date=
%
s'
%
search_date
)
# search_date str: '2012-10-02'
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
expected_data
=
[
f
for
f
in
self
.
data
if
f
[
'date'
]
>
search_date
]
self
.
assertEqual
s
(
response
.
data
,
expected_data
)
self
.
assertEqual
(
response
.
data
,
expected_data
)
# Tests that the text filter set with 'icontains' in the filter class works.
search_text
=
'ff'
request
=
factory
.
get
(
'/?text=
%
s'
%
search_text
)
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
expected_data
=
[
f
for
f
in
self
.
data
if
search_text
in
f
[
'text'
]
.
lower
()]
self
.
assertEqual
s
(
response
.
data
,
expected_data
)
self
.
assertEqual
(
response
.
data
,
expected_data
)
# Tests that multiple filters works.
search_decimal
=
Decimal
(
'5.25'
)
search_date
=
datetime
.
date
(
2012
,
10
,
2
)
request
=
factory
.
get
(
'/?decimal=
%
s&date=
%
s'
%
(
search_decimal
,
search_date
))
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
expected_data
=
[
f
for
f
in
self
.
data
if
f
[
'date'
]
>
search_date
and
f
[
'decimal'
]
<
search_decimal
]
self
.
assertEqual
s
(
response
.
data
,
expected_data
)
self
.
assertEqual
(
response
.
data
,
expected_data
)
@unittest.skipUnless
(
django_filters
,
'django-filters not installed'
)
def
test_incorrectly_configured_filter
(
self
):
...
...
@@ -166,4 +166,4 @@ class IntegrationTestFiltering(TestCase):
search_integer
=
10
request
=
factory
.
get
(
'/?integer=
%
s'
%
search_integer
)
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
rest_framework/tests/genericrelations.py
View file @
a1dbd93f
...
...
@@ -67,7 +67,7 @@ class TestGenericRelations(TestCase):
'tags'
:
[
'django'
,
'python'
],
'url'
:
'https://www.djangoproject.com/'
}
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_generic_fk
(
self
):
"""
...
...
@@ -97,4 +97,4 @@ class TestGenericRelations(TestCase):
'tagged_item'
:
'Note: Remember the milk'
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
rest_framework/tests/generics.py
View file @
a1dbd93f
...
...
@@ -61,8 +61,8 @@ class TestRootView(TestCase):
"""
request
=
factory
.
get
(
'/'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
def
test_post_root_view
(
self
):
"""
...
...
@@ -72,10 +72,10 @@ class TestRootView(TestCase):
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
s
(
response
.
data
,
{
'id'
:
4
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
data
,
{
'id'
:
4
,
'text'
:
'foobar'
})
created
=
self
.
objects
.
get
(
id
=
4
)
self
.
assertEqual
s
(
created
.
text
,
'foobar'
)
self
.
assertEqual
(
created
.
text
,
'foobar'
)
def
test_put_root_view
(
self
):
"""
...
...
@@ -85,8 +85,8 @@ class TestRootView(TestCase):
request
=
factory
.
put
(
'/'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
s
(
response
.
data
,
{
"detail"
:
"Method 'PUT' not allowed."
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
(
response
.
data
,
{
"detail"
:
"Method 'PUT' not allowed."
})
def
test_delete_root_view
(
self
):
"""
...
...
@@ -94,8 +94,8 @@ class TestRootView(TestCase):
"""
request
=
factory
.
delete
(
'/'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
s
(
response
.
data
,
{
"detail"
:
"Method 'DELETE' not allowed."
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
(
response
.
data
,
{
"detail"
:
"Method 'DELETE' not allowed."
})
def
test_options_root_view
(
self
):
"""
...
...
@@ -116,8 +116,8 @@ class TestRootView(TestCase):
'name'
:
'Root'
,
'description'
:
'Example description for OPTIONS.'
}
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
expected
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
expected
)
def
test_post_cannot_set_id
(
self
):
"""
...
...
@@ -127,10 +127,10 @@ class TestRootView(TestCase):
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
s
(
response
.
data
,
{
'id'
:
4
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
data
,
{
'id'
:
4
,
'text'
:
'foobar'
})
created
=
self
.
objects
.
get
(
id
=
4
)
self
.
assertEqual
s
(
created
.
text
,
'foobar'
)
self
.
assertEqual
(
created
.
text
,
'foobar'
)
class
TestInstanceView
(
TestCase
):
...
...
@@ -155,8 +155,8 @@ class TestInstanceView(TestCase):
"""
request
=
factory
.
get
(
'/1'
)
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
[
0
])
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
[
0
])
def
test_post_instance_view
(
self
):
"""
...
...
@@ -166,8 +166,8 @@ class TestInstanceView(TestCase):
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
s
(
response
.
data
,
{
"detail"
:
"Method 'POST' not allowed."
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
self
.
assertEqual
(
response
.
data
,
{
"detail"
:
"Method 'POST' not allowed."
})
def
test_put_instance_view
(
self
):
"""
...
...
@@ -177,10 +177,10 @@ class TestInstanceView(TestCase):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
,
pk
=
'1'
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
updated
=
self
.
objects
.
get
(
id
=
1
)
self
.
assertEqual
s
(
updated
.
text
,
'foobar'
)
self
.
assertEqual
(
updated
.
text
,
'foobar'
)
def
test_patch_instance_view
(
self
):
"""
...
...
@@ -191,10 +191,10 @@ class TestInstanceView(TestCase):
content_type
=
'application/json'
)
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
updated
=
self
.
objects
.
get
(
id
=
1
)
self
.
assertEqual
s
(
updated
.
text
,
'foobar'
)
self
.
assertEqual
(
updated
.
text
,
'foobar'
)
def
test_delete_instance_view
(
self
):
"""
...
...
@@ -202,10 +202,10 @@ class TestInstanceView(TestCase):
"""
request
=
factory
.
delete
(
'/1'
)
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_204_NO_CONTENT
)
self
.
assertEqual
s
(
response
.
content
,
six
.
b
(
''
))
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_204_NO_CONTENT
)
self
.
assertEqual
(
response
.
content
,
six
.
b
(
''
))
ids
=
[
obj
.
id
for
obj
in
self
.
objects
.
all
()]
self
.
assertEqual
s
(
ids
,
[
2
,
3
])
self
.
assertEqual
(
ids
,
[
2
,
3
])
def
test_options_instance_view
(
self
):
"""
...
...
@@ -226,8 +226,8 @@ class TestInstanceView(TestCase):
'name'
:
'Instance'
,
'description'
:
'Example description for OPTIONS.'
}
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
expected
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
expected
)
def
test_put_cannot_set_id
(
self
):
"""
...
...
@@ -237,10 +237,10 @@ class TestInstanceView(TestCase):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
updated
=
self
.
objects
.
get
(
id
=
1
)
self
.
assertEqual
s
(
updated
.
text
,
'foobar'
)
self
.
assertEqual
(
updated
.
text
,
'foobar'
)
def
test_put_to_deleted_instance
(
self
):
"""
...
...
@@ -252,10 +252,10 @@ class TestInstanceView(TestCase):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
s
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
data
,
{
'id'
:
1
,
'text'
:
'foobar'
})
updated
=
self
.
objects
.
get
(
id
=
1
)
self
.
assertEqual
s
(
updated
.
text
,
'foobar'
)
self
.
assertEqual
(
updated
.
text
,
'foobar'
)
def
test_put_as_create_on_id_based_url
(
self
):
"""
...
...
@@ -267,9 +267,9 @@ class TestInstanceView(TestCase):
request
=
factory
.
put
(
'/5'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
,
pk
=
5
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
new_obj
=
self
.
objects
.
get
(
pk
=
5
)
self
.
assertEqual
s
(
new_obj
.
text
,
'foobar'
)
self
.
assertEqual
(
new_obj
.
text
,
'foobar'
)
def
test_put_as_create_on_slug_based_url
(
self
):
"""
...
...
@@ -280,10 +280,10 @@ class TestInstanceView(TestCase):
request
=
factory
.
put
(
'/test_slug'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
slug_based_view
(
request
,
slug
=
'test_slug'
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
s
(
response
.
data
,
{
'slug'
:
'test_slug'
,
'text'
:
'foobar'
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
data
,
{
'slug'
:
'test_slug'
,
'text'
:
'foobar'
})
new_obj
=
SlugBasedModel
.
objects
.
get
(
slug
=
'test_slug'
)
self
.
assertEqual
s
(
new_obj
.
text
,
'foobar'
)
self
.
assertEqual
(
new_obj
.
text
,
'foobar'
)
# Regression test for #285
...
...
@@ -314,9 +314,9 @@ class TestCreateModelWithAutoNowAddField(TestCase):
request
=
factory
.
post
(
'/'
,
json
.
dumps
(
content
),
content_type
=
'application/json'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
created
=
self
.
objects
.
get
(
id
=
1
)
self
.
assertEqual
s
(
created
.
content
,
'foobar'
)
self
.
assertEqual
(
created
.
content
,
'foobar'
)
# Test for particularly ugly regression with m2m in browseable API
...
...
@@ -349,4 +349,4 @@ class TestM2MBrowseableAPI(TestCase):
request
=
factory
.
get
(
'/'
,
HTTP_ACCEPT
=
'text/html'
)
view
=
ExampleView
()
.
as_view
()
response
=
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
rest_framework/tests/htmlrenderer.py
View file @
a1dbd93f
...
...
@@ -66,19 +66,19 @@ class TemplateHTMLRendererTests(TestCase):
def
test_simple_html_view
(
self
):
response
=
self
.
client
.
get
(
'/'
)
self
.
assertContains
(
response
,
"example: foobar"
)
self
.
assertEqual
s
(
response
[
'Content-Type'
],
'text/html'
)
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html'
)
def
test_not_found_html_view
(
self
):
response
=
self
.
client
.
get
(
'/not_found'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_404_NOT_FOUND
)
self
.
assertEqual
s
(
response
.
content
,
six
.
b
(
"404 Not Found"
))
self
.
assertEqual
s
(
response
[
'Content-Type'
],
'text/html'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_404_NOT_FOUND
)
self
.
assertEqual
(
response
.
content
,
six
.
b
(
"404 Not Found"
))
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html'
)
def
test_permission_denied_html_view
(
self
):
response
=
self
.
client
.
get
(
'/permission_denied'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
s
(
response
.
content
,
six
.
b
(
"403 Forbidden"
))
self
.
assertEqual
s
(
response
[
'Content-Type'
],
'text/html'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
content
,
six
.
b
(
"403 Forbidden"
))
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html'
)
class
TemplateHTMLRendererExceptionTests
(
TestCase
):
...
...
@@ -107,12 +107,12 @@ class TemplateHTMLRendererExceptionTests(TestCase):
def
test_not_found_html_view_with_template
(
self
):
response
=
self
.
client
.
get
(
'/not_found'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_404_NOT_FOUND
)
self
.
assertEqual
s
(
response
.
content
,
six
.
b
(
"404: Not found"
))
self
.
assertEqual
s
(
response
[
'Content-Type'
],
'text/html'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_404_NOT_FOUND
)
self
.
assertEqual
(
response
.
content
,
six
.
b
(
"404: Not found"
))
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html'
)
def
test_permission_denied_html_view_with_template
(
self
):
response
=
self
.
client
.
get
(
'/permission_denied'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
s
(
response
.
content
,
six
.
b
(
"403: Permission denied"
))
self
.
assertEqual
s
(
response
[
'Content-Type'
],
'text/html'
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
content
,
six
.
b
(
"403: Permission denied"
))
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html'
)
rest_framework/tests/hyperlinkedserializers.py
View file @
a1dbd93f
...
...
@@ -119,8 +119,8 @@ class TestBasicHyperlinkedView(TestCase):
"""
request
=
factory
.
get
(
'/basic/'
)
response
=
self
.
list_view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
def
test_get_detail_view
(
self
):
"""
...
...
@@ -128,8 +128,8 @@ class TestBasicHyperlinkedView(TestCase):
"""
request
=
factory
.
get
(
'/basic/1'
)
response
=
self
.
detail_view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
[
0
])
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
[
0
])
class
TestManyToManyHyperlinkedView
(
TestCase
):
...
...
@@ -167,8 +167,8 @@ class TestManyToManyHyperlinkedView(TestCase):
"""
request
=
factory
.
get
(
'/manytomany/'
)
response
=
self
.
list_view
(
request
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
def
test_get_detail_view
(
self
):
"""
...
...
@@ -176,8 +176,8 @@ class TestManyToManyHyperlinkedView(TestCase):
"""
request
=
factory
.
get
(
'/manytomany/1/'
)
response
=
self
.
detail_view
(
request
,
pk
=
1
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
[
0
])
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
[
0
])
class
TestCreateWithForeignKeys
(
TestCase
):
...
...
@@ -249,8 +249,8 @@ class TestOptionalRelationHyperlinkedView(TestCase):
"""
request
=
factory
.
get
(
'/optionalrelationmodel-detail/1'
)
response
=
self
.
detail_view
(
request
,
pk
=
1
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
def
test_put_detail_view
(
self
):
"""
...
...
rest_framework/tests/negotiation.py
View file @
a1dbd93f
...
...
@@ -27,14 +27,14 @@ class TestAcceptedMediaType(TestCase):
def
test_client_without_accept_use_renderer
(
self
):
request
=
Request
(
factory
.
get
(
'/'
))
accepted_renderer
,
accepted_media_type
=
self
.
select_renderer
(
request
)
self
.
assertEqual
s
(
accepted_media_type
,
'application/json'
)
self
.
assertEqual
(
accepted_media_type
,
'application/json'
)
def
test_client_underspecifies_accept_use_renderer
(
self
):
request
=
Request
(
factory
.
get
(
'/'
,
HTTP_ACCEPT
=
'*/*'
))
accepted_renderer
,
accepted_media_type
=
self
.
select_renderer
(
request
)
self
.
assertEqual
s
(
accepted_media_type
,
'application/json'
)
self
.
assertEqual
(
accepted_media_type
,
'application/json'
)
def
test_client_overspecifies_accept_use_client
(
self
):
request
=
Request
(
factory
.
get
(
'/'
,
HTTP_ACCEPT
=
'application/json; indent=8'
))
accepted_renderer
,
accepted_media_type
=
self
.
select_renderer
(
request
)
self
.
assertEqual
s
(
accepted_media_type
,
'application/json; indent=8'
)
self
.
assertEqual
(
accepted_media_type
,
'application/json; indent=8'
)
rest_framework/tests/pagination.py
View file @
a1dbd93f
...
...
@@ -74,27 +74,27 @@ class IntegrationTestPagination(TestCase):
"""
request
=
factory
.
get
(
'/'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
[
'count'
],
26
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[:
10
])
self
.
assertNotEqual
s
(
response
.
data
[
'next'
],
None
)
self
.
assertEqual
s
(
response
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
'count'
],
26
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[:
10
])
self
.
assertNotEqual
(
response
.
data
[
'next'
],
None
)
self
.
assertEqual
(
response
.
data
[
'previous'
],
None
)
request
=
factory
.
get
(
response
.
data
[
'next'
])
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
[
'count'
],
26
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[
10
:
20
])
self
.
assertNotEqual
s
(
response
.
data
[
'next'
],
None
)
self
.
assertNotEqual
s
(
response
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
'count'
],
26
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[
10
:
20
])
self
.
assertNotEqual
(
response
.
data
[
'next'
],
None
)
self
.
assertNotEqual
(
response
.
data
[
'previous'
],
None
)
request
=
factory
.
get
(
response
.
data
[
'next'
])
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
[
'count'
],
26
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[
20
:])
self
.
assertEqual
s
(
response
.
data
[
'next'
],
None
)
self
.
assertNotEqual
s
(
response
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
'count'
],
26
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[
20
:])
self
.
assertEqual
(
response
.
data
[
'next'
],
None
)
self
.
assertNotEqual
(
response
.
data
[
'previous'
],
None
)
class
IntegrationTestPaginationAndFiltering
(
TestCase
):
...
...
@@ -126,27 +126,27 @@ class IntegrationTestPaginationAndFiltering(TestCase):
"""
request
=
factory
.
get
(
'/?decimal=15.20'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
[
'count'
],
15
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[:
10
])
self
.
assertNotEqual
s
(
response
.
data
[
'next'
],
None
)
self
.
assertEqual
s
(
response
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
'count'
],
15
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[:
10
])
self
.
assertNotEqual
(
response
.
data
[
'next'
],
None
)
self
.
assertEqual
(
response
.
data
[
'previous'
],
None
)
request
=
factory
.
get
(
response
.
data
[
'next'
])
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
[
'count'
],
15
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[
10
:
15
])
self
.
assertEqual
s
(
response
.
data
[
'next'
],
None
)
self
.
assertNotEqual
s
(
response
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
'count'
],
15
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[
10
:
15
])
self
.
assertEqual
(
response
.
data
[
'next'
],
None
)
self
.
assertNotEqual
(
response
.
data
[
'previous'
],
None
)
request
=
factory
.
get
(
response
.
data
[
'previous'
])
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
response
.
data
[
'count'
],
15
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[:
10
])
self
.
assertNotEqual
s
(
response
.
data
[
'next'
],
None
)
self
.
assertEqual
s
(
response
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
'count'
],
15
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[:
10
])
self
.
assertNotEqual
(
response
.
data
[
'next'
],
None
)
self
.
assertEqual
(
response
.
data
[
'previous'
],
None
)
class
PassOnContextPaginationSerializer
(
pagination
.
PaginationSerializer
):
...
...
@@ -167,16 +167,16 @@ class UnitTestPagination(TestCase):
def
test_native_pagination
(
self
):
serializer
=
pagination
.
PaginationSerializer
(
self
.
first_page
)
self
.
assertEqual
s
(
serializer
.
data
[
'count'
],
26
)
self
.
assertEqual
s
(
serializer
.
data
[
'next'
],
'?page=2'
)
self
.
assertEqual
s
(
serializer
.
data
[
'previous'
],
None
)
self
.
assertEqual
s
(
serializer
.
data
[
'results'
],
self
.
objects
[:
10
])
self
.
assertEqual
(
serializer
.
data
[
'count'
],
26
)
self
.
assertEqual
(
serializer
.
data
[
'next'
],
'?page=2'
)
self
.
assertEqual
(
serializer
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
serializer
.
data
[
'results'
],
self
.
objects
[:
10
])
serializer
=
pagination
.
PaginationSerializer
(
self
.
last_page
)
self
.
assertEqual
s
(
serializer
.
data
[
'count'
],
26
)
self
.
assertEqual
s
(
serializer
.
data
[
'next'
],
None
)
self
.
assertEqual
s
(
serializer
.
data
[
'previous'
],
'?page=2'
)
self
.
assertEqual
s
(
serializer
.
data
[
'results'
],
self
.
objects
[
20
:])
self
.
assertEqual
(
serializer
.
data
[
'count'
],
26
)
self
.
assertEqual
(
serializer
.
data
[
'next'
],
None
)
self
.
assertEqual
(
serializer
.
data
[
'previous'
],
'?page=2'
)
self
.
assertEqual
(
serializer
.
data
[
'results'
],
self
.
objects
[
20
:])
def
test_context_available_in_result
(
self
):
"""
...
...
@@ -185,7 +185,7 @@ class UnitTestPagination(TestCase):
serializer
=
PassOnContextPaginationSerializer
(
self
.
first_page
,
context
=
{
'foo'
:
'bar'
})
serializer
.
data
results
=
serializer
.
fields
[
serializer
.
results_field
]
self
.
assertEqual
s
(
serializer
.
context
,
results
.
context
)
self
.
assertEqual
(
serializer
.
context
,
results
.
context
)
class
TestUnpaginated
(
TestCase
):
...
...
@@ -213,7 +213,7 @@ class TestUnpaginated(TestCase):
"""
request
=
factory
.
get
(
'/'
)
response
=
self
.
view
(
request
)
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
class
TestCustomPaginateByParam
(
TestCase
):
...
...
@@ -241,7 +241,7 @@ class TestCustomPaginateByParam(TestCase):
"""
request
=
factory
.
get
(
'/'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
data
,
self
.
data
)
self
.
assertEqual
(
response
.
data
,
self
.
data
)
def
test_paginate_by_param
(
self
):
"""
...
...
@@ -249,8 +249,8 @@ class TestCustomPaginateByParam(TestCase):
"""
request
=
factory
.
get
(
'/?page_size=5'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
data
[
'count'
],
13
)
self
.
assertEqual
s
(
response
.
data
[
'results'
],
self
.
data
[:
5
])
self
.
assertEqual
(
response
.
data
[
'count'
],
13
)
self
.
assertEqual
(
response
.
data
[
'results'
],
self
.
data
[:
5
])
### Tests for context in pagination serializers
...
...
@@ -285,7 +285,7 @@ class TestContextPassedToCustomField(TestCase):
request
=
factory
.
get
(
'/'
)
response
=
self
.
view
(
request
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
### Tests for custom pagination serializers
...
...
@@ -322,4 +322,4 @@ class TestCustomPaginationSerializer(TestCase):
'total_results'
:
4
,
'objects'
:
[
'john'
,
'paul'
]
}
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
rest_framework/tests/permissions.py
View file @
a1dbd93f
...
...
@@ -60,38 +60,38 @@ class ModelPermissionsIntegrationTests(TestCase):
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
root_view
(
request
,
pk
=
1
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
def
test_has_put_permissions
(
self
):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
({
'text'
:
'foobar'
}),
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
def
test_has_delete_permissions
(
self
):
request
=
factory
.
delete
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
instance_view
(
request
,
pk
=
1
)
self
.
assertEqual
s
(
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
):
request
=
factory
.
post
(
'/'
,
json
.
dumps
({
'text'
:
'foobar'
}),
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
root_view
(
request
,
pk
=
1
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
def
test_does_not_have_put_permissions
(
self
):
request
=
factory
.
put
(
'/1'
,
json
.
dumps
({
'text'
:
'foobar'
}),
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
def
test_does_not_have_delete_permissions
(
self
):
request
=
factory
.
delete
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
disallowed_credentials
)
response
=
instance_view
(
request
,
pk
=
1
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
def
test_has_put_as_create_permissions
(
self
):
# User only has update permissions - should be able to update an entity.
...
...
@@ -99,14 +99,14 @@ class ModelPermissionsIntegrationTests(TestCase):
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
response
=
instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
s
(
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.
request
=
factory
.
put
(
'/2'
,
json
.
dumps
({
'text'
:
'foobar'
}),
content_type
=
'application/json'
,
HTTP_AUTHORIZATION
=
self
.
updateonly_credentials
)
response
=
instance_view
(
request
,
pk
=
'2'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
class
OwnerModel
(
models
.
Model
):
...
...
@@ -145,9 +145,9 @@ class ObjectPermissionsIntegrationTests(TestCase):
def
test_owner_has_delete_permissions
(
self
):
request
=
factory
.
delete
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
owner_credentials
)
response
=
owner_instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_204_NO_CONTENT
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_204_NO_CONTENT
)
def
test_non_owner_does_not_have_delete_permissions
(
self
):
request
=
factory
.
delete
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
not_owner_credentials
)
response
=
owner_instance_view
(
request
,
pk
=
'1'
)
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
rest_framework/tests/relations_hyperlink.py
View file @
a1dbd93f
...
...
@@ -86,7 +86,7 @@ class HyperlinkedManyToManyTests(TestCase):
{
'url'
:
'http://testserver/manytomanysource/2/'
,
'name'
:
'source-2'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/2/'
]},
{
'url'
:
'http://testserver/manytomanysource/3/'
,
'name'
:
'source-3'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/2/'
,
'http://testserver/manytomanytarget/3/'
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_retrieve
(
self
):
queryset
=
ManyToManyTarget
.
objects
.
all
()
...
...
@@ -96,7 +96,7 @@ class HyperlinkedManyToManyTests(TestCase):
{
'url'
:
'http://testserver/manytomanytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[
'http://testserver/manytomanysource/2/'
,
'http://testserver/manytomanysource/3/'
]},
{
'url'
:
'http://testserver/manytomanytarget/3/'
,
'name'
:
'target-3'
,
'sources'
:
[
'http://testserver/manytomanysource/3/'
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_many_to_many_update
(
self
):
data
=
{
'url'
:
'http://testserver/manytomanysource/1/'
,
'name'
:
'source-1'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/2/'
,
'http://testserver/manytomanytarget/3/'
]}
...
...
@@ -104,7 +104,7 @@ class HyperlinkedManyToManyTests(TestCase):
serializer
=
ManyToManySourceSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure source 1 is updated, and everything else is as expected
queryset
=
ManyToManySource
.
objects
.
all
()
...
...
@@ -114,7 +114,7 @@ class HyperlinkedManyToManyTests(TestCase):
{
'url'
:
'http://testserver/manytomanysource/2/'
,
'name'
:
'source-2'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/2/'
]},
{
'url'
:
'http://testserver/manytomanysource/3/'
,
'name'
:
'source-3'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/2/'
,
'http://testserver/manytomanytarget/3/'
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_update
(
self
):
data
=
{
'url'
:
'http://testserver/manytomanytarget/1/'
,
'name'
:
'target-1'
,
'sources'
:
[
'http://testserver/manytomanysource/1/'
]}
...
...
@@ -122,7 +122,7 @@ class HyperlinkedManyToManyTests(TestCase):
serializer
=
ManyToManyTargetSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure target 1 is updated, and everything else is as expected
queryset
=
ManyToManyTarget
.
objects
.
all
()
...
...
@@ -133,14 +133,14 @@ class HyperlinkedManyToManyTests(TestCase):
{
'url'
:
'http://testserver/manytomanytarget/3/'
,
'name'
:
'target-3'
,
'sources'
:
[
'http://testserver/manytomanysource/3/'
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_many_to_many_create
(
self
):
data
=
{
'url'
:
'http://testserver/manytomanysource/4/'
,
'name'
:
'source-4'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/3/'
]}
serializer
=
ManyToManySourceSerializer
(
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is added, and everything else is as expected
...
...
@@ -152,14 +152,14 @@ class HyperlinkedManyToManyTests(TestCase):
{
'url'
:
'http://testserver/manytomanysource/3/'
,
'name'
:
'source-3'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/2/'
,
'http://testserver/manytomanytarget/3/'
]},
{
'url'
:
'http://testserver/manytomanysource/4/'
,
'name'
:
'source-4'
,
'targets'
:
[
'http://testserver/manytomanytarget/1/'
,
'http://testserver/manytomanytarget/3/'
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_create
(
self
):
data
=
{
'url'
:
'http://testserver/manytomanytarget/4/'
,
'name'
:
'target-4'
,
'sources'
:
[
'http://testserver/manytomanysource/1/'
,
'http://testserver/manytomanysource/3/'
]}
serializer
=
ManyToManyTargetSerializer
(
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'target-4'
)
# Ensure target 4 is added, and everything else is as expected
...
...
@@ -171,7 +171,7 @@ class HyperlinkedManyToManyTests(TestCase):
{
'url'
:
'http://testserver/manytomanytarget/3/'
,
'name'
:
'target-3'
,
'sources'
:
[
'http://testserver/manytomanysource/3/'
]},
{
'url'
:
'http://testserver/manytomanytarget/4/'
,
'name'
:
'target-4'
,
'sources'
:
[
'http://testserver/manytomanysource/1/'
,
'http://testserver/manytomanysource/3/'
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
class
HyperlinkedForeignKeyTests
(
TestCase
):
...
...
@@ -194,7 +194,7 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeysource/2/'
,
'name'
:
'source-2'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
},
{
'url'
:
'http://testserver/foreignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_retrieve
(
self
):
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -203,14 +203,14 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeytarget/1/'
,
'name'
:
'target-1'
,
'sources'
:
[
'http://testserver/foreignkeysource/1/'
,
'http://testserver/foreignkeysource/2/'
,
'http://testserver/foreignkeysource/3/'
]},
{
'url'
:
'http://testserver/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update
(
self
):
data
=
{
'url'
:
'http://testserver/foreignkeysource/1/'
,
'name'
:
'source-1'
,
'target'
:
'http://testserver/foreignkeytarget/2/'
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -221,14 +221,14 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeysource/2/'
,
'name'
:
'source-2'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
},
{
'url'
:
'http://testserver/foreignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_incorrect_type
(
self
):
data
=
{
'url'
:
'http://testserver/foreignkeysource/1/'
,
'name'
:
'source-1'
,
'target'
:
2
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'target'
:
[
'Incorrect type. Expected url string, received int.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'target'
:
[
'Incorrect type. Expected url string, received int.'
]})
def
test_reverse_foreign_key_update
(
self
):
data
=
{
'url'
:
'http://testserver/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[
'http://testserver/foreignkeysource/1/'
,
'http://testserver/foreignkeysource/3/'
]}
...
...
@@ -243,10 +243,10 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeytarget/1/'
,
'name'
:
'target-1'
,
'sources'
:
[
'http://testserver/foreignkeysource/1/'
,
'http://testserver/foreignkeysource/2/'
,
'http://testserver/foreignkeysource/3/'
]},
{
'url'
:
'http://testserver/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[]},
]
self
.
assertEqual
s
(
new_serializer
.
data
,
expected
)
self
.
assertEqual
(
new_serializer
.
data
,
expected
)
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure target 2 is update, and everything else is as expected
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -255,14 +255,14 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeytarget/1/'
,
'name'
:
'target-1'
,
'sources'
:
[
'http://testserver/foreignkeysource/2/'
]},
{
'url'
:
'http://testserver/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[
'http://testserver/foreignkeysource/1/'
,
'http://testserver/foreignkeysource/3/'
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create
(
self
):
data
=
{
'url'
:
'http://testserver/foreignkeysource/4/'
,
'name'
:
'source-4'
,
'target'
:
'http://testserver/foreignkeytarget/2/'
}
serializer
=
ForeignKeySourceSerializer
(
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -274,14 +274,14 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
},
{
'url'
:
'http://testserver/foreignkeysource/4/'
,
'name'
:
'source-4'
,
'target'
:
'http://testserver/foreignkeytarget/2/'
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_create
(
self
):
data
=
{
'url'
:
'http://testserver/foreignkeytarget/3/'
,
'name'
:
'target-3'
,
'sources'
:
[
'http://testserver/foreignkeysource/1/'
,
'http://testserver/foreignkeysource/3/'
]}
serializer
=
ForeignKeyTargetSerializer
(
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'target-3'
)
# Ensure target 4 is added, and everything else is as expected
...
...
@@ -292,14 +292,14 @@ class HyperlinkedForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[]},
{
'url'
:
'http://testserver/foreignkeytarget/3/'
,
'name'
:
'target-3'
,
'sources'
:
[
'http://testserver/foreignkeysource/1/'
,
'http://testserver/foreignkeysource/3/'
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_invalid_null
(
self
):
data
=
{
'url'
:
'http://testserver/foreignkeysource/1/'
,
'name'
:
'source-1'
,
'target'
:
None
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'target'
:
[
'This field is required.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'target'
:
[
'This field is required.'
]})
class
HyperlinkedNullableForeignKeyTests
(
TestCase
):
...
...
@@ -322,14 +322,14 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/nullableforeignkeysource/2/'
,
'name'
:
'source-2'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
},
{
'url'
:
'http://testserver/nullableforeignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create_with_valid_null
(
self
):
data
=
{
'url'
:
'http://testserver/nullableforeignkeysource/4/'
,
'name'
:
'source-4'
,
'target'
:
None
}
serializer
=
NullableForeignKeySourceSerializer
(
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is created, and everything else is as expected
...
...
@@ -341,7 +341,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/nullableforeignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
None
},
{
'url'
:
'http://testserver/nullableforeignkeysource/4/'
,
'name'
:
'source-4'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create_with_valid_emptystring
(
self
):
"""
...
...
@@ -353,7 +353,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
serializer
=
NullableForeignKeySourceSerializer
(
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is created, and everything else is as expected
...
...
@@ -365,14 +365,14 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/nullableforeignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
None
},
{
'url'
:
'http://testserver/nullableforeignkeysource/4/'
,
'name'
:
'source-4'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_valid_null
(
self
):
data
=
{
'url'
:
'http://testserver/nullableforeignkeysource/1/'
,
'name'
:
'source-1'
,
'target'
:
None
}
instance
=
NullableForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
NullableForeignKeySourceSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -383,7 +383,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/nullableforeignkeysource/2/'
,
'name'
:
'source-2'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
},
{
'url'
:
'http://testserver/nullableforeignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_valid_emptystring
(
self
):
"""
...
...
@@ -395,7 +395,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
instance
=
NullableForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
NullableForeignKeySourceSerializer
(
instance
,
data
=
data
,
context
=
{
'request'
:
request
})
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
serializer
.
data
,
expected_data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -406,7 +406,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
{
'url'
:
'http://testserver/nullableforeignkeysource/2/'
,
'name'
:
'source-2'
,
'target'
:
'http://testserver/foreignkeytarget/1/'
},
{
'url'
:
'http://testserver/nullableforeignkeysource/3/'
,
'name'
:
'source-3'
,
'target'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
# reverse foreign keys MUST be read_only
# In the general case they do not provide .remove() or .clear()
...
...
@@ -417,7 +417,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
# instance = ForeignKeyTarget.objects.get(pk=1)
# serializer = ForeignKeyTargetSerializer(instance, data=data)
# self.assertTrue(serializer.is_valid())
# self.assertEqual
s
(serializer.data, data)
# self.assertEqual(serializer.data, data)
# serializer.save()
# # Ensure target 1 is updated, and everything else is as expected
...
...
@@ -427,7 +427,7 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
# {'id': 1, 'name': 'target-1', 'sources': [1]},
# {'id': 2, 'name': 'target-2', 'sources': []},
# ]
# self.assertEqual
s
(serializer.data, expected)
# self.assertEqual(serializer.data, expected)
class
HyperlinkedNullableOneToOneTests
(
TestCase
):
...
...
@@ -448,4 +448,4 @@ class HyperlinkedNullableOneToOneTests(TestCase):
{
'url'
:
'http://testserver/onetoonetarget/1/'
,
'name'
:
'target-1'
,
'nullable_source'
:
'http://testserver/nullableonetoonesource/1/'
},
{
'url'
:
'http://testserver/onetoonetarget/2/'
,
'name'
:
'target-2'
,
'nullable_source'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_nested.py
View file @
a1dbd93f
...
...
@@ -58,7 +58,7 @@ class ReverseForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
{
'id'
:
1
,
'name'
:
'target-1'
}},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
{
'id'
:
1
,
'name'
:
'target-1'
}},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_retrieve
(
self
):
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -72,7 +72,7 @@ class ReverseForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
class
NestedNullableForeignKeyTests
(
TestCase
):
...
...
@@ -93,7 +93,7 @@ class NestedNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
{
'id'
:
1
,
'name'
:
'target-1'
}},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
class
NestedNullableOneToOneTests
(
TestCase
):
...
...
@@ -112,4 +112,4 @@ class NestedNullableOneToOneTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'nullable_source'
:
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
1
}},
{
'id'
:
2
,
'name'
:
'target-2'
,
'nullable_source'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_pk.py
View file @
a1dbd93f
...
...
@@ -62,7 +62,7 @@ class PKManyToManyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'targets'
:
[
1
,
2
]},
{
'id'
:
3
,
'name'
:
'source-3'
,
'targets'
:
[
1
,
2
,
3
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_retrieve
(
self
):
queryset
=
ManyToManyTarget
.
objects
.
all
()
...
...
@@ -72,7 +72,7 @@ class PKManyToManyTests(TestCase):
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
2
,
3
]},
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
3
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_many_to_many_update
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'targets'
:
[
1
,
2
,
3
]}
...
...
@@ -80,7 +80,7 @@ class PKManyToManyTests(TestCase):
serializer
=
ManyToManySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure source 1 is updated, and everything else is as expected
queryset
=
ManyToManySource
.
objects
.
all
()
...
...
@@ -90,7 +90,7 @@ class PKManyToManyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'targets'
:
[
1
,
2
]},
{
'id'
:
3
,
'name'
:
'source-3'
,
'targets'
:
[
1
,
2
,
3
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_update
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
1
]}
...
...
@@ -98,7 +98,7 @@ class PKManyToManyTests(TestCase):
serializer
=
ManyToManyTargetSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure target 1 is updated, and everything else is as expected
queryset
=
ManyToManyTarget
.
objects
.
all
()
...
...
@@ -108,14 +108,14 @@ class PKManyToManyTests(TestCase):
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
2
,
3
]},
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
3
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_many_to_many_create
(
self
):
data
=
{
'id'
:
4
,
'name'
:
'source-4'
,
'targets'
:
[
1
,
3
]}
serializer
=
ManyToManySourceSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is added, and everything else is as expected
...
...
@@ -127,14 +127,14 @@ class PKManyToManyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'targets'
:
[
1
,
2
,
3
]},
{
'id'
:
4
,
'name'
:
'source-4'
,
'targets'
:
[
1
,
3
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_many_to_many_create
(
self
):
data
=
{
'id'
:
4
,
'name'
:
'target-4'
,
'sources'
:
[
1
,
3
]}
serializer
=
ManyToManyTargetSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'target-4'
)
# Ensure target 4 is added, and everything else is as expected
...
...
@@ -146,7 +146,7 @@ class PKManyToManyTests(TestCase):
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
3
]},
{
'id'
:
4
,
'name'
:
'target-4'
,
'sources'
:
[
1
,
3
]}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
class
PKForeignKeyTests
(
TestCase
):
...
...
@@ -167,7 +167,7 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
1
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
1
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_retrieve
(
self
):
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -176,14 +176,14 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
1
,
2
,
3
]},
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
2
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -194,14 +194,14 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
1
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
1
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_incorrect_type
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
'foo'
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'target'
:
[
'Incorrect type. Expected pk value, received
%
s.'
%
six
.
text_type
.
__name__
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'target'
:
[
'Incorrect type. Expected pk value, received
%
s.'
%
six
.
text_type
.
__name__
]})
def
test_reverse_foreign_key_update
(
self
):
data
=
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
1
,
3
]}
...
...
@@ -216,10 +216,10 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
1
,
2
,
3
]},
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[]},
]
self
.
assertEqual
s
(
new_serializer
.
data
,
expected
)
self
.
assertEqual
(
new_serializer
.
data
,
expected
)
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure target 2 is update, and everything else is as expected
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -228,14 +228,14 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
2
]},
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
1
,
3
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create
(
self
):
data
=
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
2
}
serializer
=
ForeignKeySourceSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is added, and everything else is as expected
...
...
@@ -247,14 +247,14 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
1
},
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
2
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_create
(
self
):
data
=
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
1
,
3
]}
serializer
=
ForeignKeyTargetSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'target-3'
)
# Ensure target 3 is added, and everything else is as expected
...
...
@@ -265,14 +265,14 @@ class PKForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[]},
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
1
,
3
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_invalid_null
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
None
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'target'
:
[
'This field is required.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'target'
:
[
'This field is required.'
]})
class
PKNullableForeignKeyTests
(
TestCase
):
...
...
@@ -293,14 +293,14 @@ class PKNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
1
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create_with_valid_null
(
self
):
data
=
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
None
}
serializer
=
NullableForeignKeySourceSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is created, and everything else is as expected
...
...
@@ -312,7 +312,7 @@ class PKNullableForeignKeyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create_with_valid_emptystring
(
self
):
"""
...
...
@@ -324,7 +324,7 @@ class PKNullableForeignKeyTests(TestCase):
serializer
=
NullableForeignKeySourceSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is created, and everything else is as expected
...
...
@@ -336,14 +336,14 @@ class PKNullableForeignKeyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_valid_null
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
None
}
instance
=
NullableForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
NullableForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -354,7 +354,7 @@ class PKNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
1
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_valid_emptystring
(
self
):
"""
...
...
@@ -366,7 +366,7 @@ class PKNullableForeignKeyTests(TestCase):
instance
=
NullableForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
NullableForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
serializer
.
data
,
expected_data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -377,7 +377,7 @@ class PKNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
1
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
# reverse foreign keys MUST be read_only
# In the general case they do not provide .remove() or .clear()
...
...
@@ -388,7 +388,7 @@ class PKNullableForeignKeyTests(TestCase):
# instance = ForeignKeyTarget.objects.get(pk=1)
# serializer = ForeignKeyTargetSerializer(instance, data=data)
# self.assertTrue(serializer.is_valid())
# self.assertEqual
s
(serializer.data, data)
# self.assertEqual(serializer.data, data)
# serializer.save()
# # Ensure target 1 is updated, and everything else is as expected
...
...
@@ -398,7 +398,7 @@ class PKNullableForeignKeyTests(TestCase):
# {'id': 1, 'name': 'target-1', 'sources': [1]},
# {'id': 2, 'name': 'target-2', 'sources': []},
# ]
# self.assertEqual
s
(serializer.data, expected)
# self.assertEqual(serializer.data, expected)
class
PKNullableOneToOneTests
(
TestCase
):
...
...
@@ -417,4 +417,4 @@ class PKNullableOneToOneTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'nullable_source'
:
1
},
{
'id'
:
2
,
'name'
:
'target-2'
,
'nullable_source'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_slug.py
View file @
a1dbd93f
...
...
@@ -43,7 +43,7 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
'target-1'
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
'target-1'
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_retrieve
(
self
):
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -52,14 +52,14 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
'source-1'
,
'source-2'
,
'source-3'
]},
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
'target-2'
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -70,14 +70,14 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
'target-1'
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
'target-1'
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_incorrect_type
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
123
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'target'
:
[
'Object with name=123 does not exist.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'target'
:
[
'Object with name=123 does not exist.'
]})
def
test_reverse_foreign_key_update
(
self
):
data
=
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
'source-1'
,
'source-3'
]}
...
...
@@ -92,10 +92,10 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
'source-1'
,
'source-2'
,
'source-3'
]},
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[]},
]
self
.
assertEqual
s
(
new_serializer
.
data
,
expected
)
self
.
assertEqual
(
new_serializer
.
data
,
expected
)
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
# Ensure target 2 is update, and everything else is as expected
queryset
=
ForeignKeyTarget
.
objects
.
all
()
...
...
@@ -104,7 +104,7 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
1
,
'name'
:
'target-1'
,
'sources'
:
[
'source-2'
]},
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
'source-1'
,
'source-3'
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create
(
self
):
data
=
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
'target-2'
}
...
...
@@ -112,7 +112,7 @@ class SlugForeignKeyTests(TestCase):
serializer
.
is_valid
()
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is added, and everything else is as expected
...
...
@@ -124,14 +124,14 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
'target-1'
},
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
'target-2'
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_reverse_foreign_key_create
(
self
):
data
=
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
'source-1'
,
'source-3'
]}
serializer
=
ForeignKeyTargetSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'target-3'
)
# Ensure target 3 is added, and everything else is as expected
...
...
@@ -142,14 +142,14 @@ class SlugForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[]},
{
'id'
:
3
,
'name'
:
'target-3'
,
'sources'
:
[
'source-1'
,
'source-3'
]},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_invalid_null
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
None
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'target'
:
[
'This field is required.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'target'
:
[
'This field is required.'
]})
class
SlugNullableForeignKeyTests
(
TestCase
):
...
...
@@ -170,14 +170,14 @@ class SlugNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
'target-1'
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create_with_valid_null
(
self
):
data
=
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
None
}
serializer
=
NullableForeignKeySourceSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is created, and everything else is as expected
...
...
@@ -189,7 +189,7 @@ class SlugNullableForeignKeyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_create_with_valid_emptystring
(
self
):
"""
...
...
@@ -201,7 +201,7 @@ class SlugNullableForeignKeyTests(TestCase):
serializer
=
NullableForeignKeySourceSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
obj
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
obj
.
name
,
'source-4'
)
# Ensure source 4 is created, and everything else is as expected
...
...
@@ -213,14 +213,14 @@ class SlugNullableForeignKeyTests(TestCase):
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
},
{
'id'
:
4
,
'name'
:
'source-4'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_valid_null
(
self
):
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
None
}
instance
=
NullableForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
NullableForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -231,7 +231,7 @@ class SlugNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
'target-1'
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_with_valid_emptystring
(
self
):
"""
...
...
@@ -243,7 +243,7 @@ class SlugNullableForeignKeyTests(TestCase):
instance
=
NullableForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
NullableForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
expected_data
)
self
.
assertEqual
(
serializer
.
data
,
expected_data
)
serializer
.
save
()
# Ensure source 1 is updated, and everything else is as expected
...
...
@@ -254,4 +254,4 @@ class SlugNullableForeignKeyTests(TestCase):
{
'id'
:
2
,
'name'
:
'source-2'
,
'target'
:
'target-1'
},
{
'id'
:
3
,
'name'
:
'source-3'
,
'target'
:
None
}
]
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
rest_framework/tests/renderers.py
View file @
a1dbd93f
...
...
@@ -34,7 +34,7 @@ class BasicRendererTests(TestCase):
def
test_expected_results
(
self
):
for
value
,
renderer_cls
,
expected
in
expected_results
:
output
=
renderer_cls
()
.
render
(
value
)
self
.
assertEqual
s
(
output
,
expected
)
self
.
assertEqual
(
output
,
expected
)
class
RendererA
(
BaseRenderer
):
...
...
@@ -134,39 +134,39 @@ class RendererEndToEndTests(TestCase):
def
test_default_renderer_serializes_content
(
self
):
"""If the Accept header is not set the default renderer should serialize the response."""
resp
=
self
.
client
.
get
(
'/'
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_head_method_serializes_no_content
(
self
):
"""No response must be included in HEAD requests."""
resp
=
self
.
client
.
head
(
'/'
)
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
six
.
b
(
''
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
six
.
b
(
''
))
def
test_default_renderer_serializes_content_on_accept_any
(
self
):
"""If the Accept header is set to */* the default renderer should serialize the response."""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
'*/*'
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_default_case
(
self
):
"""If the Accept header is set the specified renderer should serialize the response.
(In this case we check that works for the default renderer)"""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_non_default_case
(
self
):
"""If the Accept header is set the specified renderer should serialize the response.
(In this case we check that works for a non-default renderer)"""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_on_accept_query
(
self
):
"""The '_accept' query string should behave in the same way as the Accept header."""
...
...
@@ -175,14 +175,14 @@ class RendererEndToEndTests(TestCase):
RendererB
.
media_type
)
resp
=
self
.
client
.
get
(
'/'
+
param
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_unsatisfiable_accept_header_on_request_returns_406_status
(
self
):
"""If the Accept header is unsatisfiable we should return a 406 Not Acceptable response."""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
'foo/bar'
)
self
.
assertEqual
s
(
resp
.
status_code
,
status
.
HTTP_406_NOT_ACCEPTABLE
)
self
.
assertEqual
(
resp
.
status_code
,
status
.
HTTP_406_NOT_ACCEPTABLE
)
def
test_specified_renderer_serializes_content_on_format_query
(
self
):
"""If a 'format' query is specified, the renderer with the matching
...
...
@@ -192,17 +192,17 @@ class RendererEndToEndTests(TestCase):
RendererB
.
format
)
resp
=
self
.
client
.
get
(
'/'
+
param
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_on_format_kwargs
(
self
):
"""If a 'format' keyword arg is specified, the renderer with the matching
format attribute should serialize the response."""
resp
=
self
.
client
.
get
(
'/something.formatb'
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_is_used_on_format_query_with_matching_accept
(
self
):
"""If both a 'format' query and a matching Accept header specified,
...
...
@@ -213,9 +213,9 @@ class RendererEndToEndTests(TestCase):
)
resp
=
self
.
client
.
get
(
'/'
+
param
,
HTTP_ACCEPT
=
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
_flat_repr
=
'{"foo": ["bar", "baz"]}'
...
...
@@ -243,7 +243,7 @@ class JSONRendererTests(TestCase):
renderer
=
JSONRenderer
()
content
=
renderer
.
render
(
obj
,
'application/json'
)
# Fix failing test case which depends on version of JSON library.
self
.
assertEqual
s
(
content
,
_flat_repr
)
self
.
assertEqual
(
content
,
_flat_repr
)
def
test_with_content_type_args
(
self
):
"""
...
...
@@ -252,7 +252,7 @@ class JSONRendererTests(TestCase):
obj
=
{
'foo'
:
[
'bar'
,
'baz'
]}
renderer
=
JSONRenderer
()
content
=
renderer
.
render
(
obj
,
'application/json; indent=2'
)
self
.
assertEqual
s
(
strip_trailing_whitespace
(
content
),
_indented_repr
)
self
.
assertEqual
(
strip_trailing_whitespace
(
content
),
_indented_repr
)
class
JSONPRendererTests
(
TestCase
):
...
...
@@ -268,9 +268,9 @@ class JSONPRendererTests(TestCase):
"""
resp
=
self
.
client
.
get
(
'/jsonp/jsonrenderer'
,
HTTP_ACCEPT
=
'application/javascript'
)
self
.
assertEqual
s
(
resp
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
'application/javascript'
)
self
.
assertEqual
s
(
resp
.
content
,
self
.
assertEqual
(
resp
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
'application/javascript'
)
self
.
assertEqual
(
resp
.
content
,
(
'callback(
%
s);'
%
_flat_repr
)
.
encode
(
'ascii'
))
def
test_without_callback_without_json_renderer
(
self
):
...
...
@@ -279,9 +279,9 @@ class JSONPRendererTests(TestCase):
"""
resp
=
self
.
client
.
get
(
'/jsonp/nojsonrenderer'
,
HTTP_ACCEPT
=
'application/javascript'
)
self
.
assertEqual
s
(
resp
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
'application/javascript'
)
self
.
assertEqual
s
(
resp
.
content
,
self
.
assertEqual
(
resp
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
'application/javascript'
)
self
.
assertEqual
(
resp
.
content
,
(
'callback(
%
s);'
%
_flat_repr
)
.
encode
(
'ascii'
))
def
test_with_callback
(
self
):
...
...
@@ -291,9 +291,9 @@ class JSONPRendererTests(TestCase):
callback_func
=
'myjsonpcallback'
resp
=
self
.
client
.
get
(
'/jsonp/nojsonrenderer?callback='
+
callback_func
,
HTTP_ACCEPT
=
'application/javascript'
)
self
.
assertEqual
s
(
resp
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
'application/javascript'
)
self
.
assertEqual
s
(
resp
.
content
,
self
.
assertEqual
(
resp
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
'application/javascript'
)
self
.
assertEqual
(
resp
.
content
,
(
'
%
s(
%
s);'
%
(
callback_func
,
_flat_repr
))
.
encode
(
'ascii'
))
...
...
@@ -312,7 +312,7 @@ if yaml:
obj
=
{
'foo'
:
[
'bar'
,
'baz'
]}
renderer
=
YAMLRenderer
()
content
=
renderer
.
render
(
obj
,
'application/yaml'
)
self
.
assertEqual
s
(
content
,
_yaml_repr
)
self
.
assertEqual
(
content
,
_yaml_repr
)
def
test_render_and_parse
(
self
):
"""
...
...
@@ -326,7 +326,7 @@ if yaml:
content
=
renderer
.
render
(
obj
,
'application/yaml'
)
data
=
parser
.
parse
(
StringIO
(
content
))
self
.
assertEqual
s
(
obj
,
data
)
self
.
assertEqual
(
obj
,
data
)
class
XMLRendererTestCase
(
TestCase
):
...
...
rest_framework/tests/response.py
View file @
a1dbd93f
...
...
@@ -85,39 +85,39 @@ class RendererIntegrationTests(TestCase):
def
test_default_renderer_serializes_content
(
self
):
"""If the Accept header is not set the default renderer should serialize the response."""
resp
=
self
.
client
.
get
(
'/'
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_head_method_serializes_no_content
(
self
):
"""No response must be included in HEAD requests."""
resp
=
self
.
client
.
head
(
'/'
)
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
six
.
b
(
''
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
six
.
b
(
''
))
def
test_default_renderer_serializes_content_on_accept_any
(
self
):
"""If the Accept header is set to */* the default renderer should serialize the response."""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
'*/*'
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_default_case
(
self
):
"""If the Accept header is set the specified renderer should serialize the response.
(In this case we check that works for the default renderer)"""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererA
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_A_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_non_default_case
(
self
):
"""If the Accept header is set the specified renderer should serialize the response.
(In this case we check that works for a non-default renderer)"""
resp
=
self
.
client
.
get
(
'/'
,
HTTP_ACCEPT
=
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_on_accept_query
(
self
):
"""The '_accept' query string should behave in the same way as the Accept header."""
...
...
@@ -126,34 +126,34 @@ class RendererIntegrationTests(TestCase):
RendererB
.
media_type
)
resp
=
self
.
client
.
get
(
'/'
+
param
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_on_format_query
(
self
):
"""If a 'format' query is specified, the renderer with the matching
format attribute should serialize the response."""
resp
=
self
.
client
.
get
(
'/?format=
%
s'
%
RendererB
.
format
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_serializes_content_on_format_kwargs
(
self
):
"""If a 'format' keyword arg is specified, the renderer with the matching
format attribute should serialize the response."""
resp
=
self
.
client
.
get
(
'/something.formatb'
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
def
test_specified_renderer_is_used_on_format_query_with_matching_accept
(
self
):
"""If both a 'format' query and a matching Accept header specified,
the renderer with the matching format attribute should serialize the response."""
resp
=
self
.
client
.
get
(
'/?format=
%
s'
%
RendererB
.
format
,
HTTP_ACCEPT
=
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
s
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
s
(
resp
.
status_code
,
DUMMYSTATUS
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
RendererB
.
media_type
)
self
.
assertEqual
(
resp
.
content
,
RENDERER_B_SERIALIZER
(
DUMMYCONTENT
))
self
.
assertEqual
(
resp
.
status_code
,
DUMMYSTATUS
)
class
Issue122Tests
(
TestCase
):
...
...
rest_framework/tests/serializer.py
View file @
a1dbd93f
...
...
@@ -127,39 +127,39 @@ class BasicTests(TestCase):
'created'
:
None
,
'sub_comment'
:
''
}
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_retrieve
(
self
):
serializer
=
CommentSerializer
(
self
.
comment
)
self
.
assertEqual
s
(
serializer
.
data
,
self
.
expected
)
self
.
assertEqual
(
serializer
.
data
,
self
.
expected
)
def
test_create
(
self
):
serializer
=
CommentSerializer
(
data
=
self
.
data
)
expected
=
self
.
comment
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
s
(
serializer
.
object
,
expected
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
object
,
expected
)
self
.
assertFalse
(
serializer
.
object
is
expected
)
self
.
assertEqual
s
(
serializer
.
data
[
'sub_comment'
],
'And Merry Christmas!'
)
self
.
assertEqual
(
serializer
.
data
[
'sub_comment'
],
'And Merry Christmas!'
)
def
test_update
(
self
):
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
self
.
data
)
expected
=
self
.
comment
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
s
(
serializer
.
object
,
expected
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
object
,
expected
)
self
.
assertTrue
(
serializer
.
object
is
expected
)
self
.
assertEqual
s
(
serializer
.
data
[
'sub_comment'
],
'And Merry Christmas!'
)
self
.
assertEqual
(
serializer
.
data
[
'sub_comment'
],
'And Merry Christmas!'
)
def
test_partial_update
(
self
):
msg
=
'Merry New Year!'
partial_data
=
{
'content'
:
msg
}
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
partial_data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
partial_data
,
partial
=
True
)
expected
=
self
.
comment
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
s
(
serializer
.
object
,
expected
)
self
.
assertEqual
(
serializer
.
object
,
expected
)
self
.
assertTrue
(
serializer
.
object
is
expected
)
self
.
assertEqual
s
(
serializer
.
data
[
'content'
],
msg
)
self
.
assertEqual
(
serializer
.
data
[
'content'
],
msg
)
def
test_model_fields_as_expected
(
self
):
"""
...
...
@@ -167,7 +167,7 @@ class BasicTests(TestCase):
in the Meta data
"""
serializer
=
PersonSerializer
(
self
.
person
)
self
.
assertEqual
s
(
set
(
serializer
.
data
.
keys
()),
self
.
assertEqual
(
set
(
serializer
.
data
.
keys
()),
set
([
'name'
,
'age'
,
'info'
]))
def
test_field_with_dictionary
(
self
):
...
...
@@ -176,18 +176,18 @@ class BasicTests(TestCase):
"""
serializer
=
PersonSerializer
(
self
.
person
)
expected
=
self
.
person_data
self
.
assertEqual
s
(
serializer
.
data
[
'info'
],
expected
)
self
.
assertEqual
(
serializer
.
data
[
'info'
],
expected
)
def
test_read_only_fields
(
self
):
"""
Attempting to update fields set as read_only should have no effect.
"""
serializer
=
PersonSerializer
(
self
.
person
,
data
=
{
'name'
:
'dwight'
,
'age'
:
99
})
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
serializer
.
errors
,
{})
self
.
assertEqual
(
serializer
.
errors
,
{})
# Assert age is unchanged (35)
self
.
assertEqual
s
(
instance
.
age
,
self
.
person_data
[
'age'
])
self
.
assertEqual
(
instance
.
age
,
self
.
person_data
[
'age'
])
class
DictStyleSerializer
(
serializers
.
Serializer
):
...
...
@@ -206,7 +206,7 @@ class DictStyleSerializerTests(TestCase):
data
=
{
'email'
:
'foo@example.com'
}
serializer
=
DictStyleSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
def
test_dict_style_serialize
(
self
):
"""
...
...
@@ -214,7 +214,7 @@ class DictStyleSerializerTests(TestCase):
"""
data
=
{
'email'
:
'foo@example.com'
}
serializer
=
DictStyleSerializer
(
data
)
self
.
assertEqual
s
(
serializer
.
data
,
data
)
self
.
assertEqual
(
serializer
.
data
,
data
)
class
ValidationTests
(
TestCase
):
...
...
@@ -233,13 +233,13 @@ class ValidationTests(TestCase):
def
test_create
(
self
):
serializer
=
CommentSerializer
(
data
=
self
.
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'content'
:
[
'Ensure this value has at most 1000 characters (it has 1001).'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'content'
:
[
'Ensure this value has at most 1000 characters (it has 1001).'
]})
def
test_update
(
self
):
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
self
.
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'content'
:
[
'Ensure this value has at most 1000 characters (it has 1001).'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'content'
:
[
'Ensure this value has at most 1000 characters (it has 1001).'
]})
def
test_update_missing_field
(
self
):
data
=
{
...
...
@@ -247,8 +247,8 @@ class ValidationTests(TestCase):
'created'
:
datetime
.
datetime
(
2012
,
1
,
1
)
}
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'email'
:
[
'This field is required.'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'email'
:
[
'This field is required.'
]})
def
test_missing_bool_with_default
(
self
):
"""Make sure that a boolean value with a 'False' value is not
...
...
@@ -258,8 +258,8 @@ class ValidationTests(TestCase):
#No 'done' value.
}
serializer
=
ActionItemSerializer
(
self
.
actionitem
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
s
(
serializer
.
errors
,
{})
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
errors
,
{})
def
test_bad_type_data_is_false
(
self
):
"""
...
...
@@ -267,18 +267,18 @@ class ValidationTests(TestCase):
"""
data
=
[
'i am'
,
'a'
,
'list'
]
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
,
many
=
True
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
data
=
'and i am a string'
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
data
=
42
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
def
test_cross_field_validation
(
self
):
...
...
@@ -302,23 +302,23 @@ class ValidationTests(TestCase):
serializer
=
CommentSerializerWithCrossFieldValidator
(
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Email address not in content'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Email address not in content'
]})
def
test_null_is_true_fields
(
self
):
"""
Omitting a value for null-field should validate.
"""
serializer
=
PersonSerializer
(
data
=
{
'name'
:
'marko'
})
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
s
(
serializer
.
errors
,
{})
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
errors
,
{})
def
test_modelserializer_max_length_exceeded
(
self
):
data
=
{
'title'
:
'x'
*
201
,
}
serializer
=
ActionItemSerializer
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'title'
:
[
'Ensure this value has at most 200 characters (it has 201).'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'title'
:
[
'Ensure this value has at most 200 characters (it has 201).'
]})
def
test_modelserializer_max_length_exceeded_with_custom_restore
(
self
):
"""
...
...
@@ -331,8 +331,8 @@ class ValidationTests(TestCase):
'title'
:
'x'
*
201
,
}
serializer
=
ActionItemSerializerCustomRestore
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'title'
:
[
'Ensure this value has at most 200 characters (it has 201).'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'title'
:
[
'Ensure this value has at most 200 characters (it has 201).'
]})
def
test_default_modelfield_max_length_exceeded
(
self
):
data
=
{
...
...
@@ -340,8 +340,8 @@ class ValidationTests(TestCase):
'info'
:
'x'
*
13
,
}
serializer
=
ActionItemSerializer
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
s
(
serializer
.
errors
,
{
'info'
:
[
'Ensure this value has at most 12 characters (it has 13).'
]})
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
errors
,
{
'info'
:
[
'Ensure this value has at most 12 characters (it has 13).'
]})
def
test_datetime_validation_failure
(
self
):
"""
...
...
@@ -354,7 +354,7 @@ class ValidationTests(TestCase):
data
[
'created'
]
=
0
serializer
=
CommentSerializer
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
self
.
assertIn
(
'created'
,
serializer
.
errors
)
...
...
@@ -366,7 +366,7 @@ class ValidationTests(TestCase):
try
:
serializer
=
BrokenModelSerializer
()
except
AssertionError
as
e
:
self
.
assertEqual
s
(
e
.
args
[
0
],
"Serializer class 'BrokenModelSerializer' is missing 'model' Meta option"
)
self
.
assertEqual
(
e
.
args
[
0
],
"Serializer class 'BrokenModelSerializer' is missing 'model' Meta option"
)
except
:
self
.
fail
(
'Wrong exception type thrown.'
)
...
...
@@ -399,7 +399,7 @@ class CustomValidationTests(TestCase):
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'content'
:
[
'Test not in value'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'content'
:
[
'Test not in value'
]})
def
test_missing_data
(
self
):
"""
...
...
@@ -411,7 +411,7 @@ class CustomValidationTests(TestCase):
}
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
incomplete_data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'content'
:
[
'This field is required.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'content'
:
[
'This field is required.'
]})
def
test_wrong_data
(
self
):
"""
...
...
@@ -424,14 +424,14 @@ class CustomValidationTests(TestCase):
}
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
wrong_data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'email'
:
[
'Enter a valid e-mail address.'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'email'
:
[
'Enter a valid e-mail address.'
]})
class
PositiveIntegerAsChoiceTests
(
TestCase
):
def
test_positive_integer_in_json_is_correctly_parsed
(
self
):
data
=
{
'some_integer'
:
1
}
serializer
=
PositiveIntegerAsChoiceSerializer
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
class
ModelValidationTests
(
TestCase
):
...
...
@@ -482,15 +482,15 @@ class RegexValidationTest(TestCase):
def
test_create_failed
(
self
):
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'1234567890'
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'isbn'
:
[
'isbn has to be exact 13 numbers'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'isbn'
:
[
'isbn has to be exact 13 numbers'
]})
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'12345678901234'
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'isbn'
:
[
'isbn has to be exact 13 numbers'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'isbn'
:
[
'isbn has to be exact 13 numbers'
]})
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'abcdefghijklm'
})
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
s
(
serializer
.
errors
,
{
'isbn'
:
[
'isbn has to be exact 13 numbers'
]})
self
.
assertEqual
(
serializer
.
errors
,
{
'isbn'
:
[
'isbn has to be exact 13 numbers'
]})
def
test_create_success
(
self
):
serializer
=
BookSerializer
(
data
=
{
'isbn'
:
'1234567890123'
})
...
...
@@ -535,7 +535,7 @@ class ManyToManyTests(TestCase):
"""
serializer
=
self
.
serializer_class
(
instance
=
self
.
instance
)
expected
=
self
.
data
self
.
assertEqual
s
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
def
test_create
(
self
):
"""
...
...
@@ -543,11 +543,11 @@ class ManyToManyTests(TestCase):
"""
data
=
{
'rel'
:
[
self
.
anchor
.
id
]}
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ManyToManyModel
.
objects
.
all
()),
2
)
self
.
assertEqual
s
(
instance
.
pk
,
2
)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
])
self
.
assertEqual
(
len
(
ManyToManyModel
.
objects
.
all
()),
2
)
self
.
assertEqual
(
instance
.
pk
,
2
)
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
])
def
test_update
(
self
):
"""
...
...
@@ -557,11 +557,11 @@ class ManyToManyTests(TestCase):
new_anchor
.
save
()
data
=
{
'rel'
:
[
self
.
anchor
.
id
,
new_anchor
.
id
]}
serializer
=
self
.
serializer_class
(
self
.
instance
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
,
new_anchor
])
self
.
assertEqual
(
len
(
ManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
,
new_anchor
])
def
test_create_empty_relationship
(
self
):
"""
...
...
@@ -570,11 +570,11 @@ class ManyToManyTests(TestCase):
"""
data
=
{
'rel'
:
[]}
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ManyToManyModel
.
objects
.
all
()),
2
)
self
.
assertEqual
s
(
instance
.
pk
,
2
)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[])
self
.
assertEqual
(
len
(
ManyToManyModel
.
objects
.
all
()),
2
)
self
.
assertEqual
(
instance
.
pk
,
2
)
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[])
def
test_update_empty_relationship
(
self
):
"""
...
...
@@ -585,11 +585,11 @@ class ManyToManyTests(TestCase):
new_anchor
.
save
()
data
=
{
'rel'
:
[]}
serializer
=
self
.
serializer_class
(
self
.
instance
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[])
self
.
assertEqual
(
len
(
ManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[])
def
test_create_empty_relationship_flat_data
(
self
):
"""
...
...
@@ -600,11 +600,11 @@ class ManyToManyTests(TestCase):
data
=
MultiValueDict
()
data
.
setlist
(
'rel'
,
[
''
])
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ManyToManyModel
.
objects
.
all
()),
2
)
self
.
assertEqual
s
(
instance
.
pk
,
2
)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[])
self
.
assertEqual
(
len
(
ManyToManyModel
.
objects
.
all
()),
2
)
self
.
assertEqual
(
instance
.
pk
,
2
)
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[])
class
ReadOnlyManyToManyTests
(
TestCase
):
...
...
@@ -638,12 +638,12 @@ class ReadOnlyManyToManyTests(TestCase):
new_anchor
.
save
()
data
=
{
'rel'
:
[
self
.
anchor
.
id
,
new_anchor
.
id
]}
serializer
=
self
.
serializer_class
(
self
.
instance
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ReadOnlyManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
(
len
(
ReadOnlyManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
# rel is still as original (1 entry)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
])
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
])
def
test_update_without_relationship
(
self
):
"""
...
...
@@ -654,12 +654,12 @@ class ReadOnlyManyToManyTests(TestCase):
new_anchor
.
save
()
data
=
{}
serializer
=
self
.
serializer_class
(
self
.
instance
,
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
ReadOnlyManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
(
len
(
ReadOnlyManyToManyModel
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
# rel is still as original (1 entry)
self
.
assertEqual
s
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
])
self
.
assertEqual
(
list
(
instance
.
rel
.
all
()),
[
self
.
anchor
])
class
DefaultValueTests
(
TestCase
):
...
...
@@ -674,35 +674,35 @@ class DefaultValueTests(TestCase):
def
test_create_using_default
(
self
):
data
=
{}
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
s
(
instance
.
text
,
'foobar'
)
self
.
assertEqual
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
self
.
assertEqual
(
instance
.
text
,
'foobar'
)
def
test_create_overriding_default
(
self
):
data
=
{
'text'
:
'overridden'
}
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
s
(
instance
.
text
,
'overridden'
)
self
.
assertEqual
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
self
.
assertEqual
(
instance
.
text
,
'overridden'
)
def
test_partial_update_default
(
self
):
""" Regression test for issue #532 """
data
=
{
'text'
:
'overridden'
}
serializer
=
self
.
serializer_class
(
data
=
data
,
partial
=
True
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
data
=
{
'extra'
:
'extra_value'
}
serializer
=
self
.
serializer_class
(
instance
=
instance
,
data
=
data
,
partial
=
True
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
instance
.
extra
,
'extra_value'
)
self
.
assertEqual
s
(
instance
.
text
,
'overridden'
)
self
.
assertEqual
(
instance
.
extra
,
'extra_value'
)
self
.
assertEqual
(
instance
.
text
,
'overridden'
)
class
CallableDefaultValueTests
(
TestCase
):
...
...
@@ -717,20 +717,20 @@ class CallableDefaultValueTests(TestCase):
def
test_create_using_default
(
self
):
data
=
{}
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
s
(
instance
.
text
,
'foobar'
)
self
.
assertEqual
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
self
.
assertEqual
(
instance
.
text
,
'foobar'
)
def
test_create_overriding_default
(
self
):
data
=
{
'text'
:
'overridden'
}
serializer
=
self
.
serializer_class
(
data
=
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
instance
=
serializer
.
save
()
self
.
assertEqual
s
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
s
(
instance
.
pk
,
1
)
self
.
assertEqual
s
(
instance
.
text
,
'overridden'
)
self
.
assertEqual
(
len
(
self
.
objects
.
all
()),
1
)
self
.
assertEqual
(
instance
.
pk
,
1
)
self
.
assertEqual
(
instance
.
text
,
'overridden'
)
class
ManyRelatedTests
(
TestCase
):
...
...
@@ -853,7 +853,7 @@ class RelatedTraversalTest(TestCase):
obj
=
ClassWithQuerysetMethod
()
serializer
=
QuerysetMethodSerializer
(
obj
)
self
.
assertEqual
s
(
serializer
.
data
,
{
'blogposts'
:
[
'BlogPost object'
]})
self
.
assertEqual
(
serializer
.
data
,
{
'blogposts'
:
[
'BlogPost object'
]})
class
SerializerMethodFieldTests
(
TestCase
):
...
...
@@ -916,15 +916,15 @@ class BlankFieldTests(TestCase):
def
test_create_blank_field
(
self
):
serializer
=
self
.
serializer_class
(
data
=
self
.
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
def
test_create_model_blank_field
(
self
):
serializer
=
self
.
model_serializer_class
(
data
=
self
.
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
def
test_create_model_null_field
(
self
):
serializer
=
self
.
model_serializer_class
(
data
=
{
'title'
:
None
})
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
def
test_create_not_blank_field
(
self
):
"""
...
...
@@ -932,7 +932,7 @@ class BlankFieldTests(TestCase):
is considered invalid in a non-model serializer
"""
serializer
=
self
.
not_blank_serializer_class
(
data
=
self
.
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
def
test_create_model_not_blank_field
(
self
):
"""
...
...
@@ -940,11 +940,11 @@ class BlankFieldTests(TestCase):
is considered invalid in a model serializer
"""
serializer
=
self
.
not_blank_model_serializer_class
(
data
=
self
.
data
)
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
def
test_create_model_empty_field
(
self
):
serializer
=
self
.
model_serializer_class
(
data
=
{})
self
.
assertEqual
s
(
serializer
.
is_valid
(),
True
)
self
.
assertEqual
(
serializer
.
is_valid
(),
True
)
#test for issue #460
...
...
rest_framework/tests/status.py
View file @
a1dbd93f
...
...
@@ -9,5 +9,5 @@ class TestStatus(TestCase):
def
test_status
(
self
):
"""Ensure the status module is present and correct."""
self
.
assertEqual
s
(
200
,
status
.
HTTP_200_OK
)
self
.
assertEqual
s
(
404
,
status
.
HTTP_404_NOT_FOUND
)
self
.
assertEqual
(
200
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
404
,
status
.
HTTP_404_NOT_FOUND
)
rest_framework/tests/throttling.py
View file @
a1dbd93f
...
...
@@ -103,7 +103,7 @@ class ThrottlingTests(TestCase):
self
.
set_throttle_timer
(
view
,
timer
)
response
=
view
.
as_view
()(
request
)
if
expect
is
not
None
:
self
.
assertEqual
s
(
response
[
'X-Throttle-Wait-Seconds'
],
expect
)
self
.
assertEqual
(
response
[
'X-Throttle-Wait-Seconds'
],
expect
)
else
:
self
.
assertFalse
(
'X-Throttle-Wait-Seconds'
in
response
)
...
...
rest_framework/tests/urlpatterns.py
View file @
a1dbd93f
...
...
@@ -32,8 +32,8 @@ class FormatSuffixTests(TestCase):
callback
,
callback_args
,
callback_kwargs
=
resolver
.
resolve
(
request
.
path_info
)
except
Exception
:
self
.
fail
(
"Failed to resolve URL:
%
s"
%
request
.
path_info
)
self
.
assertEqual
s
(
callback_args
,
test_path
.
args
)
self
.
assertEqual
s
(
callback_kwargs
,
test_path
.
kwargs
)
self
.
assertEqual
(
callback_args
,
test_path
.
args
)
self
.
assertEqual
(
callback_kwargs
,
test_path
.
kwargs
)
def
test_format_suffix
(
self
):
urlpatterns
=
patterns
(
...
...
rest_framework/tests/validation.py
View file @
a1dbd93f
...
...
@@ -37,7 +37,7 @@ class TestPreSaveValidationExclusions(TestCase):
content_type
=
'application/json'
)
view
=
UpdateValidationModel
()
.
as_view
()
response
=
view
(
request
,
pk
=
obj
.
pk
)
.
render
()
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
# Regression for #653
...
...
@@ -62,4 +62,4 @@ class TestPreSaveValidationExclusions(TestCase):
# We've set `required=False` on the serializer, but the model
# does not have `blank=True`, so this serializer should not validate.
serializer
=
ShouldValidateModelSerializer
(
data
=
{
'renamed'
:
''
})
self
.
assertEqual
s
(
serializer
.
is_valid
(),
False
)
self
.
assertEqual
(
serializer
.
is_valid
(),
False
)
rest_framework/tests/views.py
View file @
a1dbd93f
...
...
@@ -52,8 +52,8 @@ class ClassBasedViewIntegrationTests(TestCase):
expected
=
{
'detail'
:
'JSON parse error - No JSON object could be decoded'
}
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
s
(
sanitise_json_error
(
response
.
data
),
expected
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
(
sanitise_json_error
(
response
.
data
),
expected
)
def
test_400_parse_error_tunneled_content
(
self
):
content
=
'f00bar'
...
...
@@ -67,8 +67,8 @@ class ClassBasedViewIntegrationTests(TestCase):
expected
=
{
'detail'
:
'JSON parse error - No JSON object could be decoded'
}
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
s
(
sanitise_json_error
(
response
.
data
),
expected
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
(
sanitise_json_error
(
response
.
data
),
expected
)
class
FunctionBasedViewIntegrationTests
(
TestCase
):
...
...
@@ -81,8 +81,8 @@ class FunctionBasedViewIntegrationTests(TestCase):
expected
=
{
'detail'
:
'JSON parse error - No JSON object could be decoded'
}
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
s
(
sanitise_json_error
(
response
.
data
),
expected
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
(
sanitise_json_error
(
response
.
data
),
expected
)
def
test_400_parse_error_tunneled_content
(
self
):
content
=
'f00bar'
...
...
@@ -96,5 +96,5 @@ class FunctionBasedViewIntegrationTests(TestCase):
expected
=
{
'detail'
:
'JSON parse error - No JSON object could be decoded'
}
self
.
assertEqual
s
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
s
(
sanitise_json_error
(
response
.
data
),
expected
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
(
sanitise_json_error
(
response
.
data
),
expected
)
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