From 5528adccb1a73007f2ee803110a096eb254274ca Mon Sep 17 00:00:00 2001
From: "Dave St.Germain" <dstgermain@edx.org>
Date: Mon, 3 Feb 2020 10:59:33 -0500
Subject: [PATCH] Include bookmark info in sequence metadata.

---
 common/lib/xmodule/xmodule/seq_module.py          | 7 ++++---
 common/lib/xmodule/xmodule/tests/test_sequence.py | 3 +++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/common/lib/xmodule/xmodule/seq_module.py b/common/lib/xmodule/xmodule/seq_module.py
index d88c8b14345..17f27453d4f 100644
--- a/common/lib/xmodule/xmodule/seq_module.py
+++ b/common/lib/xmodule/xmodule/seq_module.py
@@ -21,6 +21,7 @@ from six import text_type
 from web_fragments.fragment import Fragment
 from xblock.completable import XBlockCompletionMode
 from xblock.core import XBlock
+from xblock.exceptions import NoSuchServiceError
 from xblock.fields import Boolean, Integer, List, Scope, String
 
 from .exceptions import NotFoundError
@@ -503,9 +504,9 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule):
         render_items = not context.get('exclude_units', False)
         is_user_authenticated = self.is_user_authenticated(context)
         completion_service = self.runtime.service(self, 'completion')
-        if render_items:
+        try:
             bookmarks_service = self.runtime.service(self, 'bookmarks')
-        else:
+        except NoSuchServiceError:
             bookmarks_service = None
         context['username'] = self.runtime.service(self, 'user').get_current_user().opt_attrs.get(
             'edx-platform.username')
@@ -529,7 +530,7 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule):
             show_bookmark_button = False
             is_bookmarked = False
 
-            if is_user_authenticated and render_items:
+            if is_user_authenticated and bookmarks_service:
                 show_bookmark_button = True
                 is_bookmarked = bookmarks_service.is_bookmarked(usage_key=usage_id)
 
diff --git a/common/lib/xmodule/xmodule/tests/test_sequence.py b/common/lib/xmodule/xmodule/tests/test_sequence.py
index d89cf7917a9..323d301b5f5 100644
--- a/common/lib/xmodule/xmodule/tests/test_sequence.py
+++ b/common/lib/xmodule/xmodule/tests/test_sequence.py
@@ -348,6 +348,9 @@ class SequenceBlockTestCase(XModuleXmlImportTest):
         Test that the sequence metadata is returned from the
         metadata ajax handler.
         """
+        # rather than dealing with json serialization of the Mock object,
+        # let's just disable the bookmarks service
+        self.sequence_3_1.xmodule_runtime._services['bookmarks'] = None
         metadata = json.loads(self.sequence_3_1.handle_ajax('metadata', {}))
         self.assertEqual(len(metadata['items']), 3)
         self.assertEqual(metadata['tag'], 'sequential')
-- 
GitLab