From 8a180744edead97b553ac13f43704c177e701ffc Mon Sep 17 00:00:00 2001 From: polesye Date: Tue, 3 Dec 2013 12:50:16 +0200 Subject: [PATCH 1/4] Fix LTI max_score method. --- common/lib/xmodule/xmodule/lti_module.py | 2 +- common/lib/xmodule/xmodule/tests/test_lti_unit.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/lti_module.py b/common/lib/xmodule/xmodule/lti_module.py index 12bca979dbac..abc2c7084e52 100644 --- a/common/lib/xmodule/xmodule/lti_module.py +++ b/common/lib/xmodule/xmodule/lti_module.py @@ -375,7 +375,7 @@ def oauth_params(self, custom_parameters, client_key, client_secret): return params def max_score(self): - return self.weight + return self.weight if self.graded else 0 @XBlock.handler diff --git a/common/lib/xmodule/xmodule/tests/test_lti_unit.py b/common/lib/xmodule/xmodule/tests/test_lti_unit.py index b79bec16ccf1..2049366930c1 100644 --- a/common/lib/xmodule/xmodule/tests/test_lti_unit.py +++ b/common/lib/xmodule/xmodule/tests/test_lti_unit.py @@ -249,3 +249,13 @@ def test_verify_oauth_body_sign(self): def test_client_key_secret(self): pass + def test_max_score(self): + self.xmodule.weight = 100.0 + + self.xmodule.graded = True + self.assertEqual(self.xmodule.max_score(), 100) + + self.xmodule.graded = False + self.assertEqual(self.xmodule.max_score(), 0) + + From 2088a2159e8bc94a627e7547500952f308b75619 Mon Sep 17 00:00:00 2001 From: polesye Date: Tue, 3 Dec 2013 13:41:51 +0200 Subject: [PATCH 2/4] Add min value. --- common/lib/xmodule/xmodule/lti_module.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/lti_module.py b/common/lib/xmodule/xmodule/lti_module.py index abc2c7084e52..96694491accb 100644 --- a/common/lib/xmodule/xmodule/lti_module.py +++ b/common/lib/xmodule/xmodule/lti_module.py @@ -88,7 +88,12 @@ class LTIFields(object): custom_parameters = List(help="Custom parameters (vbid, book_location, etc..)", scope=Scope.settings) open_in_a_new_page = Boolean(help="Should LTI be opened in new page?", default=True, scope=Scope.settings) graded = Boolean(help="Grades will be considered in overall score.", default=False, scope=Scope.settings) - weight = Float(help="Weight for student grades.", default=1.0, scope=Scope.settings) + weight = Float( + help="Weight for student grades.", + default=1.0, + scope=Scope.settings, + values={"min": 0}, + ) class LTIModule(LTIFields, XModule): From 932d13ede883801fe60f1adce3f1eb20b7671f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Tue, 3 Dec 2013 17:48:27 +0200 Subject: [PATCH 3/4] Make has_score to be XField insted of decriptor property. --- common/lib/xmodule/xmodule/lti_module.py | 4 ++-- common/lib/xmodule/xmodule/tests/test_lti_unit.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/common/lib/xmodule/xmodule/lti_module.py b/common/lib/xmodule/xmodule/lti_module.py index 96694491accb..df826eed1218 100644 --- a/common/lib/xmodule/xmodule/lti_module.py +++ b/common/lib/xmodule/xmodule/lti_module.py @@ -94,6 +94,7 @@ class LTIFields(object): scope=Scope.settings, values={"min": 0}, ) + has_score = Boolean(help="Does this LTI module have score?", default=False, scope=Scope.settings) class LTIModule(LTIFields, XModule): @@ -380,7 +381,7 @@ def oauth_params(self, custom_parameters, client_key, client_secret): return params def max_score(self): - return self.weight if self.graded else 0 + return self.weight if self.has_score else None @XBlock.handler @@ -586,6 +587,5 @@ class LTIDescriptor(LTIFields, MetadataOnlyEditingDescriptor, EmptyDataRawDescri """ Descriptor for LTI Xmodule. """ - has_score = True module_class = LTIModule grade_handler = module_attr('grade_handler') diff --git a/common/lib/xmodule/xmodule/tests/test_lti_unit.py b/common/lib/xmodule/xmodule/tests/test_lti_unit.py index 2049366930c1..427a3c3ff212 100644 --- a/common/lib/xmodule/xmodule/tests/test_lti_unit.py +++ b/common/lib/xmodule/xmodule/tests/test_lti_unit.py @@ -253,9 +253,12 @@ def test_max_score(self): self.xmodule.weight = 100.0 self.xmodule.graded = True - self.assertEqual(self.xmodule.max_score(), 100) + self.assertEqual(self.xmodule.max_score(), None) + + self.xmodule.has_score = True + self.assertEqual(self.xmodule.max_score(), 100.0) self.xmodule.graded = False - self.assertEqual(self.xmodule.max_score(), 0) + self.assertEqual(self.xmodule.max_score(), 100.0) From 1cd9325ef5df633656fd0294ff2e7bc44f7efa51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Tue, 3 Dec 2013 19:04:21 +0200 Subject: [PATCH 4/4] Fix LTI tests. --- common/lib/xmodule/xmodule/tests/test_lti_unit.py | 1 + lms/djangoapps/courseware/features/lti.feature | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/lib/xmodule/xmodule/tests/test_lti_unit.py b/common/lib/xmodule/xmodule/tests/test_lti_unit.py index 427a3c3ff212..bb04b20868d3 100644 --- a/common/lib/xmodule/xmodule/tests/test_lti_unit.py +++ b/common/lib/xmodule/xmodule/tests/test_lti_unit.py @@ -194,6 +194,7 @@ def test_good_request(self): Response from Tool Provider is correct. """ self.xmodule.verify_oauth_body_sign = Mock() + self.xmodule.has_score = True request = Request(self.environ) request.body = self.get_request_body() response = self.xmodule.grade_handler(request, '') diff --git a/lms/djangoapps/courseware/features/lti.feature b/lms/djangoapps/courseware/features/lti.feature index 7f27a65b5a1b..eb2da7436b31 100644 --- a/lms/djangoapps/courseware/features/lti.feature +++ b/lms/djangoapps/courseware/features/lti.feature @@ -44,8 +44,8 @@ Feature: LMS.LTI component Scenario: Graded LTI component in LMS is correctly works Given the course has correct LTI credentials And the course has an LTI component with correct fields: - | open_in_a_new_page | weight | is_graded | - | False | 10 | True | + | open_in_a_new_page | weight | is_graded | has_score | + | False | 10 | True | True | And I submit answer to LTI question And I click on the "Progress" tab Then I see text "Problem Scores: 5/10"