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
05af1d1e
Commit
05af1d1e
authored
May 09, 2016
by
Peter Fogg
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #95 from edx/peter-fogg/create-catalog-users
Create users as catalog viewers.
parents
85dab76c
94842d51
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
1 deletions
+51
-1
course_discovery/apps/api/serializers.py
+22
-1
course_discovery/apps/api/tests/test_serializers.py
+29
-0
No files found.
course_discovery/apps/api/serializers.py
View file @
05af1d1e
from
django.contrib.auth
import
get_user_model
from
django.db
import
transaction
from
django.utils.translation
import
ugettext_lazy
as
_
from
rest_framework
import
serializers
...
...
@@ -93,11 +94,31 @@ class CatalogSerializer(serializers.ModelSerializer):
allow_null
=
True
,
allow_empty
=
True
,
required
=
False
,
help_text
=
_
(
'Usernames of users with explicit access to view this catalog'
))
def
is_valid
(
self
,
**
kwargs
):
# Ensure that the catalog's viewers actually exist in the
# DB. We keep this in a transaction so that users are only
# created if the data is valid.
sid
=
transaction
.
savepoint
()
for
username
in
self
.
initial_data
.
get
(
'viewers'
,
()):
# pylint: disable=no-member
User
.
objects
.
get_or_create
(
username
=
username
)
if
super
()
.
is_valid
(
**
kwargs
):
# Data is good; commit the transaction.
transaction
.
savepoint_commit
(
sid
)
return
True
else
:
# Invalid data; roll back the user creation.
transaction
.
savepoint_rollback
(
sid
)
return
False
def
create
(
self
,
validated_data
):
viewers
=
set
()
for
username
in
validated_data
.
pop
(
'viewers'
):
user
=
User
.
objects
.
get
(
username
=
username
)
viewers
.
add
(
user
)
# Set viewers after the model has been saved
viewers
=
validated_data
.
pop
(
'viewers'
)
instance
=
super
(
CatalogSerializer
,
self
)
.
create
(
validated_data
)
instance
.
viewers
=
viewers
instance
.
save
()
return
instance
class
Meta
(
object
):
...
...
course_discovery/apps/api/tests/test_serializers.py
View file @
05af1d1e
...
...
@@ -9,6 +9,7 @@ from course_discovery.apps.api.serializers import(
PersonSerializer
,
AffiliateWindowSerializer
)
from
course_discovery.apps.catalogs.tests.factories
import
CatalogFactory
from
course_discovery.apps.core.models
import
User
from
course_discovery.apps.core.tests.factories
import
UserFactory
from
course_discovery.apps.course_metadata.tests.factories
import
(
CourseFactory
,
CourseRunFactory
,
SubjectFactory
,
PrerequisiteFactory
,
...
...
@@ -36,6 +37,34 @@ class CatalogSerializerTests(TestCase):
}
self
.
assertDictEqual
(
serializer
.
data
,
expected
)
def
test_create_new_user
(
self
):
username
=
'test-user'
data
=
{
'viewers'
:
[
username
],
'id'
:
None
,
'name'
:
'test new catalog'
,
'query'
:
'*'
,
}
self
.
assertEqual
(
User
.
objects
.
filter
(
username
=
username
)
.
count
(),
0
)
# pylint: disable=no-member
serializer
=
CatalogSerializer
(
data
=
data
)
self
.
assertTrue
(
serializer
.
is_valid
())
catalog
=
serializer
.
save
()
self
.
assertEqual
([
viewer
.
username
for
viewer
in
catalog
.
viewers
],
[
username
])
self
.
assertEqual
(
User
.
objects
.
filter
(
username
=
username
)
.
count
(),
1
)
# pylint: disable=no-member
def
test_invalid_data_user_create
(
self
):
"""Verify that users are not created if the serializer data is invalid."""
username
=
'test-user'
data
=
{
'viewers'
:
[
username
],
'id'
:
None
,
'name'
:
''
,
'query'
:
''
,
}
serializer
=
CatalogSerializer
(
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEqual
(
User
.
objects
.
filter
(
username
=
username
)
.
count
(),
0
)
# pylint: disable=no-member
class
CourseSerializerTests
(
TestCase
):
def
test_data
(
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