Skip to content

Commit

Permalink
Merge pull request #1943 from openedx/asaeed/ENT-7925
Browse files Browse the repository at this point in the history
[ENT-7925] feat: stop learner data transmissions for course runs
  • Loading branch information
justEhmadSaeed authored Nov 20, 2023
2 parents 17b0857 + 5236861 commit 6dc9000
Show file tree
Hide file tree
Showing 10 changed files with 54 additions and 131 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ Unreleased
----------
Nothing unreleased.

[4.7.2]
--------
feat: stop learner data transmissions for course runs

[4.7.1]
--------
chore: retire Degreed v1 code from the set of channels
Expand Down
2 changes: 1 addition & 1 deletion enterprise/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
Your project description goes here.
"""

__version__ = "4.7.1"
__version__ = "4.7.2"
11 changes: 0 additions & 11 deletions integrated_channels/degreed/exporters/learner_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,6 @@ def get_learner_data_records(
enterprise_customer_uuid=enterprise_enrollment.enterprise_customer_user.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id,
),
DegreedLearnerDataTransmissionAudit(
enterprise_course_enrollment_id=enterprise_enrollment.id,
degreed_user_email=enterprise_enrollment.enterprise_customer_user.user_email,
user_email=enterprise_enrollment.enterprise_customer_user.user_email,
course_id=enterprise_enrollment.course_id,
course_completed=course_completed,
completed_timestamp=completed_date,
degreed_completed_timestamp=degreed_completed_timestamp,
enterprise_customer_uuid=enterprise_enrollment.enterprise_customer_user.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id,
)
]
LOGGER.info(generate_formatted_log(
self.enterprise_configuration.channel_code(),
Expand Down
12 changes: 0 additions & 12 deletions integrated_channels/degreed2/exporters/learner_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,18 +81,6 @@ def get_learner_data_records(
enterprise_customer_uuid=enterprise_enrollment.enterprise_customer_user.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id,
),
Degreed2LearnerDataTransmissionAudit(
enterprise_course_enrollment_id=enterprise_enrollment.id,
degreed_user_email=enterprise_enrollment.enterprise_customer_user.user_email,
user_email=enterprise_enrollment.enterprise_customer_user.user_email,
course_id=enterprise_enrollment.course_id,
completed_timestamp=completed_date,
degreed_completed_timestamp=degreed_completed_timestamp,
course_completed=course_completed,
grade=percent_grade,
enterprise_customer_uuid=enterprise_enrollment.enterprise_customer_user.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id,
)
]
LOGGER.info(generate_formatted_log(
self.enterprise_configuration.channel_code(),
Expand Down
12 changes: 0 additions & 12 deletions integrated_channels/integrated_channel/exporters/learner_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -627,18 +627,6 @@ def get_learner_data_records(
content_title=content_title,
progress_status=progress_status,
),
TransmissionAudit(
plugin_configuration_id=self.enterprise_configuration.id,
enterprise_customer_uuid=self.enterprise_configuration.enterprise_customer.uuid,
enterprise_course_enrollment_id=enterprise_enrollment.id,
course_id=enterprise_enrollment.course_id,
course_completed=course_completed,
completed_timestamp=completed_timestamp,
grade=grade,
user_email=user_email,
content_title=content_title,
progress_status=progress_status,
)
]

def collect_certificate_data(self, enterprise_enrollment, channel_name):
Expand Down
12 changes: 0 additions & 12 deletions integrated_channels/moodle/exporters/learner_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,4 @@ def get_learner_data_records(
enterprise_customer_uuid=enterprise_customer_user.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id,
),
MoodleLearnerDataTransmissionAudit(
enterprise_course_enrollment_id=enterprise_enrollment.id,
moodle_user_email=enterprise_customer_user.user_email,
user_email=enterprise_customer_user.user_email,
course_id=enterprise_enrollment.course_id,
course_completed=course_completed,
grade=percent_grade,
completed_timestamp=completed_date,
moodle_completed_timestamp=moodle_completed_timestamp,
enterprise_customer_uuid=enterprise_customer_user.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id,
)
]
14 changes: 0 additions & 14 deletions integrated_channels/sap_success_factors/exporters/learner_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,20 +73,6 @@ def get_learner_data_records(
enterprise_customer_uuid=self.enterprise_configuration.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id
),
SapSuccessFactorsLearnerDataTransmissionAudit(
enterprise_course_enrollment_id=enterprise_enrollment.id,
sapsf_user_id=sapsf_user_id,
user_email=enterprise_enrollment.enterprise_customer_user.user_email,
course_id=enterprise_enrollment.course_id,
course_completed=course_completed,
completed_timestamp=completed_date,
sap_completed_timestamp=sap_completed_timestamp,
grade=grade,
total_hours=total_hours,
credit_hours=total_hours,
enterprise_customer_uuid=self.enterprise_configuration.enterprise_customer.uuid,
plugin_configuration_id=self.enterprise_configuration.id
),
]
LOGGER.info(
generate_formatted_log(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,8 @@ def test_get_learner_data_record(self, completed_date, course_completed):
completed_date=completed_date,
course_completed=course_completed,
)
assert len(learner_data_records) == 2
assert len(learner_data_records) == 1
assert learner_data_records[0].course_id == self.course_key
assert learner_data_records[1].course_id == self.course_id

for learner_data_record in learner_data_records:
assert learner_data_record.enterprise_course_enrollment_id == enterprise_course_enrollment.id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,8 @@ def test_get_learner_data_record(self, completed_date, grade_percent):
completed_date=completed_date,
grade_percent=grade_percent,
)
assert len(learner_data_records) == 2
assert len(learner_data_records) == 1
assert learner_data_records[0].course_id == self.course_key
assert learner_data_records[1].course_id == self.course_id

for learner_data_record in learner_data_records:
assert learner_data_record.enterprise_course_enrollment_id == enterprise_course_enrollment.id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ def test_get_learner_data_record(self, completed_date, mock_course_catalog_api):
course_completed=expected_course_completed,
)

learner_data_record = learner_data_records[1]
learner_data_record = learner_data_records[0]
assert learner_data_record.enterprise_course_enrollment_id == enterprise_course_enrollment.id
assert learner_data_record.course_id == enterprise_course_enrollment.course_id
assert learner_data_record.course_id == self.course_key
assert learner_data_record.course_completed == expected_course_completed
assert learner_data_record.completed_timestamp == (self.NOW_TIMESTAMP if completed_date is not None else None)
assert learner_data_record.grade == 'A+'
Expand Down Expand Up @@ -247,16 +247,14 @@ def test_learner_data_instructor_paced_no_certificate(
}

learner_data = list(self.exporter.export())
assert len(learner_data) == 2
assert len(learner_data) == 1
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id

for report in learner_data:
assert report.user_email == self.user.email
assert report.enterprise_course_enrollment_id == enrollment.id
assert not report.course_completed
assert report.completed_timestamp is None
assert report.grade == LearnerExporter.GRADE_INCOMPLETE
assert learner_data[0].user_email == self.user.email
assert learner_data[0].enterprise_course_enrollment_id == enrollment.id
assert not learner_data[0].course_completed
assert learner_data[0].completed_timestamp is None
assert learner_data[0].grade == LearnerExporter.GRADE_INCOMPLETE

@mock.patch('enterprise.models.EnrollmentApiClient')
@mock.patch('integrated_channels.integrated_channel.exporters.learner_data.get_single_user_grade')
Expand Down Expand Up @@ -359,17 +357,14 @@ def test_learner_data_instructor_paced_with_certificate_created_date(
}

learner_data = list(self.exporter.export())
assert len(learner_data) == 2
assert len(learner_data) == 1
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id

for report in learner_data:
assert report.enterprise_course_enrollment_id == enrollment.id
assert report.course_completed
assert report.completed_timestamp == self.NOW_TIMESTAMP
assert report.grade == LearnerExporter.GRADE_PASSING
assert report.progress_status == 'Passed'
assert report.content_title == 'Dogs and Cats: Star Crossed Lovers or Fated Foes'
assert learner_data[0].enterprise_course_enrollment_id == enrollment.id
assert learner_data[0].course_completed
assert learner_data[0].completed_timestamp == self.NOW_TIMESTAMP
assert learner_data[0].grade == LearnerExporter.GRADE_PASSING
assert learner_data[0].progress_status == 'Passed'
assert learner_data[0].content_title == 'Dogs and Cats: Star Crossed Lovers or Fated Foes'

@mock.patch('enterprise.models.EnrollmentApiClient')
@mock.patch('integrated_channels.integrated_channel.exporters.learner_data.get_course_details')
Expand Down Expand Up @@ -423,15 +418,12 @@ def test_learner_data_instructor_paced_with_certificate_created(
}

learner_data = list(self.exporter.export())
assert len(learner_data) == 2
assert len(learner_data) == 1
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id

for report in learner_data:
assert report.enterprise_course_enrollment_id == enrollment.id
assert report.course_completed
assert report.completed_timestamp == self.NOW_TIMESTAMP
assert report.grade == LearnerExporter.GRADE_PASSING
assert learner_data[0].enterprise_course_enrollment_id == enrollment.id
assert learner_data[0].course_completed
assert learner_data[0].completed_timestamp == self.NOW_TIMESTAMP
assert learner_data[0].grade == LearnerExporter.GRADE_PASSING

@mock.patch('enterprise.models.EnrollmentApiClient')
@mock.patch('integrated_channels.integrated_channel.exporters.learner_data.get_course_certificate')
Expand Down Expand Up @@ -468,9 +460,8 @@ def test_learner_data_self_paced_no_grades(
}

learner_data = list(self.exporter.export())
assert len(learner_data) == 2
assert len(learner_data) == 1
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id

for report in learner_data:
assert report.enterprise_course_enrollment_id == enrollment.id
Expand Down Expand Up @@ -556,9 +547,8 @@ def test_learner_data_self_paced_course(
with freeze_time(self.NOW):
learner_data = list(self.exporter.export())

assert len(learner_data) == 2
assert len(learner_data) == 1
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id

for report in learner_data:
assert report.enterprise_course_enrollment_id == enrollment.id
Expand Down Expand Up @@ -647,9 +637,8 @@ def test_learner_data_self_paced_course_with_funky_certificate(
with freeze_time(self.NOW):
learner_data = list(self.exporter.export())

assert len(learner_data) == 2
assert len(learner_data) == 1
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id

for report in learner_data:
assert report.enterprise_course_enrollment_id == enrollment.id
Expand Down Expand Up @@ -866,41 +855,36 @@ def get_course_grade(course_id, username): # pylint: disable=unused-argument
with freeze_time(self.NOW):
learner_data = list(self.exporter.export())

assert len(learner_data) == 6
assert len(learner_data) == 3

assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id
# note: the course_completed is a function of the mock_is_course_completed mock
for report1 in learner_data[0:1]:
assert report1.enterprise_course_enrollment_id == enrollment1.id
assert report1.course_completed
assert report1.completed_timestamp is None
assert report1.grade == LearnerExporter.GRADE_INCOMPLETE
assert learner_data[0].enterprise_course_enrollment_id == enrollment1.id
assert learner_data[0].course_completed
assert learner_data[0].completed_timestamp is None
assert learner_data[0].grade == LearnerExporter.GRADE_INCOMPLETE

assert learner_data[1].course_id == self.course_key
assert learner_data[1].enterprise_course_enrollment_id == enrollment2.id
assert learner_data[1].course_completed
assert learner_data[1].completed_timestamp == self.NOW_TIMESTAMP
assert learner_data[1].grade == grade

assert learner_data[2].course_id == self.course_key
assert learner_data[3].course_id == course_id2
for report2 in learner_data[2:3]:
assert report2.enterprise_course_enrollment_id == enrollment2.id
assert report2.course_completed
assert report2.completed_timestamp == self.NOW_TIMESTAMP
assert report2.grade == grade
assert learner_data[4].course_id == self.course_key
assert learner_data[5].course_id == self.course_id
for report3 in learner_data[4:5]:
assert report3.enterprise_course_enrollment_id == enrollment3.id
assert report3.course_completed
assert report3.completed_timestamp is None
assert report3.grade == LearnerExporter.GRADE_INCOMPLETE
assert learner_data[2].enterprise_course_enrollment_id == enrollment3.id
assert learner_data[2].course_completed
assert learner_data[2].completed_timestamp is None
assert learner_data[2].grade == LearnerExporter.GRADE_INCOMPLETE

@ddt.data(
(True, True, 'audit', 2),
(True, True, 'audit', 1),
(True, False, 'audit', 0),
(False, True, 'audit', 0),
(False, False, 'audit', 0),
(True, True, 'verified', 2),
(True, False, 'verified', 2),
(False, True, 'verified', 2),
(False, False, 'verified', 2),
(True, True, 'verified', 1),
(True, False, 'verified', 1),
(False, True, 'verified', 1),
(False, False, 'verified', 1),
)
@ddt.unpack
@mock.patch('enterprise.models.CourseEnrollment')
Expand Down Expand Up @@ -968,13 +952,11 @@ def test_learner_data_audit_data_reporting(

assert len(learner_data) == expected_data_len

if expected_data_len == 2:
if expected_data_len == 1:
assert learner_data[0].course_id == self.course_key
assert learner_data[1].course_id == self.course_id
for report in learner_data:
assert report.enterprise_course_enrollment_id == enrollment.id
assert report.course_completed
assert report.grade == LearnerExporter.GRADE_PASSING
assert learner_data[0].enterprise_course_enrollment_id == enrollment.id
assert learner_data[0].course_completed
assert learner_data[0].grade == LearnerExporter.GRADE_PASSING

@mock.patch('enterprise.models.CourseEnrollment')
@mock.patch('integrated_channels.integrated_channel.exporters.learner_data.get_single_user_grade')
Expand Down

0 comments on commit 6dc9000

Please sign in to comment.