From 49ea5f5188546b7ab220bdfe3cb67f749b4dc7e3 Mon Sep 17 00:00:00 2001
From: Zainab Amir <zainab.amir@arbisoft.com>
Date: Fri, 23 Oct 2020 12:11:56 +0500
Subject: [PATCH] Update logistration MFE feature flag (#25356)

update logistration MFE feature flag to not be used in conjunction
with Accounts MFE toggle.

VAN-11
---
 lms/envs/common.py                            |  5 ++--
 lms/envs/devstack.py                          |  1 +
 lms/envs/devstack_decentralized.py            |  1 +
 lms/envs/test.py                              |  1 +
 .../header/navbar-not-authenticated.html      |  6 ++---
 .../djangoapps/user_api/accounts/toggles.py   |  9 --------
 openedx/core/djangoapps/user_authn/utils.py   | 11 +++++++++
 .../core/djangoapps/user_authn/views/login.py |  2 +-
 .../djangoapps/user_authn/views/login_form.py |  4 ++--
 .../user_authn/views/tests/test_login.py      | 17 +++++---------
 .../views/tests/test_logistration.py          | 23 +++++--------------
 .../header/navbar-not-authenticated.html      |  4 ++--
 12 files changed, 37 insertions(+), 47 deletions(-)

diff --git a/lms/envs/common.py b/lms/envs/common.py
index 3bfd5669350..92247b6f71a 100644
--- a/lms/envs/common.py
+++ b/lms/envs/common.py
@@ -601,8 +601,8 @@ FEATURES = {
     # .. toggle_creation_date: 2020-09-08
     # .. toggle_target_removal_date: None
     # .. toggle_tickets: 'https://github.com/edx/edx-platform/pull/24908'
-    # .. toggle_warnings: Also set settings.ACCOUNT_MICROFRONTEND_URL and set REDIRECT_TO_ACCOUNT_MICROFRONTEND for
-    #   rollout. This temporary feature toggle does not have a target removal date.
+    # .. toggle_warnings: Also set settings.LOGISTRATION_MICROFRONTEND_URL for rollout. This temporary feature
+    # toggle does not have a target removal date.
     'ENABLE_LOGISTRATION_MICROFRONTEND': False,
 
     ### ORA Feature Flags ###
@@ -4000,6 +4000,7 @@ WRITABLE_GRADEBOOK_URL = None
 PROFILE_MICROFRONTEND_URL = None
 ORDER_HISTORY_MICROFRONTEND_URL = None
 ACCOUNT_MICROFRONTEND_URL = None
+LOGISTRATION_MICROFRONTEND_URL = None
 PROGRAM_CONSOLE_MICROFRONTEND_URL = None
 LEARNING_MICROFRONTEND_URL = None
 
diff --git a/lms/envs/devstack.py b/lms/envs/devstack.py
index 93aa3159e3a..06a8e59631e 100644
--- a/lms/envs/devstack.py
+++ b/lms/envs/devstack.py
@@ -331,6 +331,7 @@ EDXNOTES_CLIENT_NAME = 'edx_notes_api-backend-service'
 ############## Settings for Microfrontends  #########################
 LEARNING_MICROFRONTEND_URL = 'http://localhost:2000'
 ACCOUNT_MICROFRONTEND_URL = 'http://localhost:1997'
+LOGISTRATION_MICROFRONTEND_URL = 'http://localhost:1999'
 
 ############## Docker based devstack settings #######################
 
diff --git a/lms/envs/devstack_decentralized.py b/lms/envs/devstack_decentralized.py
index 1790e0eee92..f08323b7523 100644
--- a/lms/envs/devstack_decentralized.py
+++ b/lms/envs/devstack_decentralized.py
@@ -270,6 +270,7 @@ EDXNOTES_CLIENT_NAME = 'edx_notes_api-backend-service'
 ############## Settings for Microfrontends  #########################
 LEARNING_MICROFRONTEND_URL = 'http://localhost:2000'
 ACCOUNT_MICROFRONTEND_URL = 'http://localhost:1997'
+LOGISTRATION_MICROFRONTEND_URL = 'http://localhost:1999'
 
 ############## Docker based devstack settings #######################
 
diff --git a/lms/envs/test.py b/lms/envs/test.py
index 6a2055ceded..f0a5163a952 100644
--- a/lms/envs/test.py
+++ b/lms/envs/test.py
@@ -571,6 +571,7 @@ PDF_RECEIPT_TAX_ID_LABEL = 'Tax ID'
 PROFILE_MICROFRONTEND_URL = "http://profile-mfe/abc/"
 ORDER_HISTORY_MICROFRONTEND_URL = "http://order-history-mfe/"
 ACCOUNT_MICROFRONTEND_URL = "http://account-mfe/"
+LOGISTRATION_MICROFRONTEND_URL = "http://logistation-mfe"
 LEARNING_MICROFRONTEND_URL = "http://learning-mfe"
 
 ########################## limiting dashboard courses ######################
diff --git a/lms/templates/header/navbar-not-authenticated.html b/lms/templates/header/navbar-not-authenticated.html
index c998d8cc874..84bcafb348e 100644
--- a/lms/templates/header/navbar-not-authenticated.html
+++ b/lms/templates/header/navbar-not-authenticated.html
@@ -11,7 +11,7 @@ from django.urls import reverse
 from django.utils.translation import ugettext as _
 from six import text_type
 
-from openedx.core.djangoapps.user_api.accounts.toggles import should_redirect_to_logistration_mircrofrontend
+from openedx.core.djangoapps.user_authn.utils import should_redirect_to_logistration_mircrofrontend
 %>
 
 <%
@@ -51,7 +51,7 @@ from openedx.core.djangoapps.user_api.accounts.toggles import should_redirect_to
         % if allow_public_account_creation:
           % if should_redirect_to_logistration_mfe:
             <div class="mobile-nav-item hidden-mobile nav-item">
-                <a class="register-btn btn" href="${settings.ACCOUNT_MICROFRONTEND_URL}/register${login_query()}">${_("Register")}</a>
+                <a class="register-btn btn" href="${settings.LOGISTRATION_MICROFRONTEND_URL}/register${login_query()}">${_("Register")}</a>
             </div>
           % else:
             <div class="mobile-nav-item hidden-mobile nav-item">
@@ -61,7 +61,7 @@ from openedx.core.djangoapps.user_api.accounts.toggles import should_redirect_to
         % endif
         % if should_redirect_to_logistration_mfe:
           <div class="mobile-nav-item hidden-mobile nav-item">
-              <a class="sign-in-btn btn" href="${settings.ACCOUNT_MICROFRONTEND_URL}/login${login_query()}">${_("Sign in")}</a>
+              <a class="sign-in-btn btn" href="${settings.LOGISTRATION_MICROFRONTEND_URL}/login${login_query()}">${_("Sign in")}</a>
           </div>
         % else:
           <div class="mobile-nav-item hidden-mobile nav-item">
diff --git a/openedx/core/djangoapps/user_api/accounts/toggles.py b/openedx/core/djangoapps/user_api/accounts/toggles.py
index 5bb2f019b52..621d13048d8 100644
--- a/openedx/core/djangoapps/user_api/accounts/toggles.py
+++ b/openedx/core/djangoapps/user_api/accounts/toggles.py
@@ -2,8 +2,6 @@
 Toggles for accounts related code.
 """
 
-from django.conf import settings
-
 from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
 from openedx.core.djangoapps.waffle_utils import WaffleFlag
 
@@ -44,10 +42,3 @@ def should_redirect_to_account_microfrontend():
         configuration_helpers.get_value('ENABLE_ACCOUNT_MICROFRONTEND') and
         REDIRECT_TO_ACCOUNT_MICROFRONTEND.is_enabled()
     )
-
-
-def should_redirect_to_logistration_mircrofrontend():
-    return (
-        should_redirect_to_account_microfrontend() and
-        settings.FEATURES.get('ENABLE_LOGISTRATION_MICROFRONTEND')
-    )
diff --git a/openedx/core/djangoapps/user_authn/utils.py b/openedx/core/djangoapps/user_authn/utils.py
index 2ed90062f13..fb40374a85e 100644
--- a/openedx/core/djangoapps/user_authn/utils.py
+++ b/openedx/core/djangoapps/user_authn/utils.py
@@ -11,6 +11,8 @@ from django.utils import http
 from oauth2_provider.models import Application
 from six.moves.urllib.parse import urlparse  # pylint: disable=import-error
 
+from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
+
 
 def is_safe_login_or_logout_redirect(redirect_to, request_host, dot_client_id, require_https):
     """
@@ -67,3 +69,12 @@ def is_registration_api_v1(request):
     :return: Bool
     """
     return 'v1' in request.get_full_path() and 'register' not in request.get_full_path()
+
+
+def should_redirect_to_logistration_mircrofrontend():
+    """
+    Checks if login/registration should be done via MFE.
+    """
+    return configuration_helpers.get_value(
+        'ENABLE_LOGISTRATION_MICROFRONTEND', settings.FEATURES.get('ENABLE_LOGISTRATION_MICROFRONTEND')
+    )
diff --git a/openedx/core/djangoapps/user_authn/views/login.py b/openedx/core/djangoapps/user_authn/views/login.py
index 638ca779d79..384f33e8e6f 100644
--- a/openedx/core/djangoapps/user_authn/views/login.py
+++ b/openedx/core/djangoapps/user_authn/views/login.py
@@ -31,10 +31,10 @@ from rest_framework.views import APIView
 from edxmako.shortcuts import render_to_response
 from openedx.core.djangoapps.password_policy import compliance as password_policy_compliance
 from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
-from openedx.core.djangoapps.user_api.accounts.toggles import should_redirect_to_logistration_mircrofrontend
 from openedx.core.djangoapps.user_authn.views.login_form import get_login_session_form
 from openedx.core.djangoapps.user_authn.cookies import refresh_jwt_cookies, set_logged_in_cookies
 from openedx.core.djangoapps.user_authn.exceptions import AuthFailedError
+from openedx.core.djangoapps.user_authn.utils import should_redirect_to_logistration_mircrofrontend
 from openedx.core.djangoapps.util.user_messages import PageLevelMessages
 from openedx.core.djangoapps.user_authn.views.password_reset import send_password_reset_email_for_user
 from openedx.core.djangoapps.user_authn.config.waffle import ENABLE_LOGIN_USING_THIRDPARTY_AUTH_ONLY
diff --git a/openedx/core/djangoapps/user_authn/views/login_form.py b/openedx/core/djangoapps/user_authn/views/login_form.py
index 67f0f6e1524..c5ec46d8357 100644
--- a/openedx/core/djangoapps/user_authn/views/login_form.py
+++ b/openedx/core/djangoapps/user_authn/views/login_form.py
@@ -18,13 +18,13 @@ import third_party_auth
 from edxmako.shortcuts import render_to_response
 from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
 from openedx.core.djangoapps.user_api import accounts
-from openedx.core.djangoapps.user_api.accounts.toggles import should_redirect_to_logistration_mircrofrontend
 from openedx.core.djangoapps.user_api.accounts.utils import (
     is_multiple_user_enterprises_feature_enabled,
     is_secondary_email_feature_enabled
 )
 from openedx.core.djangoapps.user_api.helpers import FormDescription
 from openedx.core.djangoapps.user_authn.cookies import are_logged_in_cookies_set
+from openedx.core.djangoapps.user_authn.utils import should_redirect_to_logistration_mircrofrontend
 from openedx.core.djangoapps.user_authn.views.password_reset import get_password_reset_form
 from openedx.core.djangoapps.user_authn.views.registration_form import RegistrationFormFactory
 from openedx.features.enterprise_support.api import enterprise_customer_for_request
@@ -189,7 +189,7 @@ def login_and_registration_form(request, initial_mode="login"):
             initial_mode,
             '?' + query_params if query_params else ''
         )
-        return redirect(settings.ACCOUNT_MICROFRONTEND_URL + url_path)
+        return redirect(settings.LOGISTRATION_MICROFRONTEND_URL + url_path)
 
     # Account activation message
     account_activation_messages = [
diff --git a/openedx/core/djangoapps/user_authn/views/tests/test_login.py b/openedx/core/djangoapps/user_authn/views/tests/test_login.py
index 718d2133638..df89781a19f 100644
--- a/openedx/core/djangoapps/user_authn/views/tests/test_login.py
+++ b/openedx/core/djangoapps/user_authn/views/tests/test_login.py
@@ -25,7 +25,6 @@ from openedx.core.djangoapps.password_policy.compliance import (
     NonCompliantPasswordWarning
 )
 from openedx.core.djangoapps.user_api.accounts import EMAIL_MIN_LENGTH, EMAIL_MAX_LENGTH
-from openedx.core.djangoapps.user_api.accounts.toggles import REDIRECT_TO_ACCOUNT_MICROFRONTEND
 from openedx.core.djangoapps.user_authn.cookies import jwt_cookies
 from openedx.core.djangoapps.user_authn.views.login import (
     AllowedAuthUser,
@@ -35,7 +34,6 @@ from openedx.core.djangoapps.user_authn.views.login import (
 from openedx.core.djangoapps.user_authn.tests.utils import setup_login_oauth_client
 from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms
 from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
-from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
 from openedx.core.lib.api.test_utils import ApiTestCase
 from student.tests.factories import RegistrationFactory, UserFactory, UserProfileFactory
 from util.password_policy_validators import DEFAULT_MAX_PASSWORD_LENGTH
@@ -142,8 +140,6 @@ class LoginTest(SiteMixin, CacheIsolationTestCase):
     @override_settings(FEATURES=FEATURES_WITH_LOGIN_MFE_ENABLED)
     @skip_unless_lms
     def test_login_success_with_redirect(self, next_url, course_id, expected_redirect):
-        site_domain = 'example.org'
-        self.set_up_site(site_domain, {'ENABLE_ACCOUNT_MICROFRONTEND': True})
         post_params = {}
 
         if next_url:
@@ -151,13 +147,12 @@ class LoginTest(SiteMixin, CacheIsolationTestCase):
         if course_id:
             post_params['course_id'] = course_id
 
-        with override_waffle_flag(REDIRECT_TO_ACCOUNT_MICROFRONTEND, active=True):
-            response, _ = self._login_response(
-                self.user_email,
-                self.password,
-                extra_post_params=post_params,
-                HTTP_ACCEPT='*/*',
-            )
+        response, _ = self._login_response(
+            self.user_email,
+            self.password,
+            extra_post_params=post_params,
+            HTTP_ACCEPT='*/*',
+        )
         self._assert_response(response, success=True)
         self._assert_redirect_url(response, expected_redirect)
 
diff --git a/openedx/core/djangoapps/user_authn/views/tests/test_logistration.py b/openedx/core/djangoapps/user_authn/views/tests/test_logistration.py
index 35787b8105e..04ac77b0a23 100644
--- a/openedx/core/djangoapps/user_authn/views/tests/test_logistration.py
+++ b/openedx/core/djangoapps/user_authn/views/tests/test_logistration.py
@@ -27,9 +27,7 @@ from lms.djangoapps.branding.api import get_privacy_url
 from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory, SiteFactory
 from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
 from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme_context
-from openedx.core.djangoapps.user_api.accounts.toggles import REDIRECT_TO_ACCOUNT_MICROFRONTEND
 from openedx.core.djangoapps.user_authn.views.login_form import login_and_registration_form
-from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
 from openedx.core.djangolib.js_utils import dump_js_escaped_json
 from openedx.core.djangolib.markup import HTML, Text
 from openedx.core.djangolib.testing.utils import skip_unless_lms
@@ -40,7 +38,7 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
 
 @skip_unless_lms
 @ddt.ddt
-class LoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMixin, ModuleStoreTestCase, SiteMixin):
+class LoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMixin, ModuleStoreTestCase):
     """ Tests for Login and Registration. """
     USERNAME = "bob"
     EMAIL = "bob@example.com"
@@ -82,13 +80,9 @@ class LoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMixin, ModuleSto
         Test that if Logistration MFE is enabled, then we redirect to
         the correct URL.
         """
-        site_domain = 'example.org'
-        self.set_up_site(site_domain, {'ENABLE_ACCOUNT_MICROFRONTEND': True})
-
-        with override_waffle_flag(REDIRECT_TO_ACCOUNT_MICROFRONTEND, active=True):
-            response = self.client.get(reverse(url_name))
+        response = self.client.get(reverse(url_name))
 
-        self.assertEqual(response.url, settings.ACCOUNT_MICROFRONTEND_URL + path)
+        self.assertEqual(response.url, settings.LOGISTRATION_MICROFRONTEND_URL + path)
         self.assertEqual(response.status_code, 302)
 
     @ddt.data(
@@ -110,15 +104,10 @@ class LoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMixin, ModuleSto
         Test that if request is redirected to logistration MFE,
         query params are passed to the redirect url.
         """
-        site_domain = 'example.org'
-        expected_url = settings.ACCOUNT_MICROFRONTEND_URL + path + '?' + urlencode(query_params)
-
-        self.set_up_site(site_domain, {'ENABLE_ACCOUNT_MICROFRONTEND': True})
-
-        with override_waffle_flag(REDIRECT_TO_ACCOUNT_MICROFRONTEND, active=True):
-            response = self.client.get(reverse(url_name), query_params)
+        expected_url = settings.LOGISTRATION_MICROFRONTEND_URL + path + '?' + urlencode(query_params)
+        response = self.client.get(reverse(url_name), query_params)
 
-        self.assertRedirects(response, expected_url)
+        self.assertRedirects(response, expected_url, target_status_code=302)
 
     @ddt.data(
         ("signin_user", "login"),
diff --git a/themes/edx.org/lms/templates/header/navbar-not-authenticated.html b/themes/edx.org/lms/templates/header/navbar-not-authenticated.html
index f4630e5b964..ae8b0ff27eb 100644
--- a/themes/edx.org/lms/templates/header/navbar-not-authenticated.html
+++ b/themes/edx.org/lms/templates/header/navbar-not-authenticated.html
@@ -23,7 +23,7 @@ from six import text_type
         % if allow_public_account_creation:
           % if should_redirect_to_logistration_mfe:
             <div class="mobile-nav-item hidden-mobile nav-item">
-                <a class="register-btn btn" href="${settings.ACCOUNT_MICROFRONTEND_URL}/register${login_query()}">${_("Register")}</a>
+                <a class="register-btn btn" href="${settings.LOGISTRATION_MICROFRONTEND_URL}/register${login_query()}">${_("Register")}</a>
             </div>
           % else:
             <div class="mobile-nav-item hidden-mobile nav-item">
@@ -33,7 +33,7 @@ from six import text_type
         % endif
         % if should_redirect_to_logistration_mfe:
           <div class="mobile-nav-item hidden-mobile nav-item">
-              <a class="sign-in-btn btn" href="${settings.ACCOUNT_MICROFRONTEND_URL}/login${login_query()}">${_("Sign in")}</a>
+              <a class="sign-in-btn btn" href="${settings.LOGISTRATION_MICROFRONTEND_URL}/login${login_query()}">${_("Sign in")}</a>
           </div>
         % else:
           <div class="mobile-nav-item hidden-mobile nav-item">
-- 
GitLab