Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add waffle flag for groups v2 features #2249

Merged
merged 2 commits into from
Sep 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.16]
---------
* feat: add a waffle flag for enterprise groups v2 feature

[4.25.15]
---------
* fix: Don't import HttpClientError from edx-rest-api-client
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.15"
__version__ = "4.25.16"
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
Loading