Skip to content

Commit

Permalink
feat: add waffle flag for groups v2 features
Browse files Browse the repository at this point in the history
  • Loading branch information
katrinan029 committed Sep 24, 2024
1 parent 3ce3b38 commit 97d632f
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 16 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.25.14]
---------
* feat: add a waffle flag for enterprise groups v2 feature

[4.25.13]
----------
* feat: add logging to debug SAP SuccessFactors transmission issues
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.25.13"
__version__ = "4.25.14"
20 changes: 20 additions & 0 deletions enterprise/toggles.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,18 @@
ENTERPRISE_LOG_PREFIX,
)

# .. toggle_name: enterprise.enterprise_groups_v2
# .. toggle_implementation: WaffleFlag
# .. toggle_default: False
# .. toggle_description: Enables enterprise groups feature
# .. toggle_use_cases: open_edx
# .. toggle_creation_date: 2024-09-24
ENTERPRISE_GROUPS_V2 = WaffleFlag(
f'{ENTERPRISE_NAMESPACE}.enterprise_groups_v2',
__name__,
ENTERPRISE_LOG_PREFIX,
)


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


def enterprise_groups_v2():
"""
Returns whether the enterprise groups v2 feature flag is enabled.
"""
return ENTERPRISE_GROUPS_V2.is_enabled()


def enterprise_customer_support_tool():
"""
Returns whether the enterprise customer support tool is enabled.
Expand All @@ -93,4 +112,5 @@ def enterprise_features():
'feature_prequery_search_suggestions': feature_prequery_search_suggestions(),
'enterprise_groups_v1': enterprise_groups_v1(),
'enterprise_customer_support_tool': enterprise_customer_support_tool(),
'enterprise_groups_v2': enterprise_groups_v2(),
}
1 change: 1 addition & 0 deletions tests/test_enterprise/api/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,7 @@ def test_filter(self, is_staff, is_linked_to_enterprise, has_access):
'feature_prequery_search_suggestions': False,
'enterprise_groups_v1': False,
'enterprise_customer_support_tool': False,
'enterprise_groups_v2': 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 @@ -72,6 +72,7 @@
from enterprise.toggles import (
ENTERPRISE_CUSTOMER_SUPPORT_TOOL,
ENTERPRISE_GROUPS_V1,
ENTERPRISE_GROUPS_V2,
FEATURE_PREQUERY_SEARCH_SUGGESTIONS,
TOP_DOWN_ASSIGNMENT_REAL_TIME_LCM,
)
Expand Down Expand Up @@ -1949,62 +1950,64 @@ def test_enterprise_customer_support_tool(

@ddt.data(
# Request missing required permissions query param.
(True, False, [], {}, False, {'detail': 'User is not allowed to access the view.'}, False, False, False, False),
(True, False, [], {}, False, {'detail': 'User is not allowed to access the view.'},
False, 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, False),
{'detail': 'User is not allowed to access the view.'}, False, 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, False),
True, None, False, 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, False),
{'detail': 'User is not allowed to access the view.'}, False, 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),
False, None, False, 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, False),
{'detail': 'User is not allowed to access the view.'}, False, 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, False),
True, None, False, 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, 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, False),
None, False, 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, False),
None, False, 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, False),
None, False, 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, False),
None, False, 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, False),
None, False, 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, False),
None, False, 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 groups v2 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, True),
None, True, True, True, True, True),
)
@ddt.unpack
@mock.patch('enterprise.utils.get_logo_url')
Expand All @@ -2019,6 +2022,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_groups_v2_enabled,
enterprise_customer_support_tool,
mock_get_logo_url,
):
Expand Down Expand Up @@ -2086,6 +2090,13 @@ 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_GROUPS_V2,
active=enterprise_groups_v2_enabled
):
response = client.get(
f"{settings.TEST_SERVER}{ENTERPRISE_CUSTOMER_WITH_ACCESS_TO_ENDPOINT}?{urlencode(query_params, True)}"
)
Expand Down Expand Up @@ -2166,6 +2177,7 @@ def test_enterprise_customer_with_access_to(
'feature_prequery_search_suggestions': feature_prequery_search_suggestions_enabled,
'enterprise_groups_v1': enterprise_groups_v1_enabled,
'enterprise_customer_support_tool': enterprise_customer_support_tool,
'enterprise_groups_v2': enterprise_groups_v2_enabled,
}
}
assert response in (expected_error, mock_empty_200_success_response)
Expand Down

0 comments on commit 97d632f

Please sign in to comment.