@@ -260,10 +260,10 @@ def test_course_skill_not_saved_for_key_error(self, get_course_skills_mock, get_
260260 [
261261 '[TAXONOMY] Refresh Course Skills. Options: [%s]' ,
262262 '[TAXONOMY] Refresh course skills process started.' ,
263- '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
264263 f'[TAXONOMY] Missing keys in skills data for course_key: { self .course_1 .key } ' ,
265264 '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
266265 f'[TAXONOMY] Missing keys in skills data for course_key: { self .course_2 .key } ' ,
266+ '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
267267 '[TAXONOMY] Refresh course skills process completed. \n '
268268 'Failures: %s \n '
269269 'Total Courses Updated Successfully: %s \n '
@@ -301,10 +301,10 @@ def test_course_skill_not_saved_for_type_error(self, get_course_skills_mock, get
301301 [
302302 '[TAXONOMY] Refresh Course Skills. Options: [%s]' ,
303303 '[TAXONOMY] Refresh course skills process started.' ,
304- '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
305304 f'[TAXONOMY] Invalid type for `confidence` in course skills for course_key: { self .course_1 .key } ' ,
306305 '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
307306 f'[TAXONOMY] Invalid type for `confidence` in course skills for course_key: { self .course_2 .key } ' ,
307+ '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
308308 '[TAXONOMY] Refresh course skills process completed. \n '
309309 'Failures: %s \n '
310310 'Total Courses Updated Successfully: %s \n '
@@ -315,3 +315,46 @@ def test_course_skill_not_saved_for_type_error(self, get_course_skills_mock, get
315315
316316 self .assertEqual (skill .count (), 0 )
317317 self .assertEqual (course_skill .count (), 0 )
318+
319+ @responses .activate
320+ @mock .patch ('taxonomy.management.commands.refresh_course_skills.get_course_metadata_provider' )
321+ @mock .patch ('taxonomy.management.commands.refresh_course_skills.utils.EMSISkillsApiClient.get_course_skills' )
322+ @mock .patch ('taxonomy.management.commands.refresh_course_skills.utils.process_skills_data' )
323+ def test_course_skill_not_saved_for_exception (
324+ self ,
325+ mock_process_skills_data ,
326+ get_course_skills_mock ,
327+ get_course_provider_mock ,
328+
329+ ):
330+ """
331+ Test that the command does not create any records when a record value error occurs.
332+ """
333+ get_course_skills_mock .return_value = self .skills_emsi_client_response
334+ get_course_provider_mock .return_value = DiscoveryCourseMetadataProvider ([self .course_1 ])
335+ mock_process_skills_data .side_effect = Exception ("UNKNOWN ERROR." )
336+ skill = Skill .objects .all ()
337+ course_skill = CourseSkills .objects .all ()
338+ self .assertEqual (skill .count (), 0 )
339+ self .assertEqual (course_skill .count (), 0 )
340+
341+ with LogCapture (level = logging .INFO ) as log_capture :
342+ call_command (self .command , '--course' , self .course_1 .uuid , '--commit' )
343+ # Validate a descriptive and readable log message.
344+ self .assertEqual (len (log_capture .records ), 5 )
345+ messages = [record .msg for record in log_capture .records ]
346+ self .assertEqual (
347+ messages ,
348+ ['[TAXONOMY] Refresh Course Skills. Options: [%s]' ,
349+ '[TAXONOMY] Refresh course skills process started.' ,
350+ '[TAXONOMY] Skills data received from EMSI. Skills: [%s]' ,
351+ f'[TAXONOMY] Exception for course_key: { self .course_1 .key } Error: UNKNOWN ERROR.' ,
352+ '[TAXONOMY] Refresh course skills process completed. \n '
353+ 'Failures: %s \n '
354+ 'Total Courses Updated Successfully: %s \n '
355+ 'Total Courses Skipped: %s \n '
356+ 'Total Failures: %s \n ' ]
357+ )
358+
359+ self .assertEqual (skill .count (), 0 )
360+ self .assertEqual (course_skill .count (), 0 )
0 commit comments