Skip to content

Commit 93a5907

Browse files
authored
Don't publish Professional Ed resources with blank run ids (#2637)
1 parent fc7d381 commit 93a5907

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

learning_resources/etl/mitpe.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,13 @@ def _transform_runs(resource_data: dict) -> list[dict]:
233233
duration = parse_resource_duration(resource_data.get("duration"))
234234
published_runs = []
235235
for run_data in runs_data:
236+
run_id = run_data[0]
236237
start = parse_date(run_data[1])
237238
end = parse_date(run_data[2])
238239
enrollment_end = parse_date(run_data[3])
239-
published = (not end and not enrollment_end) or (now <= (enrollment_end or end))
240+
published = run_id and (
241+
(not end and not enrollment_end) or (now <= (enrollment_end or end))
242+
)
240243
if published:
241244
published_runs.append(
242245
{
@@ -283,8 +286,8 @@ def transform_course(resource_data: dict) -> dict or None:
283286
Returns:
284287
dict: transformed course data if it has any viable runs
285288
"""
286-
runs = _transform_runs(resource_data)
287-
if runs:
289+
published_runs = _transform_runs(resource_data)
290+
if published_runs:
288291
return {
289292
"readable_id": resource_data["uuid"],
290293
"offered_by": copy.deepcopy(OFFERED_BY),
@@ -303,7 +306,7 @@ def transform_course(resource_data: dict) -> dict or None:
303306
"delivery": transform_delivery(resource_data["learning_format"]),
304307
"published": True,
305308
"topics": parse_topics(resource_data),
306-
"runs": runs,
309+
"runs": published_runs,
307310
"format": [Format.asynchronous.name],
308311
"pace": [Pace.instructor_paced.name],
309312
"availability": Availability.dated.name,
@@ -321,8 +324,8 @@ def transform_program(resource_data: dict) -> dict or None:
321324
Returns:
322325
dict: transformed program data
323326
"""
324-
runs = _transform_runs(resource_data)
325-
if runs:
327+
published_runs = _transform_runs(resource_data)
328+
if published_runs:
326329
return {
327330
"readable_id": resource_data["uuid"],
328331
"offered_by": copy.deepcopy(OFFERED_BY),
@@ -343,7 +346,7 @@ def transform_program(resource_data: dict) -> dict or None:
343346
"delivery": transform_delivery(resource_data["learning_format"]),
344347
"published": True,
345348
"topics": parse_topics(resource_data),
346-
"runs": runs,
349+
"runs": published_runs,
347350
"format": [Format.asynchronous.name],
348351
"pace": [Pace.instructor_paced.name],
349352
"availability": Availability.dated.name,

learning_resources/etl/mitpe_test.py

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,22 @@ def read_json(file_path):
193193
)
194194

195195

196+
@pytest.fixture
197+
def mitpe_offeror_and_topics(mocker):
198+
"""Create the MIT Professional Education offeror and 2 topics"""
199+
offeror = LearningResourceOfferorFactory.create(code="mitpe")
200+
LearningResourceTopicMappingFactory.create(
201+
offeror=offeror,
202+
topic=LearningResourceTopicFactory.create(name="Product Innovation"),
203+
topic_name="Technology Innovation",
204+
)
205+
LearningResourceTopicMappingFactory.create(
206+
offeror=offeror,
207+
topic=LearningResourceTopicFactory.create(name="Data Science"),
208+
topic_name="Data Science",
209+
)
210+
211+
196212
@pytest.mark.parametrize("prof_ed_api_url", ["http://pro_edd_api.com", None])
197213
def test_extract(settings, mock_fetch_data, prof_ed_api_url):
198214
"""Test extract function"""
@@ -213,23 +229,22 @@ def test_extract(settings, mock_fetch_data, prof_ed_api_url):
213229

214230

215231
@pytest.mark.django_db
216-
def test_transform(mock_fetch_data):
232+
def test_transform(mock_fetch_data, mitpe_offeror_and_topics):
217233
"""Test transform function, and effectively most other functions"""
218-
offeror = LearningResourceOfferorFactory.create(code="mitpe")
219-
LearningResourceTopicMappingFactory.create(
220-
offeror=offeror,
221-
topic=LearningResourceTopicFactory.create(name="Product Innovation"),
222-
topic_name="Technology Innovation",
223-
)
224-
LearningResourceTopicMappingFactory.create(
225-
offeror=offeror,
226-
topic=LearningResourceTopicFactory.create(name="Data Science"),
227-
topic_name="Data Science",
228-
)
229234
extracted = mitpe.extract()
230235
assert len(extracted) == 3
231236
courses, programs = mitpe.transform(extracted)
232237
assert_json_equal(
233238
sorted(courses, key=lambda course: course["readable_id"]), EXPECTED_COURSES
234239
)
235240
assert_json_equal(programs, EXPECTED_PROGRAMS)
241+
242+
243+
@pytest.mark.django_db
244+
def test_transform__course_no_run_ids(mock_fetch_data, mitpe_offeror_and_topics):
245+
"""Resources with no run IDs should not be published"""
246+
extracted = mitpe.extract()
247+
assert len(extracted) == 3
248+
for resource in extracted:
249+
resource["run__readable_id"] = ""
250+
assert mitpe.transform(extracted) == ([], [])

0 commit comments

Comments
 (0)