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
import
json
import
urllib
from
time
import
time
import
ddt
import
jwt
import
responses
from
django.conf
import
settings
from
rest_framework.reverse
import
reverse
from
rest_framework.test
import
APITestCase
,
APIRequestFactory
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.tests.factories
import
CatalogFactory
from
course_discovery.apps.core.tests.factories
import
UserFactory
,
USER_PASSWORD
...
...
@@ -74,23 +73,6 @@ class CatalogViewSetTests(ElasticsearchTestMixin, SerializationMixin, OAuth2Mixi
self
.
course
=
CourseFactory
(
key
=
'a/b/c'
,
title
=
'ABC Test Course'
)
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
):
""" Verify authentication is required when creating, updating, or deleting a catalog. """
self
.
client
.
logout
()
...
...
@@ -132,7 +114,7 @@ class CatalogViewSetTests(ElasticsearchTestMixin, SerializationMixin, OAuth2Mixi
def
test_create_with_jwt_authentication
(
self
):
""" Verify the endpoint creates a new catalog when the client is authenticated via JWT authentication. """
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
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