Skip to content
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: 3 additions & 1 deletion cms/djangoapps/contentstore/views/tests/test_block.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
add_container_page_publishing_info,
create_xblock_info,
)
from common.test.utils import assert_dict_contains_subset


class AsideTest(XBlockAside):
Expand Down Expand Up @@ -863,7 +864,8 @@ def test_duplicate_event(self):
XBLOCK_DUPLICATED.connect(event_receiver)
usage_key = self._duplicate_and_verify(self.vert_usage_key, self.seq_usage_key)
event_receiver.assert_called()
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": XBLOCK_DUPLICATED,
"sender": None,
Expand Down
26 changes: 16 additions & 10 deletions common/djangoapps/student/tests/test_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
from xmodule.modulestore.tests.django_utils import \
SharedModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.modulestore.tests.factories import CourseFactory # lint-amnesty, pylint: disable=wrong-import-order
from common.test.utils import assert_dict_contains_subset


class TestUserProfileEvents(UserSettingsEventTestMixin, TestCase):
Expand Down Expand Up @@ -271,7 +272,8 @@ def test_enrollment_created_event_emitted(self):
enrollment = CourseEnrollment.enroll(self.user, self.course.id)

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": COURSE_ENROLLMENT_CREATED,
"sender": None,
Expand All @@ -294,7 +296,7 @@ def test_enrollment_created_event_emitted(self):
creation_date=enrollment.created,
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)

def test_enrollment_changed_event_emitted(self):
Expand All @@ -314,7 +316,8 @@ def test_enrollment_changed_event_emitted(self):
enrollment.update_enrollment(mode="verified")

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": COURSE_ENROLLMENT_CHANGED,
"sender": None,
Expand All @@ -337,7 +340,7 @@ def test_enrollment_changed_event_emitted(self):
creation_date=enrollment.created,
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)

def test_unenrollment_completed_event_emitted(self):
Expand All @@ -357,7 +360,8 @@ def test_unenrollment_completed_event_emitted(self):
CourseEnrollment.unenroll(self.user, self.course.id)

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": COURSE_UNENROLLMENT_COMPLETED,
"sender": None,
Expand All @@ -380,7 +384,7 @@ def test_unenrollment_completed_event_emitted(self):
creation_date=enrollment.created,
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)


Expand Down Expand Up @@ -430,7 +434,8 @@ def test_access_role_created_event_emitted(self, AccessRole):
role.add_users(self.user)

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": COURSE_ACCESS_ROLE_ADDED,
"sender": None,
Expand All @@ -448,7 +453,7 @@ def test_access_role_created_event_emitted(self, AccessRole):
role=role._role_name, # pylint: disable=protected-access
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)

