Skip to content
Open
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
62 changes: 6 additions & 56 deletions tests/test_schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import contextlib
import uuid

import jsonschema
import pytest

from le_utils.constants import completion_criteria
Expand All @@ -12,29 +13,15 @@
from le_utils.constants import learning_objectives
from le_utils.constants import mastery_criteria

try:
# the jsonschema package for python 3.4 is too old, so if not present, we'll just skip
import jsonschema
except ImportError:
jsonschema = None


# create a common decorator to skip tests if jsonschema is not available
skip_if_jsonschema_unavailable = pytest.mark.skipif(
jsonschema is None, reason="jsonschema package is unavailable"
# this is an example of how to include the mastery criteria schema, which is referenced by the
# completion criteria schema, in the schema resolver so that it validates
resolver = jsonschema.RefResolver.from_schema(mastery_criteria.SCHEMA)
resolver.store.update(
jsonschema.RefResolver.from_schema(completion_criteria.SCHEMA).store
)


resolver = None
if jsonschema is not None:
# this is an example of how to include the mastery criteria schema, which is referenced by the
# completion criteria schema, in the schema resolver so that it validates
resolver = jsonschema.RefResolver.from_schema(mastery_criteria.SCHEMA)
resolver.store.update(
jsonschema.RefResolver.from_schema(completion_criteria.SCHEMA).store
)


def _validate_embed_content_request(data):
"""
:param data: Dictionary of data to validate
Expand Down Expand Up @@ -73,7 +60,6 @@ def _assert_not_raises(not_expected):
raise e


@skip_if_jsonschema_unavailable
def test_completion_criteria__time_model__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -87,7 +73,6 @@ def test_completion_criteria__time_model__valid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__time_model__invalid():
with pytest.raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -106,7 +91,6 @@ def test_completion_criteria__time_model__invalid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__approx_time_model__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -120,7 +104,6 @@ def test_completion_criteria__approx_time_model__valid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__approx_time_model__invalid():
with pytest.raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -139,7 +122,6 @@ def test_completion_criteria__approx_time_model__invalid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__pages_model__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -153,7 +135,6 @@ def test_completion_criteria__pages_model__valid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__pages_model__percentage__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -170,7 +151,6 @@ def test_completion_criteria__pages_model__percentage__valid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__pages_model__invalid():
with pytest.raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -189,7 +169,6 @@ def test_completion_criteria__pages_model__invalid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__pages_model__percentage__invalid():
with pytest.raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -208,7 +187,6 @@ def test_completion_criteria__pages_model__percentage__invalid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__mastery_model__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand Down Expand Up @@ -244,7 +222,6 @@ def test_completion_criteria__mastery_model__valid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__mastery_model__invalid():
with pytest.raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand Down Expand Up @@ -310,7 +287,6 @@ def test_completion_criteria__mastery_model__invalid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__reference__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_completion_criteria({"model": "reference", "learner_managed": False})
Expand All @@ -321,7 +297,6 @@ def test_completion_criteria__reference__valid():
)


@skip_if_jsonschema_unavailable
def test_completion_criteria__reference__invalid():
with pytest.raises(jsonschema.ValidationError):
_validate_completion_criteria(
Expand All @@ -341,7 +316,6 @@ def test_completion_criteria__reference__invalid():
)


@skip_if_jsonschema_unavailable
def test_embed__topics__without_ancestors__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_embed_topics_request(
Expand All @@ -363,7 +337,6 @@ def test_embed__topics__without_ancestors__valid():
)


@skip_if_jsonschema_unavailable
def test_embed__topics__with_ancestors__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_embed_topics_request(
Expand Down Expand Up @@ -393,7 +366,6 @@ def test_embed__topics__with_ancestors__valid():
)


@skip_if_jsonschema_unavailable
def test_embed__topics__invalid_id():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_topics_request(
Expand All @@ -415,7 +387,6 @@ def test_embed__topics__invalid_id():
)


@skip_if_jsonschema_unavailable
def test_embed__topics__missing_language():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_topics_request(
Expand All @@ -436,7 +407,6 @@ def test_embed__topics__missing_language():
)


@skip_if_jsonschema_unavailable
def test_embed__topics__invalid_channel_id():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_topics_request(
Expand All @@ -458,7 +428,6 @@ def test_embed__topics__invalid_channel_id():
)


@skip_if_jsonschema_unavailable
def test_embed__topics__missing_channel_id():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_topics_request(
Expand All @@ -479,7 +448,6 @@ def test_embed__topics__missing_channel_id():
)


@skip_if_jsonschema_unavailable
def test_embed__content__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand All @@ -503,7 +471,6 @@ def test_embed__content__valid():
)


@skip_if_jsonschema_unavailable
def test_embed__content__valid_with_files():
with _assert_not_raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand Down Expand Up @@ -544,7 +511,6 @@ def test_embed__content__valid_with_files():
)


@skip_if_jsonschema_unavailable
def test_embed__content__invalid_id():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand All @@ -568,7 +534,6 @@ def test_embed__content__invalid_id():
)


@skip_if_jsonschema_unavailable
def test_embed__content__invalid_channel_id():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand All @@ -592,7 +557,6 @@ def test_embed__content__invalid_channel_id():
)


@skip_if_jsonschema_unavailable
def test_embed__content__invalid_content_id():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand All @@ -616,7 +580,6 @@ def test_embed__content__invalid_content_id():
)


@skip_if_jsonschema_unavailable
def test_embed__content__invalid_url_files():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand Down Expand Up @@ -646,7 +609,6 @@ def test_embed__content__invalid_url_files():
)


@skip_if_jsonschema_unavailable
def test_embed__content__invalid_preset_files():
with pytest.raises(jsonschema.ValidationError):
_validate_embed_content_request(
Expand Down Expand Up @@ -684,7 +646,6 @@ def _validate_learning_objectives(data):
jsonschema.validate(instance=data, schema=learning_objectives.SCHEMA)


@skip_if_jsonschema_unavailable
def test_learning_objectives__valid():
with _assert_not_raises(jsonschema.ValidationError):
_validate_learning_objectives(
Expand Down Expand Up @@ -715,7 +676,6 @@ def test_learning_objectives__valid():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__valid_uuid_v5():
with _assert_not_raises(jsonschema.ValidationError):
_validate_learning_objectives(
Expand Down Expand Up @@ -752,7 +712,6 @@ def test_learning_objectives__valid_uuid_v5():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_lo_structure():
with pytest.raises(jsonschema.ValidationError):
_validate_learning_objectives(
Expand All @@ -768,7 +727,6 @@ def test_learning_objectives__invalid_lo_structure():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_assessment_mapping():
with pytest.raises(jsonschema.ValidationError):
_validate_learning_objectives(
Expand All @@ -784,7 +742,6 @@ def test_learning_objectives__invalid_assessment_mapping():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_lesson_mapping():
with pytest.raises(jsonschema.ValidationError):
_validate_learning_objectives(
Expand All @@ -800,7 +757,6 @@ def test_learning_objectives__invalid_lesson_mapping():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__missing_required_fields():
# Missing learning_objectives
with pytest.raises(jsonschema.ValidationError):
Expand Down Expand Up @@ -832,7 +788,6 @@ def test_learning_objectives__missing_required_fields():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__empty_structures():
# Empty learning_objectives
with pytest.raises(jsonschema.ValidationError):
Expand Down Expand Up @@ -869,7 +824,6 @@ def test_learning_objectives__empty_structures():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_uuid_format_in_learning_objectives():
# Invalid UUID format for learning objective ID
with pytest.raises(jsonschema.ValidationError):
Expand All @@ -884,7 +838,6 @@ def test_learning_objectives__invalid_uuid_format_in_learning_objectives():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_uuid_format_in_references():
# Invalid UUID format in assessment and lesson objective references
with pytest.raises(jsonschema.ValidationError):
Expand All @@ -899,7 +852,6 @@ def test_learning_objectives__invalid_uuid_format_in_references():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_question_id_pattern():
# Invalid question ID pattern (not a valid UUID v4)
with pytest.raises(jsonschema.ValidationError):
Expand All @@ -916,7 +868,6 @@ def test_learning_objectives__invalid_question_id_pattern():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_lesson_id_pattern():
# Invalid lesson ID pattern (has extra characters)
with pytest.raises(jsonschema.ValidationError):
Expand All @@ -931,7 +882,6 @@ def test_learning_objectives__invalid_lesson_id_pattern():
)


@skip_if_jsonschema_unavailable
def test_learning_objectives__invalid_text_patterns():
# Empty text after trimming whitespace
with pytest.raises(jsonschema.ValidationError):
Expand Down
Loading