Skip to content

Commit

Permalink
test: add test to custom filter pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
JuanDavidBuitrago committed Nov 21, 2022
1 parent f95e494 commit 6d4fbaf
Show file tree
Hide file tree
Showing 9 changed files with 189 additions and 27 deletions.
3 changes: 3 additions & 0 deletions eox_tenant/filters/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"""
Where Open edX Filter steps are implemented.
"""
Empty file.
140 changes: 140 additions & 0 deletions eox_tenant/filters/test/test_pipeline.py
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))
1 change: 1 addition & 0 deletions requirements/base.in
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ django-crum
django-mysql
jsonfield
edx-opaque-keys[django]
openedx_filters
15 changes: 10 additions & 5 deletions requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
# make upgrade
#
asgiref==3.5.0
asgiref==3.5.2
# via django
django==3.2.15
# via
Expand All @@ -14,6 +14,7 @@ django==3.2.15
# django-mysql
# djangorestframework
# jsonfield
# openedx-filters
django-crum==0.7.9
# via
# -c requirements/constraints.txt
Expand All @@ -34,21 +35,25 @@ jsonfield==3.1.0
# via
# -c requirements/constraints.txt
# -r requirements/base.in
pbr==5.8.1
openedx-filters==0.8.0
# via
# -c requirements/constraints.txt
# -r requirements/base.in
pbr==5.11.0
# via stevedore
pymongo==3.10.1
# via
# -c requirements/constraints.txt
# edx-opaque-keys
pytz==2021.3
pytz==2022.6
# via
# django
# djangorestframework
six==1.16.0
# via
# -c requirements/constraints.txt
# -r requirements/base.in
sqlparse==0.4.2
sqlparse==0.4.3
# via django
stevedore==3.5.0
stevedore==4.1.1
# via edx-opaque-keys
1 change: 1 addition & 0 deletions requirements/constraints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
18 changes: 13 additions & 5 deletions requirements/pip-tools.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,23 @@
#
# make upgrade
#
click==8.0.4
build==0.9.0
# via pip-tools
pep517==0.12.0
click==8.1.3
# via pip-tools
pip-tools==6.5.1
packaging==21.3
# via build
pep517==0.13.0
# via build
pip-tools==6.10.0
# via -r requirements/pip-tools.in
pyparsing==3.0.9
# via packaging
tomli==2.0.1
# via pep517
wheel==0.37.1
# via
# build
# pep517
wheel==0.38.4
# via pip-tools

# The following packages are considered to be unsafe in a requirements file:
Expand Down
23 changes: 14 additions & 9 deletions requirements/test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
# make upgrade
#
asgiref==3.5.0
asgiref==3.5.2
# via
# -r requirements/base.txt
# django
Expand All @@ -25,6 +25,7 @@ ddt==1.4.4
# django-mysql
# djangorestframework
# jsonfield
# openedx-filters
django-crum==0.7.9
# via
# -c requirements/constraints.txt
Expand All @@ -51,25 +52,29 @@ jsonfield==3.1.0
# via
# -c requirements/constraints.txt
# -r requirements/base.txt
lazy-object-proxy==1.7.1
lazy-object-proxy==1.8.0
# via astroid
mccabe==0.6.1
# via pylint
mock==4.0.3
# via
# -c requirements/constraints.txt
# -r requirements/test.in
path==16.4.0
openedx-filters==0.8.0
# via
# -c requirements/constraints.txt
# -r requirements/base.txt
path==16.5.0
# via path-py
path-py==12.5.0
# via
# -c requirements/constraints.txt
# -r requirements/test.in
pbr==5.8.1
pbr==5.11.0
# via
# -r requirements/base.txt
# stevedore
platformdirs==2.5.1
platformdirs==2.5.4
# via pylint
pycodestyle==2.8.0
# via
Expand All @@ -84,7 +89,7 @@ pymongo==3.10.1
# -c requirements/constraints.txt
# -r requirements/base.txt
# edx-opaque-keys
pytz==2021.3
pytz==2022.6
# via
# -r requirements/base.txt
# django
Expand All @@ -93,11 +98,11 @@ six==1.16.0
# via
# -c requirements/constraints.txt
# -r requirements/base.txt
sqlparse==0.4.2
sqlparse==0.4.3
# via
# -r requirements/base.txt
# django
stevedore==3.5.0
stevedore==4.1.1
# via
# -r requirements/base.txt
# edx-opaque-keys
Expand All @@ -109,7 +114,7 @@ toml==0.10.2
# via pylint
tomli==2.0.1
# via coverage
typing-extensions==4.1.1
typing-extensions==4.4.0
# via
# astroid
# pylint
Expand Down
15 changes: 7 additions & 8 deletions requirements/tox.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,29 @@
#
# make upgrade
#
distlib==0.3.4
distlib==0.3.6
# via virtualenv
filelock==3.6.0
filelock==3.8.0
# via
# tox
# virtualenv
packaging==21.3
# via tox
platformdirs==2.5.1
platformdirs==2.5.4
# via virtualenv
pluggy==1.0.0
# via tox
py==1.11.0
# via tox
pyparsing==3.0.7
pyparsing==3.0.9
# via packaging
six==1.16.0
# via
# -c requirements/constraints.txt
# tox
# virtualenv
toml==0.10.2
tomli==2.0.1
# via tox
tox==3.24.5
tox==3.27.1
# via -r requirements/tox.in
virtualenv==20.13.2
virtualenv==20.16.7
# via tox

0 comments on commit 6d4fbaf

Please sign in to comment.