Пример #1
0
    def test_organizations_courses_search_by_mobile_available(self):
        organization = self.setup_test_organization()
        courses = CourseFactory.create_batch(2)
        mobile_course = CourseFactory.create(mobile_available=True)
        courses.append(mobile_course)
        users = UserFactory.create_batch(3)

        for course in courses:
            CourseOverview.get_from_id(course.id)

        for i, user in enumerate(users):
            CourseEnrollmentFactory.create(user=user, course_id=courses[i].id)
            user.organizations.add(organization['id'])

        # fetch all courses for organization
        courses_uri = '{}{}/courses/'.format(self.base_organizations_uri,
                                             organization['id'])
        response = self.do_get(courses_uri)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 3)

        # fetch mobile available courses for organization
        response = self.do_get("{}?mobile_available=false".format(courses_uri))
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 2)
        self.assertEqual(response.data[0]['mobile_available'], False)
        self.assertEqual(response.data[1]['mobile_available'], False)

        # fetch mobile available courses for organization
        response = self.do_get("{}?mobile_available=true".format(courses_uri))
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 1)
        self.assertEqual(response.data[0]['mobile_available'], True)
Пример #2
0
    def test_organizations_courses_get(self):
        organization = self.setup_test_organization()
        courses = CourseFactory.create_batch(2)
        users = UserFactory.create_batch(2)

        for course in courses:
            CourseOverview.get_from_id(course.id)

        for i, user in enumerate(users):
            user.organizations.add(organization['id'])
            CourseEnrollmentFactory.create(user=users[0],
                                           course_id=courses[i].id)

        test_uri = '{}{}/'.format(self.base_organizations_uri,
                                  organization['id'])
        courses_uri = '{}courses/'.format(test_uri)
        response = self.do_get(courses_uri)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 2)
        self.assertEqual(response.data[0]['id'], unicode(courses[0].id))
        self.assertEqual(len(response.data[0]['enrolled_users']), 1)
        self.assertEqual(response.data[1]['id'], unicode(courses[1].id))
        self.assertEqual(len(response.data[1]['enrolled_users']), 1)

        # test course uniqueness if multiple organization users are enrolled in same course
        CourseEnrollmentFactory.create(user=users[1], course_id=courses[0].id)
        response = self.do_get(courses_uri)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 2)
        self.assertEqual(response.data[0]['id'], unicode(courses[0].id))
        self.assertEqual(len(response.data[0]['enrolled_users']), 2)
        self.assertEqual(response.data[1]['id'], unicode(courses[1].id))
        self.assertEqual(len(response.data[1]['enrolled_users']), 1)
Пример #3
0
    def test_organizations_list_number_of_participants(self):
        """
        Test number_of_participants field in organization list
        """
        number_of_participants = 5
        users = UserFactory.create_batch(number_of_participants)
        courses = CourseFactory.create_batch(2)
        org = self.setup_test_organization()

        # get org list without any users/participants
        response = self.do_get(self.base_organizations_uri)
        self.assertEqual(response.data['results'][0]['number_of_participants'],
                         0)

        for user in users:
            user.organizations.add(org['id'])

        response = self.do_get(self.base_organizations_uri)
        self.assertEqual(response.data['results'][0]['number_of_participants'],
                         number_of_participants)

        # enroll users in both course to test distinct count
        for user in users:
            CourseEnrollmentFactory.create(user=user, course_id=courses[0].id)
            CourseEnrollmentFactory.create(user=user, course_id=courses[1].id)

        response = self.do_get(self.base_organizations_uri)
        self.assertEqual(response.data['results'][0]['number_of_participants'],
                         number_of_participants)
Пример #4
0
    def test_filter_courses_based_on_org(self):
        """
        Test course are filtered properly on current site organization.
        """
        edx_org_1 = OrganizationFactory()
        edx_org_2 = OrganizationFactory()
        courses_of_org_1 = CourseFactory.create_batch(2,
                                                      org=edx_org_1.short_name)
        CourseFactory.create(org=edx_org_2.short_name)

        assert len(modulestore().get_courses()) == 3

        EdlySubOrganizationFactory(edx_organization=edx_org_1,
                                   lms_site=self.request.site,
                                   studio_site=self.request.site)
        create_user_link_with_edly_sub_organization(self.request,
                                                    self.request.user)
        response = cookies_api.set_logged_in_edly_cookies(
            self.request, HttpResponse(), self.user,
            cookie_settings(self.request))
        self._copy_cookies_to_request(response, self.request)

        filtered_courses = filter_courses_based_on_org(self.request,
                                                       courses_of_org_1)
        assert len(filtered_courses) == 2

        edx_orgs_of_filterd_courses = [
            course.org for course in filtered_courses
        ]
        for org in edx_orgs_of_filterd_courses:
            assert org == edx_org_1.short_name
Пример #5
0
    def test_organizations_list_get(self):
        courses = CourseFactory.create_batch(5)
        users = UserFactory.create_batch(5)

        organizations = []
        for i in xrange(30):
            data = {
                'name': 'Test Organization {}'.format(i),
                'display_name': 'Test Name {}'.format(i),
                'contact_name': 'Test Contact {}'.format(i),
                'contact_email': 'test{}@test.com'.format(i),
                'contact_phone': '12313{}'.format(i),
            }
            organizations.append(self.setup_test_organization(org_data=data))

        for i, user in enumerate(users):
            user.organizations.add(organizations[0]['id'])
            CourseEnrollmentFactory.create(user=user, course_id=courses[i].id)

        # to test if number_of_courses has distinct course count
        CourseEnrollmentFactory.create(user=users[0], course_id=courses[1].id)

        test_uri = '{}'.format(self.base_organizations_uri)
        response = self.do_get(test_uri)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['count'], len(organizations))
        self.assertEqual(len(response.data['results']), 20)
        self.assertEqual(response.data['num_pages'], 2)
        for i, organization in enumerate(response.data['results']):
            uri = '{}{}{}/'.format(self.test_server_prefix,
                                   self.base_organizations_uri,
                                   organizations[i]['id'])
            self.assertEqual(organization['url'], uri)
            self.assertEqual(organization['id'], organizations[i]['id'])
            self.assertEqual(organization['name'], organizations[i]['name'])
            self.assertEqual(organization['display_name'],
                             organizations[i]['display_name'])
            self.assertEqual(organization['contact_name'],
                             organizations[i]['contact_name'])
            self.assertEqual(organization['contact_email'],
                             organizations[i]['contact_email'])
            self.assertEqual(organization['contact_phone'],
                             organizations[i]['contact_phone'])
            self.assertEqual(organization['logo_url'],
                             self.test_organization_logo_url)
            number_of_courses = 0 if i else 5
            self.assertEqual(organization['number_of_courses'],
                             number_of_courses)
            self.assertIsNotNone(organization['created'])
            self.assertIsNotNone(organization['modified'])

        # fetch organization data with page outside range
        response = self.do_get('{}?page=5'.format(test_uri))
        self.assertEqual(response.status_code, 404)

        # test with page_size 0, should not paginate and return all results
        response = self.do_get('{}?page_size=0'.format(test_uri))
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), len(organizations))
Пример #6
0
    def test_list(self):
        course_runs = CourseFactory.create_batch(3)
        response = self.client.get(self.list_url)
        assert response.status_code == 200

        # Order matters for the assertion
        course_runs = sorted(course_runs, key=lambda course_run: str(course_run.id))
        actual = sorted(response.data['results'], key=lambda course_run: course_run['id'])
        assert actual == CourseRunSerializer(course_runs, many=True, context=self.get_serializer_context()).data
Пример #7
0
    def test_organizations_courses_get_enrolled_users(self):
        organization = self.setup_test_organization()
        courses = CourseFactory.create_batch(2)
        users = UserFactory.create_batch(5)

        for course in courses:
            CourseOverview.get_from_id(course.id)

        for i, user in enumerate(users):
            CourseEnrollmentFactory.create(user=user,
                                           course_id=courses[i % 2].id)
            if i < 3:
                user.organizations.add(organization['id'])

        # test with all users enrolled but only 3 in organization
        test_uri = '{}{}/'.format(self.base_organizations_uri,
                                  organization['id'])
        courses_uri = '{}courses/'.format(test_uri)
        response = self.do_get(courses_uri)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 2)
        self.assertEqual(response.data[0]['id'], unicode(courses[0].id))
        self.assertEqual(len(response.data[0]['enrolled_users']), 2)
        self.assertEqual(response.data[0]['enrolled_users'][0], users[0].id)
        self.assertEqual(response.data[0]['enrolled_users'][1], users[2].id)
        self.assertEqual(response.data[1]['id'], unicode(courses[1].id))
        self.assertEqual(len(response.data[1]['enrolled_users']), 1)
        self.assertEqual(response.data[1]['enrolled_users'][0], users[1].id)

        # now add remaining 2 users to organization
        for user in users[3:]:
            user.organizations.add(organization['id'])

        response = self.do_get(courses_uri)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.data), 2)
        self.assertEqual(response.data[0]['id'], unicode(courses[0].id))
        self.assertEqual(len(response.data[0]['enrolled_users']), 3)
        self.assertEqual(response.data[0]['enrolled_users'][0], users[0].id)
        self.assertEqual(response.data[0]['enrolled_users'][1], users[2].id)
        self.assertEqual(response.data[0]['enrolled_users'][2], users[4].id)
        self.assertEqual(response.data[1]['id'], unicode(courses[1].id))
        self.assertEqual(len(response.data[1]['enrolled_users']), 2)
        self.assertEqual(response.data[1]['enrolled_users'][0], users[1].id)
        self.assertEqual(response.data[1]['enrolled_users'][1], users[3].id)
Пример #8
0
    def test_arguments_batching(self, start, count, expected_tabs_modified):
        courses = CourseFactory.create_batch(4)
        for course in courses:
            course.tabs = [
                tab for tab in course.tabs
                if tab.type in ('course_info', 'courseware')
            ]
            course = self.update_course(course, ModuleStoreEnum.UserID.test)
            assert len(course.tabs) == 2

        BackfillCourseTabsConfig.objects.create(enabled=True,
                                                start_index=start,
                                                count=count)
        call_command('backfill_course_tabs')

        for i, course in enumerate(courses):
            course = self.store.get_course(course.id)
            assert len(course.tabs) == (7 if expected_tabs_modified[i] else
                                        2), f'Wrong tabs for course index {i}'