Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
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
course-discovery
Commits
b59dc0da
Commit
b59dc0da
authored
Mar 31, 2016
by
Bill DeRusha
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #50 from edx/bderusha/jwt-coverage
jwt coverage
parents
b7e4f051
28787336
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
59 additions
and
20 deletions
+59
-20
course_discovery/apps/api/tests/jwt_utils.py
+36
-0
course_discovery/apps/api/tests/test_jwt_decode_handler.py
+21
-0
course_discovery/apps/api/v1/tests/test_views.py
+2
-20
No files found.
course_discovery/apps/api/tests/jwt_utils.py
0 → 100644
View file @
b59dc0da
""" Utilities for working with JWT during testing."""
from
time
import
time
from
django.conf
import
settings
import
jwt
def
generate_jwt_payload
(
user
):
"""Generate a valid JWT payload given a user."""
now
=
int
(
time
())
ttl
=
5
return
{
'iss'
:
settings
.
JWT_AUTH
[
'JWT_ISSUER'
],
'aud'
:
settings
.
JWT_AUTH
[
'JWT_AUDIENCE'
],
'username'
:
user
.
username
,
'email'
:
user
.
email
,
'iat'
:
now
,
'exp'
:
now
+
ttl
}
def
generate_jwt_token
(
payload
):
"""Generate a valid JWT token for authenticated requests."""
return
jwt
.
encode
(
payload
,
settings
.
JWT_AUTH
[
'JWT_SECRET_KEY'
])
.
decode
(
'utf-8'
)
def
generate_jwt_header
(
token
):
"""Generate a valid JWT header given a token."""
return
'JWT {token}'
.
format
(
token
=
token
)
def
generate_jwt_header_for_user
(
user
):
payload
=
generate_jwt_payload
(
user
)
token
=
generate_jwt_token
(
payload
)
return
generate_jwt_header
(
token
)
course_discovery/apps/api/tests/test_jwt_decode_handler.py
0 → 100644
View file @
b59dc0da
import
jwt
from
django.test
import
TestCase
from
course_discovery.apps.api.jwt_decode_handler
import
decode
from
course_discovery.apps.api.tests.jwt_utils
import
generate_jwt_payload
,
generate_jwt_token
from
course_discovery.apps.core.tests.factories
import
UserFactory
class
JWTDecodeHandlerTests
(
TestCase
):
def
setUp
(
self
):
super
(
JWTDecodeHandlerTests
,
self
)
.
setUp
()
self
.
user
=
UserFactory
(
is_staff
=
True
,
is_superuser
=
True
)
self
.
payload
=
generate_jwt_payload
(
self
.
user
)
self
.
jwt
=
generate_jwt_token
(
self
.
payload
)
def
test_decode_success
(
self
):
self
.
assertDictEqual
(
decode
(
self
.
jwt
),
self
.
payload
)
def
test_decode_error
(
self
):
with
self
.
assertRaises
(
jwt
.
InvalidTokenError
):
decode
(
"not.a.valid.jwt"
)
course_discovery/apps/api/v1/tests/test_views.py
View file @
b59dc0da
# pylint: disable=redefined-builtin
# pylint: disable=redefined-builtin
import
json
import
json
import
urllib
import
urllib
from
time
import
time
import
ddt
import
ddt
import
jwt
import
responses
import
responses
from
django.conf
import
settings
from
django.conf
import
settings
from
rest_framework.reverse
import
reverse
from
rest_framework.reverse
import
reverse
from
rest_framework.test
import
APITestCase
,
APIRequestFactory
from
rest_framework.test
import
APITestCase
,
APIRequestFactory
from
course_discovery.apps.api.serializers
import
CatalogSerializer
,
CourseSerializer
from
course_discovery.apps.api.serializers
import
CatalogSerializer
,
CourseSerializer
from
course_discovery.apps.api.tests.jwt_utils
import
generate_jwt_header_for_user
from
course_discovery.apps.catalogs.models
import
Catalog
from
course_discovery.apps.catalogs.models
import
Catalog
from
course_discovery.apps.catalogs.tests.factories
import
CatalogFactory
from
course_discovery.apps.catalogs.tests.factories
import
CatalogFactory
from
course_discovery.apps.core.tests.factories
import
UserFactory
,
USER_PASSWORD
from
course_discovery.apps.core.tests.factories
import
UserFactory
,
USER_PASSWORD
...
@@ -74,23 +73,6 @@ class CatalogViewSetTests(ElasticsearchTestMixin, SerializationMixin, OAuth2Mixi
...
@@ -74,23 +73,6 @@ class CatalogViewSetTests(ElasticsearchTestMixin, SerializationMixin, OAuth2Mixi
self
.
course
=
CourseFactory
(
key
=
'a/b/c'
,
title
=
'ABC Test Course'
)
self
.
course
=
CourseFactory
(
key
=
'a/b/c'
,
title
=
'ABC Test Course'
)
self
.
refresh_index
()
self
.
refresh_index
()
def
generate_jwt_token_header
(
self
,
user
):
"""Generate a valid JWT token header for authenticated requests."""
now
=
int
(
time
())
ttl
=
5
payload
=
{
'iss'
:
settings
.
JWT_AUTH
[
'JWT_ISSUER'
],
'aud'
:
settings
.
JWT_AUTH
[
'JWT_AUDIENCE'
],
'username'
:
user
.
username
,
'email'
:
user
.
email
,
'iat'
:
now
,
'exp'
:
now
+
ttl
}
token
=
jwt
.
encode
(
payload
,
settings
.
JWT_AUTH
[
'JWT_SECRET_KEY'
])
.
decode
(
'utf-8'
)
return
'JWT {token}'
.
format
(
token
=
token
)
def
test_create_without_authentication
(
self
):
def
test_create_without_authentication
(
self
):
""" Verify authentication is required when creating, updating, or deleting a catalog. """
""" Verify authentication is required when creating, updating, or deleting a catalog. """
self
.
client
.
logout
()
self
.
client
.
logout
()
...
@@ -132,7 +114,7 @@ class CatalogViewSetTests(ElasticsearchTestMixin, SerializationMixin, OAuth2Mixi
...
@@ -132,7 +114,7 @@ class CatalogViewSetTests(ElasticsearchTestMixin, SerializationMixin, OAuth2Mixi
def
test_create_with_jwt_authentication
(
self
):
def
test_create_with_jwt_authentication
(
self
):
""" Verify the endpoint creates a new catalog when the client is authenticated via JWT authentication. """
""" Verify the endpoint creates a new catalog when the client is authenticated via JWT authentication. """
self
.
client
.
logout
()
self
.
client
.
logout
()
self
.
assert_catalog_created
(
HTTP_AUTHORIZATION
=
self
.
generate_jwt_token_head
er
(
self
.
user
))
self
.
assert_catalog_created
(
HTTP_AUTHORIZATION
=
generate_jwt_header_for_us
er
(
self
.
user
))
@responses.activate
@responses.activate
def
test_create_with_oauth2_authentication
(
self
):
def
test_create_with_oauth2_authentication
(
self
):
...
...
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