@ddt.data(
Expand All @@ -468,7 +473,8 @@ def test_access_role_removed_event_emitted(self, AccessRole):
role.remove_users(self.user)

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": COURSE_ACCESS_ROLE_REMOVED,
"sender": None,
Expand All @@ -486,5 +492,5 @@ def test_access_role_removed_event_emitted(self, AccessRole):
role=role._role_name, # pylint: disable=protected-access
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from openedx.features.enterprise_support.tests.factories import EnterpriseCustomerFactory

from .base import IntegrationTestMixin
from common.test.utils import assert_dict_contains_subset

TESTSHIB_ENTITY_ID = "https://idp.testshib.org/idp/shibboleth"
TESTSHIB_METADATA_URL = "https://mock.testshib.org/metadata/testshib-providers.xml"
Expand Down Expand Up @@ -402,8 +403,10 @@ def test_debug_mode_login(self, debug_mode_enabled):
assert msg.startswith("SAML login %s")
assert action_type == "request"
assert idp_name == self.PROVIDER_IDP_SLUG
self.assertDictContainsSubset(
{"idp": idp_name, "auth_entry": "login", "next": expected_next_url}, request_data
assert_dict_contains_subset(
self,
{"idp": idp_name, "auth_entry": "login", "next": expected_next_url},
request_data,
)
assert next_url == expected_next_url
assert "<samlp:AuthnRequest" in xml
Expand All @@ -412,7 +415,7 @@ def test_debug_mode_login(self, debug_mode_enabled):
assert msg.startswith("SAML login %s")
assert action_type == "response"
assert idp_name == self.PROVIDER_IDP_SLUG
self.assertDictContainsSubset({"RelayState": idp_name}, response_data)
assert_dict_contains_subset(self, {"RelayState": idp_name}, response_data)
assert "SAMLResponse" in response_data
assert next_url == expected_next_url
assert "<saml2p:Response" in xml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from common.djangoapps.third_party_auth.identityserver3 import IdentityServer3
from common.djangoapps.third_party_auth.tests import testutil
from common.djangoapps.third_party_auth.tests.utils import skip_unless_thirdpartyauth
from common.test.utils import assert_dict_contains_subset


@skip_unless_thirdpartyauth()
Expand Down Expand Up @@ -97,13 +98,14 @@ def test_user_details_without_settings(self):
Test user details fields are mapped to default keys
"""
provider_config = self.configure_identityServer3_provider(enabled=True)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"username": "Edx",
"email": "edxopenid@example.com",
"first_name": "Edx",
"last_name": "Openid",
"fullname": "Edx Openid"
},
provider_config.backend_class().get_user_details(self.response)
provider_config.backend_class().get_user_details(self.response),
)
25 changes: 17 additions & 8 deletions common/djangoapps/third_party_auth/tests/test_lti.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

from common.djangoapps.third_party_auth.lti import LTI_PARAMS_KEY, LTIAuthBackend
from common.djangoapps.third_party_auth.tests.testutil import ThirdPartyAuthTestMixin
from common.test.utils import assert_dict_contains_subset


class UnitTestLTI(unittest.TestCase, ThirdPartyAuthTestMixin):
Expand Down Expand Up @@ -55,10 +56,14 @@ def test_validate_lti_valid_request(self):
lti_max_timestamp_age=10
)
assert parameters
self.assertDictContainsSubset({
'custom_extra': 'parameter',
'user_id': '292832126'
}, parameters)
assert_dict_contains_subset(
self,
{
'custom_extra': 'parameter',
'user_id': '292832126'
},
parameters,
)

def test_validate_lti_valid_request_with_get_params(self):
request = Request(
Expand All @@ -72,10 +77,14 @@ def test_validate_lti_valid_request_with_get_params(self):
lti_max_timestamp_age=10
)
assert parameters
self.assertDictContainsSubset({
'custom_extra': 'parameter',
'user_id': '292832126'
}, parameters)
assert_dict_contains_subset(
self,
{
'custom_extra': 'parameter',
'user_id': '292832126'
},
parameters,
)

def test_validate_lti_old_timestamp(self):
request = Request(
Expand Down
9 changes: 9 additions & 0 deletions common/test/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@
from markupsafe import escape


def assert_dict_contains_subset(test_case, subset, superset):
"""
Assert that `superset` includes all key/value pairs from `subset`.
"""
test_case.assertTrue(
all(item in superset.items() for item in subset.items())
)


@contextmanager
def nostderr():
"""
Expand Down
16 changes: 10 additions & 6 deletions lms/djangoapps/certificates/tests/test_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from openedx.core.djangolib.testing.utils import skip_unless_lms

from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order
from common.test.utils import assert_dict_contains_subset


@skip_unless_lms
Expand Down Expand Up @@ -94,7 +95,8 @@ def test_send_certificate_created_event(self):
)

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": CERTIFICATE_CREATED,
"sender": None,
Expand All @@ -118,7 +120,7 @@ def test_send_certificate_created_event(self):
name=certificate.name,
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)

def test_send_certificate_changed_event(self):
Expand Down Expand Up @@ -147,7 +149,8 @@ def test_send_certificate_changed_event(self):
certificate.save()

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": CERTIFICATE_CHANGED,
"sender": None,
Expand All @@ -171,7 +174,7 @@ def test_send_certificate_changed_event(self):
name=certificate.name,
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)

def test_send_certificate_revoked_event(self):
Expand Down Expand Up @@ -199,7 +202,8 @@ def test_send_certificate_revoked_event(self):
certificate.invalidate()

self.assertTrue(self.receiver_called)
self.assertDictContainsSubset(
assert_dict_contains_subset(
self,
{
"signal": CERTIFICATE_REVOKED,
"sender": None,
Expand All @@ -223,5 +227,5 @@ def test_send_certificate_revoked_event(self):
name=certificate.name,
),
},
event_receiver.call_args.kwargs
event_receiver.call_args.kwargs,
)
3 changes: 2 additions & 1 deletion lms/djangoapps/commerce/tests/test_signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from ..utils import _generate_refund_notification_body, _send_refund_notification, create_zendesk_ticket
from . import JSON
from .mocks import mock_create_refund, mock_process_refund
from common.test.utils import assert_dict_contains_subset

ZENDESK_URL = 'http://zendesk.example.com/'
ZENDESK_USER = 'test@example.com'
Expand Down Expand Up @@ -309,7 +310,7 @@ def test_create_zendesk_ticket(self):
f'{ZENDESK_USER}/token:{ZENDESK_API_KEY}'.encode('utf8')).decode('utf8')
)
}
self.assertDictContainsSubset(expected, last_request.headers)
assert_dict_contains_subset(self, expected, last_request.headers)

# Verify the content
expected = {
Expand Down
Loading
Loading