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'
示例#18
0
    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))
示例#20
0
    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)