From 2f2948675e8b85f83df7b518d9bdaef9514dfb48 Mon Sep 17 00:00:00 2001 From: Maria Grimaldi Date: Fri, 12 Jan 2024 10:02:06 -0400 Subject: [PATCH] feat: return navigation disabled as sequence metadata Return navigation disabled as sequence metadata when Hide From TOC is enabled, so the student cannot navigate to another sequences in the course outline. https://openedx.atlassian.net/wiki/spaces/OEPM/pages/3853975595/Feature+Enhancement+Proposal+Hide+Sections+from+course+outline --- xmodule/seq_block.py | 11 +++++++++++ xmodule/tests/test_sequence.py | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/xmodule/seq_block.py b/xmodule/seq_block.py index 2b9aed2dd732..944c73400ab5 100644 --- a/xmodule/seq_block.py +++ b/xmodule/seq_block.py @@ -376,8 +376,19 @@ def get_metadata(self, view=STUDENT_VIEW, context=None): meta['display_name'] = self.display_name_with_default meta['format'] = getattr(self, 'format', '') meta['is_hidden_after_due'] = is_hidden_after_due + meta['navigation_disabled'] = self.is_sequence_navigation_disabled() return meta + def is_sequence_navigation_disabled(self): + """ + Returns whether the navigation to other sequences is disabled. + + As of today, this is used to disable the navigation to other sequences when the + current sequence is configured as Hide from Table of Contents. But it can be + extended to other use cases in the future. + """ + return getattr(self, "hide_from_toc", False) + @classmethod def verify_current_content_visibility(cls, date, hide_after_date): """ diff --git a/xmodule/tests/test_sequence.py b/xmodule/tests/test_sequence.py index c080be26516d..be773865a717 100644 --- a/xmodule/tests/test_sequence.py +++ b/xmodule/tests/test_sequence.py @@ -443,6 +443,15 @@ def test_get_metadata(self): assert metadata['tag'] == 'sequential' assert metadata['display_name'] == self.sequence_3_1.display_name_with_default + def test_get_metadata_navigation_disabled(self): + """Test that the sequence metadata is returned correctly when navigation is disabled""" + self.sequence_3_1.hide_from_toc = True + metadata = self.sequence_3_1.get_metadata() + assert len(metadata['items']) == 3 + assert metadata['tag'] == 'sequential' + assert metadata['display_name'] == self.sequence_3_1.display_name_with_default + assert metadata['navigation_disabled'] is True + @override_settings(FIELD_OVERRIDE_PROVIDERS=( 'openedx.features.content_type_gating.field_override.ContentTypeGatingFieldOverride', ))