Пример #1
0
    def test_publish_draft_course_when_newdownloadsdisabled_course_exists__should_not_publish(
            self):
        update_course_status(2, CourseStatus.NEW_DOWNLOADS_DISABLED)

        with open(self.course_file_path, 'rb') as course_file:
            response = self.publish_course(course_file, True)
            self.assertEqual(400, response.status_code)
Пример #2
0
    def test_publish_draft_course_when_draft_course_exists__should_publish(
            self):
        update_course_status(2, CourseStatus.DRAFT)

        with open(self.course_file_path, 'rb') as course_file:
            response = self.publish_course(course_file, True)
            self.assertEqual(201, response.status_code)
 def test_archived_course_normal(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.ARCHIVED)
     response = self.perform_request(1, self.user_auth, self.STR_DOWNLOAD)
     self.assertEqual(response.status_code, 404)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #4
0
    def test_publish_live_course_when_archived_course_exists__should_not_publish(
            self):
        update_course_status(2, CourseStatus.ARCHIVED)

        with open(self.course_file_path, 'rb') as course_file:
            response = self.publish_course(course_file, False)
            self.assertEqual(400, response.status_code)
Пример #5
0
    def test_publish_draft_course_when_readonly_course_exists__should_not_publish(
            self):
        update_course_status(2, CourseStatus.READ_ONLY)

        with open(self.course_file_path, 'rb') as course_file:
            response = self.publish_course(course_file, True)
            self.assertEqual(400, response.status_code)
 def test_draft_course_staff(self):
     update_course_status(1, CourseStatus.DRAFT)
     response = self.get_view(self.course_download_url_valid,
                              self.staff_user)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response['content-type'],
                      self.STR_EXPECTED_CONTENT_TYPE)
     update_course_status(1, CourseStatus.LIVE)
 def test_read_only_course_normal(self):
     update_course_status(1, CourseStatus.READ_ONLY)
     response = self.get_view(self.course_download_url_valid,
                              self.normal_user)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response['content-type'],
                      self.STR_EXPECTED_CONTENT_TYPE)
     update_course_status(1, CourseStatus.LIVE)
 def test_new_downloads_disabled_course_staff(self):
     update_course_status(1, CourseStatus.NEW_DOWNLOADS_DISABLED)
     response = self.get_view(self.course_download_url_valid,
                              self.staff_user)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response['content-type'],
                      self.STR_EXPECTED_CONTENT_TYPE)
     update_course_status(1, CourseStatus.LIVE)
 def test_draft_course_teacher(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.DRAFT)
     response = self.perform_request(1, self.teacher_auth,
                                     self.STR_DOWNLOAD)
     self.assertEqual(response.status_code, 404)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #10
0
 def test_no_access_for_draft_course(self):
     url = ('%s?course=' + self.valid_course) \
         % reverse(self.STR_URL_REDIRECT)
     update_course_status(1, CourseStatus.DRAFT)
     response = self.client.get(url)
     self.assertRaises(Http404)
     self.assertTemplateUsed(response, self.STR_LAUNCHER_TEMPLATE)
     self.assertEqual(200, response.status_code)
     update_course_status(1, CourseStatus.LIVE)
Пример #11
0
 def test_read_only_course_normal(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.READ_ONLY)
     response = self.perform_request(1, self.user_auth, self.STR_DOWNLOAD)
     self.assertHttpOK(response)
     self.assertEqual(response['content-type'],
                      self.STR_ZIP_EXPECTED_CONTENT_TYPE)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #12
0
 def test_new_downloads_disabled_course_normal(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.NEW_DOWNLOADS_DISABLED)
     response = self.perform_request(1, self.user_auth, self.STR_DOWNLOAD)
     self.assertHttpOK(response)
     self.assertEqual(response['content-type'],
                      self.STR_ZIP_EXPECTED_CONTENT_TYPE)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #13
0
 def test_draft_course_staff(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.DRAFT)
     response = self.perform_request(1, self.staff_auth, self.STR_DOWNLOAD)
     self.assertHttpOK(response)
     self.assertEqual(response['content-type'],
                      self.STR_ZIP_EXPECTED_CONTENT_TYPE)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #14
0
 def test_archived_course_admin(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.ARCHIVED)
     resource_url = get_api_url('v1', 'course', 1) + self.STR_DOWNLOAD
     response = self.api_client.get(
         resource_url, format='json', data=self.admin_auth)
     self.assertEqual(response.status_code, 404)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #15
0
 def test_draft_course_normal(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.DRAFT)
     resource_url = get_api_url('v1', 'course', 1) + self.STR_DOWNLOAD
     response = self.api_client.get(
         resource_url, format='json', data=self.user_auth)
     self.assertEqual(response.status_code, 404)
     update_course_status(1, CourseStatus.LIVE)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #16
0
    def test_publish_draft_course_when_live_course_exists__should_publish_and_update_status(
            self):
        course_id = 2
        update_course_status(course_id, CourseStatus.LIVE)

        with open(self.course_file_path, 'rb') as course_file:
            response = self.publish_course(course_file, True)
            self.assertEqual(201, response.status_code)

            course = Course.objects.get(pk=course_id)
            self.assertEqual(CourseStatus.DRAFT, course.status)
Пример #17
0
 def test_draft_course_staff(self):
     tracker_count_start = Tracker.objects.all().count()
     update_course_status(1, CourseStatus.DRAFT)
     resource_url = get_api_url('v1', 'course', 1) + self.STR_DOWNLOAD
     response = self.api_client.get(
         resource_url, format='json', data=self.staff_auth)
     self.assertHttpOK(response)
     self.assertEqual(response['content-type'],
                      self.STR_ZIP_EXPECTED_CONTENT_TYPE)
     update_course_status(1, CourseStatus.LIVE)
     tracker_count_end = Tracker.objects.all().count()
     self.assertEqual(tracker_count_start, tracker_count_end)
Пример #18
0
    def test_count_new_downloads_enabled(self):
        # Expected count of courses having new downloads enabled by category (based on test_oppia.json)
        expected = {'HEAT': 2, 'ANC': 1, 'Antenatal Care': 1, 'NCD': 1, 'reference': 0}

        # Disable new downloads from 1 of the 4 courses (ref-1)
        update_course_status(4, CourseStatus.NEW_DOWNLOADS_DISABLED)

        resp = self.api_client.get(
            self.url, format='json', data=self.user_auth)
        self.assertHttpOK(resp)
        self.assertValidJSON(resp.content)
        response_data = self.deserialize(resp)
        self.assertTrue('tags' in response_data)
        for tag in response_data['tags']:
            self.assertTrue('count_new_downloads_enabled' in tag)
            self.assertEqual(tag['count_new_downloads_enabled'], expected.get(tag['name']))
Пример #19
0
    def test_archived_course_is_not_included_in_course_statuses_admin_user(self):
        expected = {
            'reference': {'ref-1': 'live'}
        }

        # Set draft-test course to archived status
        update_course_status(3, CourseStatus.ARCHIVED)

        resp = self.api_client.get(
            self.url, format='json', data=self.admin_auth)
        self.assertHttpOK(resp)
        self.assertValidJSON(resp.content)
        response_data = self.deserialize(resp)
        self.assertTrue('tags' in response_data)
        tags = response_data['tags']
        course_statuses = next((tag['course_statuses'] for tag in tags if tag['name'] == 'reference'))
        self.assertEqual(expected.get('reference'), course_statuses)
Пример #20
0
    def test_can_edit_gamification_new_downloads_disabled_course(self):
        update_course_status(1, CourseStatus.NEW_DOWNLOADS_DISABLED)

        # admin
        self.client.force_login(self.admin_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 403)

        # staff
        self.client.force_login(self.staff_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 403)

        # teacher
        self.client.force_login(self.teacher_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 403)

        # user
        self.client.force_login(self.normal_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 403)
Пример #21
0
    def test_can_edit_gamification_draft_course(self):
        update_course_status(1, CourseStatus.DRAFT)

        # admin
        self.client.force_login(self.admin_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 200)

        # staff
        self.client.force_login(self.staff_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 200)

        # teacher
        self.client.force_login(self.teacher_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 403)

        # user
        self.client.force_login(self.normal_user)
        response = self.client.get(self.valid_course_url)
        self.assertEqual(response.status_code, 403)
