-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: add test to custom filter pipeline
- Loading branch information
1 parent
f95e494
commit 6d4fbaf
Showing
9 changed files
with
189 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
""" | ||
Where Open edX Filter steps are implemented. | ||
""" |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
""" | ||
Test cases for Open edX Filters steps. | ||
""" | ||
from unittest.mock import MagicMock | ||
|
||
import mock | ||
from django.test import TestCase, override_settings | ||
from openedx_filters.tooling import OpenEdxPublicFilter | ||
|
||
from eox_tenant.tenant_aware_functions.enrollments import filter_enrollments | ||
|
||
|
||
# This class was temporarily added while the filter is added in openedx-filters. | ||
class CourseEnrollmentSiteFilterRequested(OpenEdxPublicFilter): | ||
""" | ||
Custom class used to filter user's course enrollments by site. | ||
""" | ||
|
||
filter_type = "org.openedx.learning.course_enrollments_site.filter.requested.v1" | ||
|
||
@classmethod | ||
def run_filter(cls, context): | ||
""" | ||
Execute a filter with the signature specified. | ||
Arguments: | ||
context (QuerySet): list of all user's course enrollments. | ||
""" | ||
data = super().run_pipeline(context=context) | ||
return data.get("context") | ||
|
||
|
||
class FilterStepsTestCase(TestCase): | ||
""" | ||
Filtet steps test cases. | ||
""" | ||
|
||
def setUp(self): | ||
"""This method creates Microsite objects in database""" | ||
|
||
# Creating mock enrollments | ||
orgs_for_enrolls = ["org1", "demo", "org3"] | ||
enrolls = [] | ||
for org in orgs_for_enrolls: | ||
enroll_mock = MagicMock() | ||
enroll_mock.course_id.org = org | ||
enrolls.append(enroll_mock) | ||
self.course_enrollments = enrolls | ||
|
||
@override_settings( | ||
OPEN_EDX_FILTERS_CONFIG={ | ||
"org.openedx.learning.course_enrollments_site.filter.requested.v1": { | ||
"fail_silently": False, | ||
"pipeline": [ | ||
"eox_tenant.filters.pipeline.FilterUserCourseEnrollmentsByTenant" | ||
], | ||
} | ||
} | ||
) | ||
@mock.patch("eox_tenant.tenant_aware_functions.enrollments.get_theming_helpers") | ||
@mock.patch( | ||
"eox_tenant.tenant_aware_functions.enrollments.get_configuration_helpers" | ||
) | ||
def test_filter_user_course_enrollments( | ||
self, get_conf_helpers_mock, get_theming_helpers_mock | ||
): | ||
""" | ||
Test that filter user course enrollments are made by site. | ||
""" | ||
results_get_value = {"course_org_filter": ["demo"]} | ||
|
||
def side_effect_get_value(key, default=None): | ||
""" | ||
Mock side effect | ||
""" | ||
return results_get_value.get(key, default) | ||
|
||
conf_helpers_mock = MagicMock() | ||
theming_helpers_mock = MagicMock() | ||
conf_helpers_mock.get_value.side_effect = side_effect_get_value | ||
theming_helpers_mock.is_request_in_themed_site.return_value = True | ||
|
||
get_conf_helpers_mock.return_value = conf_helpers_mock | ||
get_theming_helpers_mock.return_value = theming_helpers_mock | ||
|
||
expected_result = filter_enrollments(self.course_enrollments) | ||
|
||
result = CourseEnrollmentSiteFilterRequested.run_filter( | ||
context=self.course_enrollments | ||
) | ||
expected_result = list(expected_result) | ||
result = list(result) | ||
|
||
self.assertListEqual(expected_result, result) | ||
self.assertEqual(expected_result[0].course_id.org, result[0].course_id.org) | ||
|
||
@override_settings( | ||
OPEN_EDX_FILTERS_CONFIG={ | ||
"org.openedx.learning.course_enrollments_site.filter.requested.v1": { | ||
"fail_silently": False, | ||
"pipeline": [ | ||
"eox_tenant.filters.pipeline.FilterUserCourseEnrollmentsByTenant" | ||
], | ||
} | ||
} | ||
) | ||
@mock.patch("eox_tenant.tenant_aware_functions.enrollments.get_theming_helpers") | ||
@mock.patch( | ||
"eox_tenant.tenant_aware_functions.enrollments.get_configuration_helpers" | ||
) | ||
def test_filter_user_not_course_enrollments( | ||
self, get_conf_helpers_mock, get_theming_helpers_mock | ||
): | ||
""" | ||
Test filter when a user is not enroll in any course in the site. | ||
""" | ||
results_get_value = {} | ||
|
||
def side_effect_get_value(key, default=None): | ||
""" | ||
Mock side effect | ||
""" | ||
return results_get_value.get(key, default) | ||
|
||
conf_helpers_mock = MagicMock() | ||
theming_helpers_mock = MagicMock() | ||
conf_helpers_mock.get_value.side_effect = side_effect_get_value | ||
theming_helpers_mock.is_request_in_themed_site.return_value = True | ||
conf_helpers_mock.get_all_orgs.return_value = ["org1", "demo", "org3"] | ||
|
||
get_conf_helpers_mock.return_value = conf_helpers_mock | ||
get_theming_helpers_mock.return_value = theming_helpers_mock | ||
|
||
expected_result = filter_enrollments(self.course_enrollments) | ||
|
||
result = CourseEnrollmentSiteFilterRequested.run_filter( | ||
context=self.course_enrollments | ||
) | ||
|
||
self.assertListEqual(list(expected_result), list(result)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,3 +8,4 @@ django-crum | |
django-mysql | ||
jsonfield | ||
edx-opaque-keys[django] | ||
openedx_filters |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,3 +24,4 @@ path-py==12.5.0 | |
pycodestyle==2.8.0 | ||
pylint==2.12.2 | ||
testfixtures==6.18.4 | ||
openedx_filters==0.8.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters