excluding html blocks form adding in computable blocks for completion

This commit is contained in:
Hammad Ahmad Waqas
2018-10-02 14:08:27 +05:00
parent 65ab430c04
commit c7a8ddedea
2 changed files with 45 additions and 1 deletions

View File

@@ -470,7 +470,8 @@ def get_subsection_completion_percentage(subsection_usage_key, user):
block, 'completion_mode' block, 'completion_mode'
) )
if completion_mode not in (CompletionMode.AGGREGATOR, CompletionMode.EXCLUDED): if completion_mode not in (CompletionMode.AGGREGATOR, CompletionMode.EXCLUDED) \
and not block.block_type == 'html':
completable_blocks.append(block) completable_blocks.append(block)
if not completable_blocks: if not completable_blocks:

View File

@@ -3,6 +3,7 @@ Tests for the gating API
""" """
import unittest import unittest
from completion.models import BlockCompletion
from mock import patch, Mock from mock import patch, Mock
from ddt import ddt, data, unpack from ddt import ddt, data, unpack
from django.conf import settings from django.conf import settings
@@ -60,6 +61,13 @@ class TestGatingApi(ModuleStoreTestCase, MilestonesTestCaseMixin):
display_name='untitled sequential 2' display_name='untitled sequential 2'
) )
# create vertical
self.vertical = ItemFactory.create(
parent_location=self.seq1.location,
category='vertical',
display_name='untitled vertical 1'
)
self.generic_milestone = { self.generic_milestone = {
'name': 'Test generic milestone', 'name': 'Test generic milestone',
'namespace': unicode(self.seq1.location), 'namespace': unicode(self.seq1.location),
@@ -221,6 +229,41 @@ class TestGatingApi(ModuleStoreTestCase, MilestonesTestCaseMixin):
gating_api.is_gate_fulfilled(self.course.id, self.seq1.location, student.id), is_gate_fulfilled gating_api.is_gate_fulfilled(self.course.id, self.seq1.location, student.id), is_gate_fulfilled
) )
@data(
(1, 1, 100),
(0, 0, 0),
(1, 0, 100),
(0, 1, 0),
)
@unpack
def test_get_subsection_completion_percentage(self, user_problem_completion, user_html_completion,
expected_completion_percentage):
"""
Test if gating_api.get_subsection_completion_percentage returns expected completion percentage
Note:
html blocks are ignored in computation of completion_percentage,so it should not affect result.
"""
student = UserFactory(is_staff=False)
problem_block = ItemFactory.create(
parent_location=self.vertical.location,
category='problem',
display_name='some problem'
)
html_block = ItemFactory.create(
parent_location=self.vertical.location,
category='html',
display_name='some html block'
)
with patch.object(BlockCompletion, 'get_course_completions') as course_block_completions_mock:
course_block_completions_mock.return_value = {
problem_block.location: user_problem_completion,
html_block.location: user_html_completion,
}
completion_percentage = gating_api.get_subsection_completion_percentage(self.seq1.location, student)
self.assertEqual(completion_percentage, expected_completion_percentage)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def test_compute_is_prereq_met(self): def test_compute_is_prereq_met(self):
""" """