def test_write_activities_to_disk_saves_io(self): course = MoodleCourse(self.tmp_path) # quiz 1 is not modified q1 = course.get_activity_by_type_and_num(MoodleQuiz, 1) q1_before_modification_dt = os.path.getmtime(q1.path) # quiz 2 is modified q2 = course.get_activity_by_type_and_num(MoodleQuiz, 2) q2.set_start_datetime( arrow.get(2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) q2_before_modification_dt = os.path.getmtime(q2.path) # Homework 1 is modified h1 = course.get_activity_by_type_and_num(MoodleHomework, 1) h1.set_start_datetime( arrow.get(2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) h1_before_modification_dt = os.path.getmtime(h1.path) course._write_activities_to_disk() # Only quiz 2 was written on disk self.assertTrue(q1_before_modification_dt == os.path.getmtime(q1.path)) self.assertFalse( q2_before_modification_dt == os.path.getmtime(q2.path)) self.assertFalse( h1_before_modification_dt == os.path.getmtime(h1.path))
def test_get_activity_by_relative_num(self): course = MoodleCourse(self.tmp_path) actual = course.get_activity_by_type_and_num(MoodleQuiz, 1)['id'] self.assertEqual('4271', actual) actual = course.get_activity_by_type_and_num(MoodleQuiz, 2)['id'] self.assertEqual('4272', actual) actual = course.get_activity_by_type_and_num(MoodleQuiz, 3)['id'] self.assertEqual('4273', actual) actual = course.get_activity_by_type_and_num(MoodleHomework, 1)['id'] self.assertEqual('5588', actual)
def test_get_activity_by_relative_num(self): course = MoodleCourse(self.tmp_path) actual = course.get_activity_by_type_and_num(MoodleQuiz, 1)['id'] self.assertEqual('4271', actual) actual = course.get_activity_by_type_and_num(MoodleQuiz, 2)['id'] self.assertEqual('4272', actual) actual = course.get_activity_by_type_and_num(MoodleQuiz, 3)['id'] self.assertEqual('4273', actual) actual = course.get_activity_by_type_and_num(MoodleHomework, 1)['id'] self.assertEqual('5588', actual)
def test_get_data_from_event(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) self.assertEqual('test de remise', quiz['name']) self.assertEqual('1451709900', quiz['timeopen']) self.assertEqual('1454301900', quiz['timeclose'])
def test_no_modification_on_event_has_no_effect_on_disk(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) before_modification_dt = os.path.getmtime(quiz.path) quiz.write() self.assertTrue(before_modification_dt == os.path.getmtime(quiz.path))
def test_get_data_from_event(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) self.assertEqual('test de remise', quiz['name']) self.assertEqual('1451709900', quiz['timeopen']) self.assertEqual('1454301900', quiz['timeclose'])
def test_no_modification_on_event_has_no_effect_on_disk(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) before_modification_dt = os.path.getmtime(quiz.path) quiz.write() self.assertTrue(before_modification_dt == os.path.getmtime(quiz.path))
def test_archive_is_repacked(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) quiz.set_start_datetime(arrow.get( 2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) course.write(self.tmp_output_archive) self.assertTrue(os.path.isfile(self.tmp_output_archive))
def test_modification_of_event_has_effect_on_disk(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) quiz.set_start_datetime(arrow.get( 2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) before_modification_dt = os.path.getmtime(quiz.path) quiz.write() self.assertFalse(before_modification_dt == os.path.getmtime(quiz.path)) # Check data is updated on disk course_after = MoodleCourse(self.tmp_path) quiz_after = course_after.get_activity_by_type_and_num(MoodleQuiz, 1) self.assertEqual(arrow.get( 2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime, quiz_after.get_start_datetime() )
def test_get_event_end_date(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) quiz['timeclose'] = 1389027600 dt = arrow.get( 2014, 1, 6, 12, tzinfo=tz.gettz('America/Montreal')).datetime self.assertEqual(dt, quiz.get_end_datetime())
def test_set_event_start_date(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) dt = arrow.get( 2014, 1, 6, 12, tzinfo=tz.gettz('America/Montreal')).datetime quiz.set_start_datetime(dt) self.assertEqual('1389027600', quiz['timeopen'])
def test_archive_is_repacked(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) quiz.set_start_datetime( arrow.get(2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) course.write(self.tmp_output_archive) self.assertTrue(os.path.isfile(self.tmp_output_archive))
def test_get_event_end_date(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) quiz['timeclose'] = 1389027600 dt = arrow.get(2014, 1, 6, 12, tzinfo=tz.gettz('America/Montreal')).datetime self.assertEqual(dt, quiz.get_end_datetime())
def test_set_event_start_date(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) dt = arrow.get(2014, 1, 6, 12, tzinfo=tz.gettz('America/Montreal')).datetime quiz.set_start_datetime(dt) self.assertEqual('1389027600', quiz['timeopen'])
def test_modification_of_event_has_effect_on_disk(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) quiz.set_start_datetime( arrow.get(2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) before_modification_dt = os.path.getmtime(quiz.path) quiz.write() self.assertFalse(before_modification_dt == os.path.getmtime(quiz.path)) self.assertFalse( before_modification_dt == os.path.getmtime(quiz.global_path + '/calendar.xml')) # Check data is updated on disk course_after = MoodleCourse(self.tmp_path) quiz_after = course_after.get_activity_by_type_and_num(MoodleQuiz, 1) self.assertEqual( arrow.get(2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime, quiz_after.get_start_datetime())
def test_set_invalid_key_raises_exception(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) with self.assertRaises(Exception): quiz['invalid_key'] = 'some data' with self.assertRaises(Exception): quiz['id'] = 'some data' with self.assertRaises(Exception): quiz['moduleid'] = 'some data'
def test_set_invalid_key_raises_exception(self): course = MoodleCourse(self.tmp_path) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) with self.assertRaises(Exception): quiz['invalid_key'] = 'some data' with self.assertRaises(Exception): quiz['id'] = 'some data' with self.assertRaises(Exception): quiz['moduleid'] = 'some data'
def test_new_mbz_archive(self): course_activity_planner._generate_planning_uuid = \ MagicMock(return_value='uuid') # Ignore mbz in request and link to local mbz file course_activity_planner._save_mbz_file = \ MagicMock(return_value=self.local_mbz_path) res = self.client.post( '/api/planning', data=dict( mbz_file=(io.BytesIO(b'this is a test'), 'test.mbz'), ics_url=self.cal_url), headers=[('Authorization', "Bearer %s" % self.token)]) res = self.client.put( '/api/planning/uuid', data=json.dumps({'planning': 'MQ1 S1F S2\nE1 S1F S2'}), headers=[('Content-Type', 'application/json'), ('Authorization', "Bearer %s" % self.token)]) res = self.client.get( '/api/planning/uuid/mbz', headers=[('Authorization', "Bearer %s" % self.token)]) self.assertEqual(200, res._status_code) new_mbz_path = os.path.join(self.app.config['UPLOAD_FOLDER'], 'downloaded.mbz') encoded = json.loads(res.data.decode('utf8'))['mbz_64'] with open(new_mbz_path, 'wb') as f: f.write(base64.b64decode(encoded)) print(os.path.exists(new_mbz_path)) tmp_archive = os.path.join(self.app.config['UPLOAD_FOLDER'], 'extracted') with tarfile.open(new_mbz_path) as tar_file: tar_file.extractall(tmp_archive) course = MoodleCourse(tmp_archive) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) expected_s = 1389013200 expected_e = 1389614400 actual_s = quiz.get_start_timestamp() actual_e = quiz.get_end_timestamp() self.assertEqual(expected_s, actual_s) self.assertEqual(expected_e, actual_e)
def test_write_activities_to_disk_saves_io(self): course = MoodleCourse(self.tmp_path) # quiz 1 is not modified q1 = course.get_activity_by_type_and_num(MoodleQuiz, 1) q1_before_modification_dt = os.path.getmtime(q1.path) # quiz 2 is modified q2 = course.get_activity_by_type_and_num(MoodleQuiz, 2) q2.set_start_datetime(arrow.get( 2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) q2_before_modification_dt = os.path.getmtime(q2.path) # Homework 1 is modified h1 = course.get_activity_by_type_and_num(MoodleHomework, 1) h1.set_start_datetime(arrow.get( 2001, 1, 1, 1, 1, 1, tzinfo=tz.gettz('America/Montreal')).datetime) h1_before_modification_dt = os.path.getmtime(h1.path) course._write_activities_to_disk() # Only quiz 2 was written on disk self.assertTrue(q1_before_modification_dt == os.path.getmtime(q1.path)) self.assertFalse(q2_before_modification_dt == os.path.getmtime(q2.path)) self.assertFalse(h1_before_modification_dt == os.path.getmtime(h1.path))
def test_new_mbz_archive(self): course_activity_planner._generate_planning_uuid = \ MagicMock(return_value='uuid') # Ignore mbz in request and link to local mbz file course_activity_planner._save_mbz_file = \ MagicMock(return_value=self.local_mbz_path) res = self.client.post( '/api/planning', data=dict( mbz_file=(io.BytesIO(b'this is a test'), 'test.mbz'), ics_url=self.cal_url), headers=[('Authorization', "Bearer %s" % self.token)]) res = self.client.put( '/api/planning/uuid', data=json.dumps({'planning': 'Q1 S1F S2'}), headers=[('Content-Type', 'application/json'), ('Authorization', "Bearer %s" % self.token)]) res = self.client.get( '/api/planning/uuid/mbz', headers=[('Authorization', "Bearer %s" % self.token)]) self.assertEqual(200, res._status_code) new_mbz_path = os.path.join(self.app.config['UPLOAD_FOLDER'], 'downloaded.mbz') with open(new_mbz_path, 'wb') as f: f.write(res.data) tmp_archive = os.path.join(self.app.config['UPLOAD_FOLDER'], 'extracted') with tarfile.open(new_mbz_path) as tar_file: tar_file.extractall(tmp_archive) course = MoodleCourse(tmp_archive) quiz = course.get_activity_by_type_and_num(MoodleQuiz, 1) expected_s = 1389013200 expected_e = 1389614400 actual_s = quiz.get_start_timestamp() actual_e = quiz.get_end_timestamp() self.assertEqual(expected_s, actual_s) self.assertEqual(expected_e, actual_e)