Skip to content

Commit

Permalink
fix: add waffle flag for enterprise customer support tool (#2173)
Browse files Browse the repository at this point in the history
* fix: add waffle flag for enterprise customer support tool

* fix: date change
  • Loading branch information
kiram15 authored Jul 17, 2024
1 parent b65ed43 commit d7e67a8
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 17 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ Unreleased
----------
* nothing unreleased

[4.21.6]
---------
* feat: add waffle flag for enterprise customer support tool

[4.21.5]
---------
* feat: allow PAs to access all enterprise customers
Expand Down
2 changes: 1 addition & 1 deletion enterprise/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
Your project description goes here.
"""

__version__ = "4.21.5"
__version__ = "4.21.6"
20 changes: 20 additions & 0 deletions enterprise/toggles.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,18 @@
ENTERPRISE_LOG_PREFIX,
)

# .. toggle_name: enterprise.enterprise_customer_support_tool
# .. toggle_implementation: WaffleFlag
# .. toggle_default: False
# .. toggle_description: Enables the enterprise customer support tool
# .. toggle_use_cases: open_edx
# .. toggle_creation_date: 2024-07-17
ENTERPRISE_CUSTOMER_SUPPORT_TOOL = WaffleFlag(
f'{ENTERPRISE_NAMESPACE}.enterprise_customer_support_tool',
__name__,
ENTERPRISE_LOG_PREFIX,
)


def top_down_assignment_real_time_lcm():
"""
Expand All @@ -65,6 +77,13 @@ def enterprise_groups_v1():
return ENTERPRISE_GROUPS_V1.is_enabled()


def enterprise_customer_support_tool():
"""
Returns whether the enterprise customer support tool is enabled.
"""
return ENTERPRISE_CUSTOMER_SUPPORT_TOOL.is_enabled()


def enterprise_features():
"""
Returns a dict of enterprise Waffle-based feature flags.
Expand All @@ -73,4 +92,5 @@ def enterprise_features():
'top_down_assignment_real_time_lcm': top_down_assignment_real_time_lcm(),
'feature_prequery_search_suggestions': feature_prequery_search_suggestions(),
'enterprise_groups_v1': enterprise_groups_v1(),
'enterprise_customer_support_tool': enterprise_customer_support_tool(),
}
3 changes: 2 additions & 1 deletion tests/test_enterprise/api/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,8 @@ def test_filter(self, is_staff, is_linked_to_enterprise, has_access):
'enterprise_features': {
'top_down_assignment_real_time_lcm': False,
'feature_prequery_search_suggestions': False,
'enterprise_groups_v1': False
'enterprise_groups_v1': False,
'enterprise_customer_support_tool': False,
}
}
assert response == mock_empty_200_success_response
Expand Down
42 changes: 27 additions & 15 deletions tests/test_enterprise/api/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
)
from enterprise.roles_api import admin_role
from enterprise.toggles import (
ENTERPRISE_CUSTOMER_SUPPORT_TOOL,
ENTERPRISE_GROUPS_V1,
FEATURE_PREQUERY_SEARCH_SUGGESTIONS,
TOP_DOWN_ASSIGNMENT_REAL_TIME_LCM,
Expand Down Expand Up @@ -1844,61 +1845,62 @@ def test_enterprise_customer_basic_list(self):

@ddt.data(
# Request missing required permissions query param.
(True, False, [], {}, False, {'detail': 'User is not allowed to access the view.'}, False, False, False),
(True, False, [], {}, False, {'detail': 'User is not allowed to access the view.'}, False, False, False, False),
# Staff user that does not have the specified group permission.
(True, False, [], {'permissions': ['enterprise_enrollment_api_access']}, False,
{'detail': 'User is not allowed to access the view.'}, False, False, False),
{'detail': 'User is not allowed to access the view.'}, False, False, False, False),
# Staff user that does have the specified group permission.
(True, False, ['enterprise_enrollment_api_access'], {'permissions': ['enterprise_enrollment_api_access']},
True, None, False, False, False),
True, None, False, False, False, False),
# Non staff user that is not linked to the enterprise, nor do they have the group permission.
(False, False, [], {'permissions': ['enterprise_enrollment_api_access']}, False,
{'detail': 'User is not allowed to access the view.'}, False, False, False),
{'detail': 'User is not allowed to access the view.'}, False, False, False, False),
# Non staff user that is not linked to the enterprise, but does have the group permission.
(False, False, ['enterprise_enrollment_api_access'], {'permissions': ['enterprise_enrollment_api_access']},
False, None, False, False, False),
False, None, False, False, False, False),
# Non staff user that is linked to the enterprise, but does not have the group permission.
(False, True, [], {'permissions': ['enterprise_enrollment_api_access']}, False,
{'detail': 'User is not allowed to access the view.'}, False, False, False),
{'detail': 'User is not allowed to access the view.'}, False, False, False, False),
# Non staff user that is linked to the enterprise and does have the group permission
(False, True, ['enterprise_enrollment_api_access'], {'permissions': ['enterprise_enrollment_api_access']},
True, None, False, False, False),
True, None, False, False, False, False),
# Non staff user that is linked to the enterprise and has group permission and the request has passed
# multiple groups to check.
(False, True, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access', 'enterprise_data_api_access']}, True, None, False,
False, False),
False, False, False),
# Staff user with group permission filtering on non existent enterprise id.
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'enterprise_id': FAKE_UUIDS[1]}, False,
None, False, False, False),
None, False, False, False, False),
# Staff user with group permission filtering on enterprise id successfully.
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'enterprise_id': FAKE_UUIDS[0]}, True,
None, False, False, False),
None, False, False, False, False),
# Staff user with group permission filtering on search param with no results.
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'search': 'blah'}, False,
None, False, False, False),
None, False, False, False, False),
# Staff user with group permission filtering on search param with results.
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'search': 'test'}, True,
None, False, False, False),
None, False, False, False, False),
# Staff user with group permission filtering on slug with results.
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'slug': TEST_SLUG}, True,
None, False, False, False),
None, False, False, False, False),
# Staff user with group permissions filtering on slug with no results.
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'slug': 'blah'}, False,
None, False, False, False),
None, False, False, False, False),
# Staff user with group permission filtering on slug with results, with
# top down assignment & real-time LCM feature enabled,
# prequery search results enabled and
# enterprise groups v1 feature enabled
# enterprise customer support tool enabled
(True, False, ['enterprise_enrollment_api_access'],
{'permissions': ['enterprise_enrollment_api_access'], 'slug': TEST_SLUG}, True,
None, True, True, True),
None, True, True, True, True),
)
@ddt.unpack
@mock.patch('enterprise.utils.get_logo_url')
Expand All @@ -1913,6 +1915,7 @@ def test_enterprise_customer_with_access_to(
is_top_down_assignment_real_time_lcm_enabled,
feature_prequery_search_suggestions_enabled,
enterprise_groups_v1_enabled,
enterprise_customer_support_tool,
mock_get_logo_url,
):
"""
Expand Down Expand Up @@ -1979,6 +1982,14 @@ def test_enterprise_customer_with_access_to(
active=enterprise_groups_v1_enabled
):

response = client.get(
f"{settings.TEST_SERVER}{ENTERPRISE_CUSTOMER_WITH_ACCESS_TO_ENDPOINT}?{urlencode(query_params, True)}"
)
with override_waffle_flag(
ENTERPRISE_CUSTOMER_SUPPORT_TOOL,
active=enterprise_customer_support_tool
):

response = client.get(
f"{settings.TEST_SERVER}{ENTERPRISE_CUSTOMER_WITH_ACCESS_TO_ENDPOINT}?{urlencode(query_params, True)}"
)
Expand Down Expand Up @@ -2050,6 +2061,7 @@ def test_enterprise_customer_with_access_to(
'top_down_assignment_real_time_lcm': is_top_down_assignment_real_time_lcm_enabled,
'feature_prequery_search_suggestions': feature_prequery_search_suggestions_enabled,
'enterprise_groups_v1': enterprise_groups_v1_enabled,
'enterprise_customer_support_tool': enterprise_customer_support_tool,
}
}
assert response in (expected_error, mock_empty_200_success_response)
Expand Down

0 comments on commit d7e67a8

Please sign in to comment.