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
cbfdf597
Commit
cbfdf597
authored
Aug 10, 2012
by
David Ormsbee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix test error regarding UserProfiles (a UserProfile must exist before a CourseEnrollment)
parent
b3676cd7
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
38 additions
and
22 deletions
+38
-22
common/djangoapps/student/models.py
+19
-7
common/djangoapps/student/tests.py
+18
-14
rakefile
+1
-1
No files found.
common/djangoapps/student/models.py
View file @
cbfdf597
...
...
@@ -258,7 +258,7 @@ def add_user_to_default_group(user, group):
@receiver
(
post_save
,
sender
=
User
)
def
replicate_user_save
(
sender
,
**
kwargs
):
user_obj
=
kwargs
[
'instance'
]
return
replicate_model
(
User
.
save
,
user_obj
.
id
,
**
kwargs
)
return
replicate_model
(
User
.
save
,
user_obj
,
user_obj
.
id
)
@receiver
(
post_save
,
sender
=
CourseEnrollment
)
def
replicate_enrollment_save
(
sender
,
**
kwargs
):
...
...
@@ -275,21 +275,27 @@ def replicate_enrollment_save(sender, **kwargs):
return
enrollment_obj
=
kwargs
[
'instance'
]
log
.
debug
(
"Replicating user because of new enrollment"
)
replicate_user
(
enrollment_obj
.
user
,
enrollment_obj
.
course_id
)
replicate_model
(
CourseEnrollment
.
save
,
enrollment_obj
.
user_id
,
**
kwargs
)
replicate_model
(
UserProfile
.
save
,
enrollment_obj
.
user_id
,
**
kwargs
)
log
.
debug
(
"Replicating enrollment because of new enrollment"
)
replicate_model
(
CourseEnrollment
.
save
,
enrollment_obj
,
enrollment_obj
.
user_id
)
log
.
debug
(
"Replicating user profile because of new enrollment"
)
user_profile
=
UserProfile
.
objects
.
get
(
user_id
=
enrollment_obj
.
user_id
)
replicate_model
(
UserProfile
.
save
,
user_profile
,
enrollment_obj
.
user_id
)
@receiver
(
post_delete
,
sender
=
CourseEnrollment
)
def
replicate_enrollment_delete
(
sender
,
**
kwargs
):
enrollment_obj
=
kwargs
[
'instance'
]
return
replicate_model
(
CourseEnrollment
.
delete
,
enrollment_obj
.
user_id
,
**
kwargs
)
return
replicate_model
(
CourseEnrollment
.
delete
,
enrollment_obj
,
enrollment_obj
.
user_id
)
@receiver
(
post_save
,
sender
=
UserProfile
)
def
replicate_userprofile_save
(
sender
,
**
kwargs
):
"""We just updated the UserProfile (say an update to the name), so push that
change to all Course DBs that we're enrolled in."""
user_profile_obj
=
kwargs
[
'instance'
]
return
replicate_model
(
UserProfile
.
save
,
user_profile_obj
.
user_id
,
**
kwargs
)
return
replicate_model
(
UserProfile
.
save
,
user_profile_obj
,
user_profile_obj
.
user_id
)
######### Replication functions #########
...
...
@@ -312,19 +318,25 @@ def replicate_user(portal_user, course_db_name):
setattr
(
course_user
,
field
,
getattr
(
portal_user
,
field
))
mark_handled
(
course_user
)
log
.
debug
(
"User {0} found in Course DB, replicating fields to {1}"
.
format
(
course_user
,
course_db_name
))
course_user
.
save
(
using
=
course_db_name
)
# Just being explicit.
except
User
.
DoesNotExist
:
# Otherwise, just make a straight copy to the Course DB.
mark_handled
(
portal_user
)
log
.
debug
(
"User {0} not found in Course DB, creating copy in {1}"
.
format
(
portal_user
,
course_db_name
))
portal_user
.
save
(
using
=
course_db_name
)
def
replicate_model
(
model_method
,
user_id
,
**
kwargs
):
def
replicate_model
(
model_method
,
instance
,
user_id
):
"""
model_method is the model action that we want replicated. For instance,
UserProfile.save
"""
instance
=
kwargs
[
'instance'
]
if
isinstance
(
instance
,
UserProfile
):
log
.
debug
(
"replicate_model called on UserProfile {0}"
.
format
(
instance
))
if
not
should_replicate
(
instance
):
return
...
...
common/djangoapps/student/tests.py
View file @
cbfdf597
...
...
@@ -118,30 +118,34 @@ class ReplicationTest(TestCase):
def
test_enrollment_for_user_info_after_enrollment
(
self
):
"""Test the effect of Enrolling in a class if you've already got user
data to be copied over."""
"""Test the effect of modifying User data after you've enrolled."""
# Create our User
portal_user
=
User
.
objects
.
create_user
(
'
jack'
,
'jack
@edx.org'
,
'fakepass'
)
portal_user
.
first_name
=
"
Jack
"
portal_user
=
User
.
objects
.
create_user
(
'
patty'
,
'patty
@edx.org'
,
'fakepass'
)
portal_user
.
first_name
=
"
Patty
"
portal_user
.
save
()
# Now let's see if creating a CourseEnrollment copies all the relevant
# data when things are saved.
portal_enrollment
=
CourseEnrollment
.
objects
.
create
(
user
=
portal_user
,
course_id
=
COURSE_1
)
portal_enrollment
.
save
()
# Set up our UserProfile info
portal_user_profile
=
UserProfile
.
objects
.
create
(
user
=
portal_user
,
name
=
"
Jack
Foo"
,
name
=
"
Patty
Foo"
,
level_of_education
=
None
,
gender
=
'
m
'
,
gender
=
'
f
'
,
mailing_address
=
None
,
goals
=
"World
domination
"
,
goals
=
"World
peace
"
,
)
portal_user_profile
.
save
()
# Now let's see if creating a CourseEnrollment copies all the relevant
# data when things are saved.
portal_enrollment
=
CourseEnrollment
.
objects
.
create
(
user
=
portal_user
,
course_id
=
COURSE_1
)
portal_enrollment
.
save
()
portal_user
.
last_name
=
"Bar"
portal_user
.
save
()
portal_user_profile
.
gender
=
'm'
portal_user_profile
.
save
()
# Grab all the copies we expect, and make sure it doesn't end up in
# places we don't expect.
course_user
=
User
.
objects
.
using
(
COURSE_1
)
.
get
(
id
=
portal_user
.
id
)
...
...
rakefile
View file @
cbfdf597
...
...
@@ -88,7 +88,7 @@ $failed_tests = 0
def
run_tests
(
system
,
report_dir
,
stop_on_failure
=
true
)
ENV
[
'NOSE_XUNIT_FILE'
]
=
File
.
join
(
report_dir
,
"nosetests.xml"
)
ENV
[
'NOSE_COVER_HTML_DIR'
]
=
File
.
join
(
report_dir
,
"cover"
)
dirs
=
Dir
[
"common/djangoapps/*"
]
+
Dir
[
"
#{
system
}
/djangoapps/*"
]
dirs
=
Dir
[
"common/djangoapps/*"
]
#
+ Dir["#{system}/djangoapps/*"]
sh
(
django_admin
(
system
,
:test
,
'test'
,
*
dirs
.
each
))
do
|
ok
,
res
|
if
!
ok
and
stop_on_failure
abort
"Test failed!"
...
...
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