Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
edx-platform-release
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Hsin-Yu Chien
edx-platform-release
Commits
0e194bf5
Unverified
Commit
0e194bf5
authored
4 years ago
by
Nathan Sprenkle
Committed by
GitHub
4 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Add team protection tests for CSV team management (#26019)
parent
7817c47d
No related branches found
Branches containing commit
Tags
release-2021-01-11-12.32
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
lms/djangoapps/teams/tests/test_csv.py
+88
-1
88 additions, 1 deletion
lms/djangoapps/teams/tests/test_csv.py
with
88 additions
and
1 deletion
lms/djangoapps/teams/tests/test_csv.py
+
88
−
1
View file @
0e194bf5
...
...
@@ -453,7 +453,7 @@ class TeamMembershipImportManagerTests(TeamMembershipEventTestMixin, SharedModul
CourseEnrollmentFactory
.
create
(
user
=
user
,
course_id
=
self
.
course
.
id
,
mode
=
mode
)
# When I add them to a team that does not exist
self
.
assertEqual
s
(
CourseTeam
.
objects
.
all
().
count
(),
0
)
self
.
assertEqual
(
CourseTeam
.
objects
.
all
().
count
(),
0
)
csv_data
=
self
.
_csv_reader_from_array
([
[
'
user
'
,
'
mode
'
,
'
teamset_1
'
],
[
user
.
username
,
mode
,
'
new_exciting_team
'
],
...
...
@@ -468,6 +468,93 @@ class TeamMembershipImportManagerTests(TeamMembershipEventTestMixin, SharedModul
self
.
assertTrue
(
CourseTeamMembership
.
is_user_on_team
(
user
,
new_team
))
self
.
assert_learner_added_emitted
(
new_team
.
team_id
,
user
.
id
)
# Team protection status tests
def
test_create_new_mixed_enrollment_team_fails
(
self
):
# Given users of different tracks
verified_learner
=
self
.
_create_and_enroll_test_user
(
'
verified_learner
'
,
mode
=
'
verified
'
)
masters_learner
=
self
.
_create_and_enroll_test_user
(
'
masters_learner
'
,
mode
=
'
masters
'
)
# When I attempt to add them to the same team
self
.
assertEqual
(
CourseTeam
.
objects
.
all
().
count
(),
0
)
csv_data
=
self
.
_csv_reader_from_array
([
[
'
user
'
,
'
mode
'
,
'
teamset_1
'
],
[
verified_learner
.
username
,
'
verified
'
,
'
new_exciting_team
'
],
[
masters_learner
.
username
,
'
masters
'
,
'
new_exciting_team
'
]
])
result
=
self
.
import_manager
.
set_team_memberships
(
csv_data
)
# The import fails with "mixed users" error and no team was created
self
.
assertFalse
(
result
)
self
.
assert_no_events_were_emitted
()
self
.
assertEqual
(
self
.
import_manager
.
validation_errors
[
0
],
'
Team new_exciting_team cannot have Master’s track users mixed with users in other tracks.
'
)
self
.
assertEqual
(
CourseTeam
.
objects
.
all
().
count
(),
0
)
def
test_add_incompatible_mode_to_existing_unprotected_team_fails
(
self
):
# Given an existing unprotected team
unprotected_team
=
CourseTeamFactory
(
course_id
=
self
.
course
.
id
,
name
=
'
unprotected_team
'
,
topic_id
=
'
teamset_1
'
)
verified_learner
=
self
.
_create_and_enroll_test_user
(
'
verified_learner
'
,
mode
=
'
verified
'
)
unprotected_team
.
add_user
(
verified_learner
)
# When I attempt to add a student of an incompatible enrollment mode
masters_learner
=
self
.
_create_and_enroll_test_user
(
'
masters_learner
'
,
mode
=
'
masters
'
)
csv_data
=
self
.
_csv_reader_from_array
([
[
'
user
'
,
'
mode
'
,
'
teamset_1
'
],
[
masters_learner
.
username
,
'
masters
'
,
'
unprotected_team
'
]
])
result
=
self
.
import_manager
.
set_team_memberships
(
csv_data
)
# The import fails with "mixed users" error and learner not added to team
self
.
assertFalse
(
result
)
self
.
assert_no_events_were_emitted
()
self
.
assertEqual
(
self
.
import_manager
.
validation_errors
[
0
],
'
Team unprotected_team cannot have Master’s track users mixed with users in other tracks.
'
)
self
.
assertFalse
(
CourseTeamMembership
.
is_user_on_team
(
masters_learner
,
unprotected_team
))
def
test_add_incompatible_mode_to_existing_protected_team_fails
(
self
):
# Given an existing protected team
protected_team
=
CourseTeamFactory
(
course_id
=
self
.
course
.
id
,
name
=
'
protected_team
'
,
topic_id
=
'
teamset_1
'
,
organization_protected
=
True
,
)
masters_learner
=
self
.
_create_and_enroll_test_user
(
'
masters_learner
'
,
mode
=
'
masters
'
)
protected_team
.
add_user
(
masters_learner
)
# When I attempt to add a student of an incompatible enrollment mode
verified_learner
=
self
.
_create_and_enroll_test_user
(
'
verified_learner
'
,
mode
=
'
verified
'
)
csv_data
=
self
.
_csv_reader_from_array
([
[
'
user
'
,
'
mode
'
,
'
teamset_1
'
],
[
verified_learner
.
username
,
'
verified
'
,
'
protected_team
'
]
])
result
=
self
.
import_manager
.
set_team_memberships
(
csv_data
)
# The import fails with "mixed users" error and learner not added to team
self
.
assertFalse
(
result
)
self
.
assert_no_events_were_emitted
()
self
.
assertEqual
(
self
.
import_manager
.
validation_errors
[
0
],
'
Team protected_team cannot have Master’s track users mixed with users in other tracks.
'
)
self
.
assertFalse
(
CourseTeamMembership
.
is_user_on_team
(
verified_learner
,
protected_team
))
def
_create_and_enroll_test_user
(
self
,
username
,
course_id
=
None
,
mode
=
"
audit
"
):
"""
Create user and add to test course with mode, default is test course in audit mode.
Returns user.
"""
user
=
UserFactory
.
create
(
username
=
username
)
if
not
course_id
:
course_id
=
self
.
course
.
id
CourseEnrollmentFactory
.
create
(
user
=
user
,
course_id
=
course_id
,
mode
=
mode
)
return
user
def
_csv_reader_from_array
(
self
,
rows
):
"""
Given a 2D array, treat each element as a cell of a CSV file and construct a reader
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment