Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx-platform
Commits
7e9bba5e
Commit
7e9bba5e
authored
Aug 14, 2015
by
Diana Huang
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #9316 from edx/diana/create-teams-error
Show correct error when creating a team.
parents
cff41273
d244368d
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
80 additions
and
7 deletions
+80
-7
lms/djangoapps/teams/models.py
+16
-1
lms/djangoapps/teams/static/teams/js/spec/views/edit_team_spec.js
+19
-0
lms/djangoapps/teams/static/teams/js/views/edit_team.js
+6
-2
lms/djangoapps/teams/tests/test_models.py
+13
-0
lms/djangoapps/teams/tests/test_views.py
+14
-4
lms/djangoapps/teams/views.py
+12
-0
No files found.
lms/djangoapps/teams/models.py
View file @
7e9bba5e
...
...
@@ -70,7 +70,7 @@ class CourseTeam(models.Model):
"""Adds the given user to the CourseTeam."""
if
not
CourseEnrollment
.
is_enrolled
(
user
,
self
.
course_id
):
raise
NotEnrolledInCourseForTeam
if
CourseTeamMembership
.
objects
.
filter
(
user
=
user
,
team__course_id
=
self
.
course_id
)
.
exists
(
):
if
CourseTeamMembership
.
user_in_team_for_course
(
user
,
self
.
course_id
):
raise
AlreadyOnTeamInCourse
return
CourseTeamMembership
.
objects
.
create
(
user
=
user
,
...
...
@@ -108,3 +108,18 @@ class CourseTeamMembership(models.Model):
queryset
=
queryset
.
filter
(
team__team_id
=
team_id
)
return
queryset
@classmethod
def
user_in_team_for_course
(
cls
,
user
,
course_id
):
"""
Checks whether or not a user is already in a team in the given course.
Args:
user: the user that we want to query on
course_id: the course_id of the course we're interested in
Returns:
True if the user is on a team in the course already
False if not
"""
return
cls
.
objects
.
filter
(
user
=
user
,
team__course_id
=
course_id
)
.
exists
()
lms/djangoapps/teams/static/teams/js/spec/views/edit_team_spec.js
View file @
7e9bba5e
...
...
@@ -162,6 +162,25 @@ define([
expect
(
teamEditView
.
$
(
'.wrapper-msg .copy'
).
text
().
trim
()).
toBe
(
"An error occurred. Please try again."
);
});
it
(
"shows correct error message when server returns an error"
,
function
()
{
var
requests
=
AjaxHelpers
.
requests
(
this
);
teamEditView
.
$
(
'.u-field-name input'
).
val
(
teamsData
.
name
);
teamEditView
.
$
(
'.u-field-textarea textarea'
).
val
(
teamsData
.
description
);
teamEditView
.
$
(
'.create-team.form-actions .action-primary'
).
click
();
teamsData
.
country
=
''
;
teamsData
.
language
=
''
;
AjaxHelpers
.
expectJsonRequest
(
requests
,
'POST'
,
teamsUrl
,
teamsData
);
AjaxHelpers
.
respondWithError
(
requests
,
400
,
{
'error_message'
:
{
'user_message'
:
'User message'
,
'developer_message'
:
'Developer message'
}}
);
expect
(
teamEditView
.
$
(
'.wrapper-msg .copy'
).
text
().
trim
()).
toBe
(
"User message"
);
});
it
(
"changes route on cancel click"
,
function
()
{
teamEditView
.
$
(
'.create-team.form-actions .action-cancel'
).
click
();
expect
(
Backbone
.
history
.
navigate
.
calls
[
0
].
args
).
toContain
(
'topics/awesomeness'
);
...
...
lms/djangoapps/teams/static/teams/js/views/edit_team.js
View file @
7e9bba5e
...
...
@@ -118,8 +118,12 @@
{
trigger
:
true
}
);
})
.
fail
(
function
()
{
var
message
=
gettext
(
'An error occurred. Please try again.'
);
.
fail
(
function
(
data
)
{
var
response
=
JSON
.
parse
(
data
.
responseText
);
var
message
=
gettext
(
"An error occurred. Please try again."
)
if
(
'error_message'
in
response
&&
'user_message'
in
response
[
'error_message'
]){
message
=
response
[
'error_message'
][
'user_message'
];
}
view
.
showMessage
(
message
,
message
);
});
},
...
...
lms/djangoapps/teams/tests/test_models.py
View file @
7e9bba5e
...
...
@@ -46,3 +46,16 @@ class TeamMembershipTest(SharedModuleStoreTestCase):
CourseTeamMembership
.
get_memberships
(
username
=
username
,
course_ids
=
course_ids
,
team_id
=
team_id
)
.
count
(),
expected_count
)
@ddt.data
(
(
'user1'
,
COURSE_KEY1
,
True
),
(
'user2'
,
COURSE_KEY1
,
True
),
(
'user2'
,
COURSE_KEY2
,
False
),
)
@ddt.unpack
def
test_user_in_team_for_course
(
self
,
username
,
course_id
,
expected_value
):
user
=
getattr
(
self
,
username
)
self
.
assertEqual
(
CourseTeamMembership
.
user_in_team_for_course
(
user
,
course_id
),
expected_value
)
lms/djangoapps/teams/tests/test_views.py
View file @
7e9bba5e
...
...
@@ -501,16 +501,26 @@ class TestCreateTeamAPI(TeamAPITestCase):
def
test_bad_course_data
(
self
,
status
,
data
):
self
.
post_create_team
(
status
,
data
)
def
test_student_in_team
(
self
):
self
.
post_create_team
(
400
,
{
'course_id'
:
str
(
self
.
test_course_1
.
id
),
'description'
:
"You are already on a team in this course."
},
user
=
'student_enrolled'
)
@ddt.data
({
'description'
:
''
},
{
'name'
:
'x'
*
1000
},
{
'name'
:
''
})
def
test_bad_fields
(
self
,
kwargs
):
self
.
post_create_team
(
400
,
self
.
build_team_data
(
**
kwargs
))
def
test_missing_name
(
self
):
self
.
post_create_team
(
400
,
{
'course_id'
:
str
(
self
.
test_course_1
.
id
),
'description'
:
"foobar"
})
@ddt.data
({
'description'
:
''
},
{
'name'
:
'x'
*
1000
},
{
'name'
:
''
})
def
test_bad_fields
(
self
,
kwargs
):
self
.
post_create_team
(
400
,
self
.
build_team_data
(
**
kwargs
))
def
test_full_student_creator
(
self
):
creator
=
self
.
create_and_enroll_student
()
team
=
self
.
post_create_team
(
data
=
self
.
build_team_data
(
...
...
lms/djangoapps/teams/views.py
View file @
7e9bba5e
...
...
@@ -363,6 +363,18 @@ class TeamsListView(ExpandableFieldViewMixin, GenericAPIView):
ugettext_noop
(
'The supplied course_id {course_id} is not valid.'
),
course_id
=
course_id
)
return
Response
({
'field_errors'
:
field_errors
,
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
if
CourseTeamMembership
.
user_in_team_for_course
(
request
.
user
,
course_key
):
error_message
=
build_api_error
(
ugettext_noop
(
'You are already in a team in this course.'
),
course_id
=
course_id
)
return
Response
({
'error_message'
:
error_message
,
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
if
course_key
and
not
has_team_api_access
(
request
.
user
,
course_key
):
return
Response
(
status
=
status
.
HTTP_403_FORBIDDEN
)
...
...
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