Пример #22
0
    def test_course_statuses(self):
        # Expected courses having new downloads disabled by category (based on test_oppia.json)
        expected = {
            'HEAT': {'anc1-all': 'live', 'ncd1-et': 'new_downloads_disabled'},
            'ANC': {'anc1-all': 'live'},
            'Antenatal Care': {'anc1-all': 'live'},
            'NCD': {'ncd1-et': 'new_downloads_disabled'},
            'reference': {'ref-1': 'new_downloads_disabled'}
            }

        # Disable new downloads from 2 of the 4 courses (ncd1-et and ref-1)
        update_course_status(2, CourseStatus.NEW_DOWNLOADS_DISABLED)
        update_course_status(4, CourseStatus.NEW_DOWNLOADS_DISABLED)

        resp = self.api_client.get(
            self.url, format='json', data=self.user_auth)
        self.assertHttpOK(resp)
        self.assertValidJSON(resp.content)
        response_data = self.deserialize(resp)
        self.assertTrue('tags' in response_data)
        for tag in response_data['tags']:
            self.assertTrue('course_statuses' in tag)
            self.assertEqual(expected.get(tag['name']), tag['course_statuses'])
Пример #23
0
    def test_archived_course_is_not_included_in_course_statuses_normal_teacher_with_manager_permissions(self):
        expected = {
            'reference': {'ref-1': 'live'}
        }

        # Set draft-test course to archived status
        update_course_status(3, CourseStatus.ARCHIVED)

        # Add Viewer permission to normal user
        CoursePermissions.objects.create(
            course=Course.objects.get(shortname='draft-test'),
            user=self.teacher,
            role=CoursePermissions.MANAGER
        )

        resp = self.api_client.get(
            self.url, format='json', data=self.admin_auth)
        self.assertHttpOK(resp)
        self.assertValidJSON(resp.content)
        response_data = self.deserialize(resp)
        self.assertTrue('tags' in response_data)
        tags = response_data['tags']
        course_statuses = next((tag['course_statuses'] for tag in tags if tag['name'] == 'reference'))
        self.assertEqual(expected.get('reference'), course_statuses)
Пример #24
0
 def test_course_get_single_new_downloads_enabled_admin_visible(self):
     update_course_status(1, CourseStatus.LIVE)
     resp = self.perform_request(1, self.admin_auth)
     self.assertHttpOK(resp)
     self.assertValidJSON(resp.content)
Пример #25
0
 def test_download_course_read_only_admin(self):
     update_course_status(1, CourseStatus.READ_ONLY)
     resp = self.perform_request(1, self.admin_auth, self.STR_DOWNLOAD)
     self.assertHttpOK(resp)
Пример #26
0
 def test_download_course_new_downloads_disabled_admin(self):
     update_course_status(1, CourseStatus.NEW_DOWNLOADS_DISABLED)
     resp = self.perform_request(1, self.admin_auth, self.STR_DOWNLOAD)
     self.assertHttpOK(resp)
Пример #27
0
 def test_download_course_new_downloads_enabled_staff(self):
     update_course_status(1, CourseStatus.LIVE)
     resp = self.perform_request(1, self.staff_auth, self.STR_DOWNLOAD)
     self.assertHttpOK(resp)
Пример #28
0
 def test_course_get_single_read_only_admin_visible(self):
     update_course_status(1, CourseStatus.READ_ONLY)
     resp = self.perform_request(1, self.admin_auth)
     self.assertHttpOK(resp)
     self.assertValidJSON(resp.content)
Пример #29
0
 def test_course_get_single_new_downloads_disabled_admin_visible(self):
     update_course_status(1, CourseStatus.NEW_DOWNLOADS_DISABLED)
     resp = self.perform_request(1, self.admin_auth)
     self.assertHttpOK(resp)
     self.assertValidJSON(resp.content)
 def test_archived_course_admin(self):
     update_course_status(1, CourseStatus.ARCHIVED)
     response = self.get_view(self.course_download_url_valid,
                              self.admin_user)
     self.assertEqual(response.status_code, 404)
     update_course_status(1, CourseStatus.LIVE)