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
5 changes: 5 additions & 0 deletions RELEASE.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Release Notes
=============

Version 0.58.0
--------------

- Modify mitxonline ETL to ingest designated programs as courses (#3013)

Version 0.57.4 (Released March 16, 2026)
--------------

Expand Down
32 changes: 16 additions & 16 deletions frontends/api/src/generated/v0/api.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 16 additions & 16 deletions frontends/api/src/generated/v1/api.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 6 additions & 5 deletions learning_resources/etl/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,11 +426,12 @@ def upsert_course_or_program( # noqa: C901, PLR0912
if readable_id in blocklist or not runs:
resource_data["published"] = False

if resource_type == LearningResourceType.course.name:
resource_category = LearningResourceType.course.value
else:
resource_category = LearningResourceType.program.value
resource_data["resource_category"] = resource_category
if not resource_data.get("resource_category"):
if resource_type == LearningResourceType.course.name:
resource_category = LearningResourceType.course.value
else:
resource_category = LearningResourceType.program.value
resource_data["resource_category"] = resource_category
deduplicated_course_id = next(
(
record["course_id"]
Expand Down
71 changes: 71 additions & 0 deletions learning_resources/etl/loaders_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,77 @@ def test_load_program( # noqa: PLR0913
mock_upsert_tasks.upsert_learning_resource_immutable_signature.assert_not_called()


@pytest.mark.django_db
def test_load_program_preserves_preset_resource_category(mock_upsert_tasks):
"""Test that load_program preserves a pre-set resource_category
rather than overwriting it with the default.
"""
platform = LearningResourcePlatformFactory.create()
program = ProgramFactory.build(courses=[], platform=platform.code)

run_data = {
"run_id": program.learning_resource.readable_id,
"enrollment_start": "2017-01-01T00:00:00Z",
"start_date": "2017-01-20T00:00:00Z",
"end_date": "2017-06-20T00:00:00Z",
}

result = load_program(
{
"platform": platform.code,
"readable_id": program.learning_resource.readable_id,
"professional": False,
"title": program.learning_resource.title,
"url": program.learning_resource.url,
"image": {"url": program.learning_resource.image.url},
"published": True,
"runs": [run_data],
"courses": [],
"resource_category": LearningResourceType.course.value,
},
[],
[],
)

assert result.resource_category == LearningResourceType.course.value
assert result.resource_type == LearningResourceType.program.name


@pytest.mark.django_db
def test_load_program_defaults_resource_category(mock_upsert_tasks):
"""Test that load_program sets resource_category to the default
when it is not pre-set in the input data.
"""
platform = LearningResourcePlatformFactory.create()
program = ProgramFactory.build(courses=[], platform=platform.code)

run_data = {
"run_id": program.learning_resource.readable_id,
"enrollment_start": "2017-01-01T00:00:00Z",
"start_date": "2017-01-20T00:00:00Z",
"end_date": "2017-06-20T00:00:00Z",
}

result = load_program(
{
"platform": platform.code,
"readable_id": program.learning_resource.readable_id,
"professional": False,
"title": program.learning_resource.title,
"url": program.learning_resource.url,
"image": {"url": program.learning_resource.image.url},
"published": True,
"runs": [run_data],
"courses": [],
},
[],
[],
)

assert result.resource_category == LearningResourceType.program.value
assert result.resource_type == LearningResourceType.program.name


@pytest.mark.django_db
def test_load_run_sets_test_resource_run_to_published(mocker):
"""
Expand Down
Loading
Loading