From 39f48a8c1038afffba5ef93076630edf03a61e8d Mon Sep 17 00:00:00 2001
From: Ahsan Ulhaq <ahsan.haq@arbisoft.com>
Date: Thu, 13 Sep 2018 16:07:11 +0500
Subject: [PATCH] Reduce query to user table LEARNER-6336

---
 lms/templates/header/user_dropdown.html                |  2 +-
 .../djangoapps/user_api/accounts/tests/test_utils.py   |  7 +++----
 openedx/core/djangoapps/user_api/accounts/utils.py     | 10 +++-------
 .../core/djangoapps/user_authn/tests/test_cookies.py   |  2 +-
 4 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/lms/templates/header/user_dropdown.html b/lms/templates/header/user_dropdown.html
index 675ccc320c8..5fabdb49b04 100644
--- a/lms/templates/header/user_dropdown.html
+++ b/lms/templates/header/user_dropdown.html
@@ -16,7 +16,7 @@ from openedx.features.enterprise_support.utils import get_enterprise_learner_gen
 self.real_user = getattr(user, 'real_user', user)
 profile_image_url = get_profile_image_urls_for_user(self.real_user)['medium']
 username = self.real_user.username
-resume_block = retrieve_last_sitewide_block_completed(username)
+resume_block = retrieve_last_sitewide_block_completed(self.real_user)
 displayname = get_enterprise_learner_generic_name(request) or username
 %>
 
diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py
index c901c865c5e..a938c8bf464 100644
--- a/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py
+++ b/openedx/core/djangoapps/user_api/accounts/tests/test_utils.py
@@ -113,17 +113,16 @@ class CompletionUtilsTestCase(SharedModuleStoreTestCase, CompletionWaffleTestMix
             )
 
     @override_settings(LMS_ROOT_URL='test_url:9999')
-    @ddt.data(True, False)
-    def test_retrieve_last_sitewide_block_completed(self, use_username):
+    def test_retrieve_last_sitewide_block_completed(self):
         """
         Test that the method returns a URL for the "last completed" block
         when sending a user object
         """
         block_url = retrieve_last_sitewide_block_completed(
-            self.engaged_user.username if use_username else self.engaged_user
+            self.engaged_user
         )
         empty_block_url = retrieve_last_sitewide_block_completed(
-            self.cruft_user.username if use_username else self.cruft_user
+            self.cruft_user
         )
         self.assertEqual(
             block_url,
diff --git a/openedx/core/djangoapps/user_api/accounts/utils.py b/openedx/core/djangoapps/user_api/accounts/utils.py
index 2967863861e..d2b5cdd6028 100644
--- a/openedx/core/djangoapps/user_api/accounts/utils.py
+++ b/openedx/core/djangoapps/user_api/accounts/utils.py
@@ -102,24 +102,20 @@ def _is_valid_social_username(value):
     return '/' not in value
 
 
-def retrieve_last_sitewide_block_completed(username):
+def retrieve_last_sitewide_block_completed(user):
     """
     Completion utility
     From a string 'username' or object User retrieve
     the last course block marked as 'completed' and construct a URL
 
-    :param username: str(username) or obj(User)
+    :param user: obj(User)
     :return: block_lms_url
 
     """
     if not completion_waffle.waffle().is_enabled(completion_waffle.ENABLE_COMPLETION_TRACKING):
         return
 
-    if not isinstance(username, User):
-        userobj = User.objects.get(username=username)
-    else:
-        userobj = username
-    latest_completions_by_course = BlockCompletion.latest_blocks_completed_all_courses(userobj)
+    latest_completions_by_course = BlockCompletion.latest_blocks_completed_all_courses(user)
 
     known_site_configs = [
         other_site_config.get_value('course_org_filter') for other_site_config in SiteConfiguration.objects.all()
diff --git a/openedx/core/djangoapps/user_authn/tests/test_cookies.py b/openedx/core/djangoapps/user_authn/tests/test_cookies.py
index ed3be5b38b1..483562fa589 100644
--- a/openedx/core/djangoapps/user_authn/tests/test_cookies.py
+++ b/openedx/core/djangoapps/user_authn/tests/test_cookies.py
@@ -27,7 +27,7 @@ class CookieTests(SharedModuleStoreTestCase):
     def _get_expected_header_urls(self, request):
         expected_header_urls = {
             'logout': reverse('logout'),
-            'resume_block': retrieve_last_sitewide_block_completed(self.user.username)
+            'resume_block': retrieve_last_sitewide_block_completed(self.user)
         }
 
         # Studio (CMS) does not have the URLs below
-- 
GitLab