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
c04fcc7b
Commit
c04fcc7b
authored
Sep 15, 2014
by
Matt Drayer
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mattdrayer/api: Fixed NRE corner case for grades leaderboard
parent
6cd45965
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
0 deletions
+32
-0
lms/djangoapps/api_manager/courses/tests.py
+20
-0
lms/djangoapps/gradebook/models.py
+12
-0
No files found.
lms/djangoapps/api_manager/courses/tests.py
View file @
c04fcc7b
...
...
@@ -187,6 +187,11 @@ class CoursesApiTests(TestCase):
display_name
=
u"test unit 2"
,
)
self
.
empty_course
=
CourseFactory
.
create
(
start
=
datetime
(
2014
,
6
,
16
,
14
,
30
),
end
=
datetime
(
2015
,
1
,
16
),
org
=
"MTD"
)
self
.
users
=
[
UserFactory
.
create
(
username
=
"testuser"
+
str
(
__
),
profile
=
'test'
)
for
__
in
xrange
(
USER_COUNT
)]
...
...
@@ -1630,6 +1635,13 @@ class CoursesApiTests(TestCase):
response
=
self
.
do_get
(
bogus_test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_courses_metrics_grades_leaders_list_get_empty_course
(
self
):
test_uri
=
'{}/{}/metrics/grades/leaders/'
.
format
(
self
.
base_courses_uri
,
unicode
(
self
.
empty_course
.
id
))
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
'course_avg'
],
0
)
self
.
assertEqual
(
len
(
response
.
data
[
'leaders'
]),
0
)
def
test_courses_completions_leaders_list_get
(
self
):
completion_uri
=
'{}/{}/completions/'
.
format
(
self
.
base_courses_uri
,
unicode
(
self
.
course
.
id
))
# Make last user as observer to make sure that data is being filtered out
...
...
@@ -1722,6 +1734,14 @@ class CoursesApiTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
[
'grades'
]),
user_index
)
def
test_courses_metrics_grades_list_get_empty_course
(
self
):
# Retrieve the list of grades for this course
# All the course/item/user scaffolding was handled in Setup
test_uri
=
'{}/{}/metrics/grades'
.
format
(
self
.
base_courses_uri
,
unicode
(
self
.
empty_course
.
id
))
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
'grade_count'
],
0
)
self
.
assertEqual
(
response
.
data
[
'course_grade_maximum'
],
0
)
def
test_courses_grades_list_get_invalid_course
(
self
):
# Retrieve the list of grades for this course
...
...
lms/djangoapps/gradebook/models.py
View file @
c04fcc7b
...
...
@@ -56,11 +56,21 @@ class StudentGradebook(TimeStampedModel):
have not yet submitted a response to a scored assessment which means no grade has been calculated.
"""
data
=
{}
data
[
'course_avg'
]
=
0
data
[
'course_max'
]
=
0
data
[
'course_min'
]
=
0
data
[
'course_count'
]
=
0
data
[
'queryset'
]
=
[]
total_user_count
=
CourseEnrollment
.
users_enrolled_in
(
course_key
)
.
count
()
if
total_user_count
:
# Generate the base data set we're going to work with
queryset
=
StudentGradebook
.
objects
.
select_related
(
'user'
)
\
.
filter
(
course_id__exact
=
course_key
,
user__is_active
=
True
)
gradebook_user_count
=
len
(
queryset
)
# Remove any users who should not be considered for the statistics
if
exclude_users
:
total_user_count
=
total_user_count
-
len
(
exclude_users
)
queryset
=
queryset
.
exclude
(
user__in
=
exclude_users
)
...
...
@@ -71,6 +81,8 @@ class StudentGradebook(TimeStampedModel):
if
gradebook_user_count
<
total_user_count
:
# Take into account any ungraded students (assumes zeros for grades...)
course_avg
=
course_avg
/
total_user_count
*
gradebook_user_count
# Fill up the response container
data
[
'course_avg'
]
=
course_avg
data
[
'course_max'
]
=
queryset
.
aggregate
(
Max
(
'grade'
))[
'grade__max'
]
data
[
'course_min'
]
=
queryset
.
aggregate
(
Min
(
'grade'
))[
'grade__min'
]
...
...
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