diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4df06c54d2..ba624dcb8f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,9 @@ Change Log Unreleased ---------- +[4.3.0] +-------- +feat: Added the ``enable_career_engagement_network_on_learner_portal`` field for EnterpriseCustomer [4.2.0] -------- diff --git a/enterprise/__init__.py b/enterprise/__init__.py index 1fe6030c63..ce723d5ecb 100644 --- a/enterprise/__init__.py +++ b/enterprise/__init__.py @@ -2,4 +2,4 @@ Your project description goes here. """ -__version__ = "4.2.0" +__version__ = "4.3.0" diff --git a/enterprise/admin/__init__.py b/enterprise/admin/__init__.py index f2dd11d9c6..2d3cc8baa7 100644 --- a/enterprise/admin/__init__.py +++ b/enterprise/admin/__init__.py @@ -226,7 +226,9 @@ class EnterpriseCustomerAdmin(DjangoObjectActions, SimpleHistoryAdmin): 'enable_integrated_customer_learner_portal_search', 'enable_analytics_screen', 'enable_audit_enrollment', 'enable_audit_data_reporting', 'enable_learner_portal_offers', - 'enable_executive_education_2U_fulfillment'), + 'enable_executive_education_2U_fulfillment', + 'enable_career_engagement_network_on_learner_portal', + 'career_engagement_network_message'), 'description': ('The following default settings should be the same for ' 'the majority of enterprise customers, ' 'and are either rarely used, unlikely to be sold, ' diff --git a/enterprise/admin/forms.py b/enterprise/admin/forms.py index 288a6b65d6..0d9474be54 100644 --- a/enterprise/admin/forms.py +++ b/enterprise/admin/forms.py @@ -403,6 +403,8 @@ class Meta: "enable_executive_education_2U_fulfillment", "hide_labor_market_data", "enable_integrated_customer_learner_portal_search", + "enable_career_engagement_network_on_learner_portal", + "career_engagement_network_message", "enable_analytics_screen", "enable_portal_reporting_config_screen", "enable_portal_saml_configuration_screen", diff --git a/enterprise/api/v1/serializers.py b/enterprise/api/v1/serializers.py index c7b83dbee2..36ecd555e0 100644 --- a/enterprise/api/v1/serializers.py +++ b/enterprise/api/v1/serializers.py @@ -220,7 +220,8 @@ class Meta: 'enable_integrated_customer_learner_portal_search', 'enable_generation_of_api_credentials', 'enable_portal_lms_configurations_screen', 'sender_alias', 'identity_providers', 'enterprise_customer_catalogs', 'reply_to', 'enterprise_notification_banner', 'hide_labor_market_data', - 'modified', 'enable_universal_link', 'enable_browse_and_request', 'admin_users' + 'modified', 'enable_universal_link', 'enable_browse_and_request', 'admin_users', + 'enable_career_engagement_network_on_learner_portal', 'career_engagement_network_message' ) identity_providers = EnterpriseCustomerIdentityProviderSerializer(many=True, read_only=True) diff --git a/enterprise/migrations/0185_auto_20230921_1007.py b/enterprise/migrations/0185_auto_20230921_1007.py new file mode 100644 index 0000000000..5a190399f9 --- /dev/null +++ b/enterprise/migrations/0185_auto_20230921_1007.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.21 on 2023-09-21 10:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enterprise', '0184_auto_20230914_2057'), + ] + + operations = [ + migrations.AddField( + model_name='enterprisecustomer', + name='career_engagement_network_message', + field=models.TextField(blank=True, help_text='Message text shown on the learner portal dashboard for career engagement network.'), + ), + migrations.AddField( + model_name='enterprisecustomer', + name='enable_career_engagement_network_on_learner_portal', + field=models.BooleanField(default=False, help_text='If checked, the learners will be able to see the link to CEN on the learner portal dashboard.', verbose_name='Allow navigation to career engagement network from learner portal dashboard'), + ), + migrations.AddField( + model_name='historicalenterprisecustomer', + name='career_engagement_network_message', + field=models.TextField(blank=True, help_text='Message text shown on the learner portal dashboard for career engagement network.'), + ), + migrations.AddField( + model_name='historicalenterprisecustomer', + name='enable_career_engagement_network_on_learner_portal', + field=models.BooleanField(default=False, help_text='If checked, the learners will be able to see the link to CEN on the learner portal dashboard.', verbose_name='Allow navigation to career engagement network from learner portal dashboard'), + ), + ] diff --git a/enterprise/models.py b/enterprise/models.py index 59ddc0bf69..9803282c6b 100644 --- a/enterprise/models.py +++ b/enterprise/models.py @@ -366,6 +366,14 @@ class Meta: ) ) + enable_career_engagement_network_on_learner_portal = models.BooleanField( + verbose_name="Allow navigation to career engagement network from learner portal dashboard", + default=False, + help_text=_( + "If checked, the learners will be able to see the link to CEN on the learner portal dashboard." + ) + ) + enable_analytics_screen = models.BooleanField( verbose_name="Display analytics page", default=True, @@ -445,6 +453,13 @@ class Meta: default=False, ) + career_engagement_network_message = models.TextField( + blank=True, + help_text=_( + 'Message text shown on the learner portal dashboard for career engagement network.' + ), + ) + @property def enterprise_customer_identity_provider(self): """ diff --git a/test_utils/factories.py b/test_utils/factories.py index 23d610f5d8..1d6998d92c 100644 --- a/test_utils/factories.py +++ b/test_utils/factories.py @@ -122,6 +122,7 @@ class Meta: hide_labor_market_data = False auth_org_id = factory.LazyAttribute(lambda x: FAKER.lexify(text='??????????')) enable_generation_of_api_credentials = False + career_engagement_network_message = 'Test message' class EnrollmentNotificationEmailTemplateFactory(factory.django.DjangoModelFactory): diff --git a/tests/test_enterprise/api/test_views.py b/tests/test_enterprise/api/test_views.py index 89d410155c..7d0a10bcb7 100644 --- a/tests/test_enterprise/api/test_views.py +++ b/tests/test_enterprise/api/test_views.py @@ -1180,6 +1180,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'hide_course_original_price': False, 'enable_analytics_screen': True, 'enable_integrated_customer_learner_portal_search': True, + 'enable_career_engagement_network_on_learner_portal': False, 'enable_portal_lms_configurations_screen': False, 'sender_alias': 'Test Sender Alias', 'identity_providers': [], @@ -1192,6 +1193,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'enable_browse_and_request': False, 'admin_users': [], 'enable_generation_of_api_credentials': False, + 'career_engagement_network_message': 'Test message', }], ), ( @@ -1237,6 +1239,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'enable_portal_subscription_management_screen': False, 'hide_course_original_price': False, 'enable_analytics_screen': True, 'enable_integrated_customer_learner_portal_search': True, + 'enable_career_engagement_network_on_learner_portal': False, 'enable_portal_lms_configurations_screen': False, 'sender_alias': 'Test Sender Alias', 'identity_providers': [], 'enterprise_customer_catalogs': [], 'reply_to': 'fake_reply@example.com', @@ -1245,6 +1248,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'enable_universal_link': False, 'enable_browse_and_request': False, 'admin_users': [], 'enable_generation_of_api_credentials': False, + 'career_engagement_network_message': 'Test message', }, 'active': True, 'user_id': 0, 'user': None, 'data_sharing_consent_records': [], 'groups': [], @@ -1313,6 +1317,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'hide_course_original_price': False, 'enable_analytics_screen': True, 'enable_integrated_customer_learner_portal_search': True, + 'enable_career_engagement_network_on_learner_portal': False, 'enable_portal_lms_configurations_screen': False, 'sender_alias': 'Test Sender Alias', 'identity_providers': [ @@ -1330,6 +1335,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'enable_browse_and_request': False, 'admin_users': [], 'enable_generation_of_api_credentials': False, + 'career_engagement_network_message': 'Test message', }], ), ( @@ -1379,6 +1385,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'hide_course_original_price': False, 'enable_analytics_screen': True, 'enable_integrated_customer_learner_portal_search': True, + 'enable_career_engagement_network_on_learner_portal': False, 'enable_portal_lms_configurations_screen': False, 'sender_alias': 'Test Sender Alias', 'identity_providers': [], @@ -1391,6 +1398,7 @@ class TestEnterpriseCustomerViewSet(BaseTestEnterpriseAPIViews): 'enable_browse_and_request': False, 'admin_users': [], 'enable_generation_of_api_credentials': False, + 'career_engagement_network_message': 'Test message', }], ), ( @@ -1611,6 +1619,7 @@ def test_enterprise_customer_with_access_to( 'hide_course_original_price': False, 'enable_analytics_screen': False, 'enable_integrated_customer_learner_portal_search': True, + 'enable_career_engagement_network_on_learner_portal': False, 'enable_portal_lms_configurations_screen': False, 'sender_alias': 'Test Sender Alias', 'identity_providers': [], @@ -1623,6 +1632,7 @@ def test_enterprise_customer_with_access_to( 'enable_browse_and_request': False, 'admin_users': [], 'enable_generation_of_api_credentials': False, + 'career_engagement_network_message': 'Test message', } else: mock_empty_200_success_response = { diff --git a/tests/test_utilities.py b/tests/test_utilities.py index aa0bc0bad2..46fa8490e3 100644 --- a/tests/test_utilities.py +++ b/tests/test_utilities.py @@ -159,6 +159,7 @@ def setUp(self): "enable_portal_learner_credit_management_screen", "enable_executive_education_2U_fulfillment", "enable_integrated_customer_learner_portal_search", + "enable_career_engagement_network_on_learner_portal", "enable_analytics_screen", "enable_slug_login", "contact_email", @@ -170,6 +171,7 @@ def setUp(self): "hide_labor_market_data", "chat_gpt_prompts", "enable_generation_of_api_credentials", + "career_engagement_network_message", "sso_orchestration_records", ] ),