forked from openedx/edx-platform
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added max score to output of get_student_grade_summary_data.
This will put the actual score and actual max score in scope for the the return_csv function, so actual scores can be dumped. The ultimate goal is to provide this data in the CSV dump that is passed to Stellar via pylmod. This is PR openedx#10395 on edX, and issue 95 on mitocw's edx fork. https://github.com/edx/edx-platform/pull/10395 #95
- Loading branch information
1 parent
29fbe72
commit ddc5f45
Showing
3 changed files
with
233 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -225,4 +225,36 @@ Alessandro Verdura <[email protected]> | |
Sven Marnach <[email protected]> | ||
Richard Moch <[email protected]> | ||
Albert Liang <[email protected]> | ||
<<<<<<< HEAD | ||
|
||
======= | ||
Pan Luo <[email protected]> | ||
Tyler Nickerson <[email protected]> | ||
Vedran Karačić <[email protected]> | ||
William Ono <[email protected]> | ||
Dongwook Yoon <[email protected]> | ||
Awais Qureshi <[email protected]> | ||
Eric Fischer <[email protected]> | ||
Brian Beggs <[email protected]> | ||
Bill DeRusha <[email protected]> | ||
Kevin Falcone <[email protected]> | ||
Mirjam Škarica <[email protected]> | ||
Saleem Latif <[email protected]> | ||
Julien Paillé <[email protected]> | ||
Michael Frey <[email protected]> | ||
Hasnain Naveed <[email protected]> | ||
J. Cliff Dyer <[email protected]> | ||
Jamie Folsom <[email protected]> | ||
George Schneeloch <[email protected]> | ||
Dustin Gadal <[email protected]> | ||
Ibrahim Ahmed <[email protected]> | ||
Robert Raposa <[email protected]> | ||
Giovanni Di Milia <[email protected]> | ||
Peter Wilkins <[email protected]> | ||
Justin Abrahms <[email protected]> | ||
Arbab Nazar <[email protected]> | ||
Douglas Hall <[email protected]> | ||
Awais Jibran <[email protected]> | ||
Muhammad Rehan <[email protected]> | ||
Shawn Milochik <[email protected]> | ||
>>>>>>> 5d88300... Added max score to output of get_student_grade_summary_data. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -67,9 +67,29 @@ def test_download_raw_grades_dump(self): | |
''' | ||
self.assertEqual(body, expected_csv, msg) | ||
|
||
<<<<<<< HEAD | ||
def test_grade_summary_data(self): | ||
""" | ||
Test grade summary data report generation | ||
======= | ||
def get_expected_grade_data( | ||
self, get_grades=True, get_raw_scores=False, | ||
use_offline=False, get_score_max=False): | ||
""" | ||
Return expected results from the get_student_grade_summary_data call | ||
with any options selected. | ||
|
||
Note that the kwargs accepted by get_expected_grade_data (and their | ||
default values) must be identical to those in | ||
get_student_grade_summary_data for this function to be accurate. | ||
If kwargs are added or removed, or the functionality triggered by | ||
them changes, this function must be updated to match. | ||
|
||
If get_score_max is True, instead of a single score between 0 and 1, | ||
the actual score and total possible are returned. For example, if the | ||
student got one out of two possible points, the values (1, 2) will be | ||
returned instead of 0.5. | ||
>>>>>>> 5d88300... Added max score to output of get_student_grade_summary_data. | ||
""" | ||
self.answer_question() | ||
|
@@ -104,6 +124,166 @@ def test_grade_summary_data(self): | |
] | ||
} | ||
<<<<<<< HEAD | ||
======= | ||
# The first five columns contain the student ID, username, | ||
# full name, and e-mail addresses. | ||
non_grade_columns = 5 | ||
# If the following 'if' is triggered, the | ||
# get_student_grade_summary_data function will not return any | ||
# grade data. Only the "non_grade_columns." | ||
# So strip out the headers beyond the "non_grade_columns," and | ||
# strip out all the grades in the 'data' key. | ||
if not get_grades or use_offline: | ||
expected_data["header"] = expected_data["header"][:non_grade_columns] | ||
# This iterates over the lists of grades in the 'data' key | ||
# of the return dictionary and strips out everything after | ||
# the non_grade_columns. | ||
for index, rec in enumerate(expected_data["data"]): | ||
expected_data["data"][index] = rec[:non_grade_columns] | ||
# Wipe out all data in the 'assignments' key if use_offline | ||
# is True; no assignment data is returned. | ||
if use_offline: | ||
expected_data['assignments'] = [] | ||
# If get_grades is False, get_student_grade_summary_data doesn't | ||
# even return an 'assignments' key, so delete it. | ||
if get_grades is False: | ||
del expected_data['assignments'] | ||
# If get_raw_scores is true, get_student_grade_summary_data returns | ||
# the raw score per assignment. For example, the "0.3333333333333333" | ||
# in the data above is for getting one out of three possible | ||
# answers correct. Getting raw scores means the actual score (1) is | ||
# return instead of: 1.0/3.0 | ||
# For some reason, this also causes it to not to return any assignments | ||
# without attempts, so most of the headers are removed. | ||
elif get_raw_scores: | ||
expected_data["data"] = [ | ||
[ | ||
1, u'u1', u'username', u'[email protected]', | ||
'', None, None, None | ||
], | ||
[ | ||
2, u'u2', u'username', u'[email protected]', | ||
'', 0.0, 1.0, 0.0 | ||
], | ||
] | ||
expected_data["assignments"] = [u'p3', u'p2', u'p1'] | ||
expected_data["header"] = [ | ||
u'ID', u'Username', u'Full Name', u'edX email', | ||
u'External email', u'p3', u'p2', u'p1' | ||
] | ||
# Strip out the single-value float scores and replace them | ||
# with two-tuples of actual and possible scores (see docstring). | ||
if get_score_max: | ||
expected_data["data"][-1][-3:] = (0.0, 1), (1.0, 1.0), (0.0, 1) | ||
return expected_data | ||
def test_grade_summary_data_defaults(self): | ||
""" | ||
Test grade summary data report generation with all default kwargs. | ||
|
||
This test compares the output of the get_student_grade_summary_data | ||
with a dictionary of exected values. The purpose of this test is | ||
to ensure that future changes to the get_student_grade_summary_data | ||
function (for example, mitocw/edx-platform #95). | ||
""" | ||
request = DummyRequest() | ||
self.answer_question() | ||
data = get_student_grade_summary_data(request, self.course) | ||
expected_data = self.get_expected_grade_data() | ||
self.compare_data(data, expected_data) | ||
def test_grade_summary_data_raw_scores(self): | ||
""" | ||
Test grade summary data report generation with get_raw_scores True. | ||
""" | ||
request = DummyRequest() | ||
self.answer_question() | ||
data = get_student_grade_summary_data( | ||
request, self.course, get_raw_scores=True, | ||
) | ||
expected_data = self.get_expected_grade_data(get_raw_scores=True) | ||
self.compare_data(data, expected_data) | ||
def test_grade_summary_data_no_grades(self): | ||
""" | ||
Test grade summary data report generation with | ||
get_grades set to False. | ||
""" | ||
request = DummyRequest() | ||
self.answer_question() | ||
data = get_student_grade_summary_data( | ||
request, self.course, get_grades=False | ||
) | ||
expected_data = self.get_expected_grade_data(get_grades=False) | ||
# if get_grades is False, get_expected_grade_data does not | ||
# add an "assignments" key. | ||
self.assertNotIn("assignments", expected_data) | ||
self.compare_data(data, expected_data) | ||
def test_grade_summary_data_use_offline(self): | ||
""" | ||
Test grade summary data report generation with use_offline True. | ||
""" | ||
request = DummyRequest() | ||
self.answer_question() | ||
data = get_student_grade_summary_data( | ||
request, self.course, use_offline=True) | ||
expected_data = self.get_expected_grade_data(use_offline=True) | ||
self.compare_data(data, expected_data) | ||
def test_grade_summary_data_use_offline_and_raw_scores(self): | ||
""" | ||
Test grade summary data report generation with use_offline | ||
and get_raw_scores both True. | ||
""" | ||
request = DummyRequest() | ||
self.answer_question() | ||
data = get_student_grade_summary_data( | ||
request, self.course, use_offline=True, get_raw_scores=True | ||
) | ||
expected_data = self.get_expected_grade_data( | ||
use_offline=True, get_raw_scores=True | ||
) | ||
self.compare_data(data, expected_data) | ||
def test_grade_summary_data_get_score_max(self): | ||
""" | ||
Test grade summary data report generation with get_score_max set | ||
to True (also requires get_raw_scores to be True). | ||
""" | ||
request = DummyRequest() | ||
self.answer_question() | ||
data = get_student_grade_summary_data( | ||
request, self.course, use_offline=True, get_raw_scores=True, | ||
get_score_max=True, | ||
) | ||
expected_data = self.get_expected_grade_data( | ||
use_offline=True, get_raw_scores=True, get_score_max=True, | ||
) | ||
self.compare_data(data, expected_data) | ||
def compare_data(self, data, expected_data): | ||
""" | ||
Compare the output of the get_student_grade_summary_data | ||
function to the expected_data data. | ||
""" | ||
|
||
# Currently, all kwargs to get_student_grade_summary_data | ||
# return a dictionary with the same keys, except for | ||
# get_grades=False, which results in no 'assignments' key. | ||
# This is explicitly checked for above in | ||
# test_grade_summary_data_no_grades. This is a backup which | ||
# will catch future changes. | ||
self.assertListEqual( | ||
expected_data.keys(), | ||
data.keys(), | ||
) | ||
|
||
# Ensure the student info and assignment names are as expected. | ||
>>>>>>> 5d88300... Added max score to output of get_student_grade_summary_data. | ||
for key in ['assignments', 'header']: | ||
self.assertListEqual(expected_data[key], data[key]) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters