Exemple #1
0
    def test_list_method_filter_method_user_ids(self, monkeypatch, enrollment_test_data):
        site = enrollment_test_data['site']
        users = enrollment_test_data['users']

        caller = self.make_caller(site, users)
        other_site = SiteFactory()
        assert site.domain != other_site.domain
        check_user = users[0]
        LearnerCourseGradeMetricsFactory(site=other_site)
        LearnerCourseGradeMetricsFactory(site=site)
        # Make sure we show only for our site for the selected user
        LearnerCourseGradeMetricsFactory(site=other_site, user=check_user)
        user_lcgm = [LearnerCourseGradeMetricsFactory(
            site=site, user=check_user) for i in range(3)]
        request_path = self.base_request_path + '?user_ids=' + str(check_user.id)
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=site,
                                     caller=caller,
                                     action='list')

        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check keys
        result_ids = [obj['id'] for obj in results]
        assert set(result_ids) == set([obj.id for obj in user_lcgm])
        # Spot check the first record
        obj = LearnerCourseGradeMetrics.objects.get(id=results[0]['id'])
        self.check_serialized_data(results[0], obj)
Exemple #2
0
    def test_completed_method(self, monkeypatch, enrollment_test_data):
        site = enrollment_test_data['site']
        users = enrollment_test_data['users']
        caller = self.make_caller(site, users)
        other_site = SiteFactory()
        assert site.domain != other_site.domain
        # Create an LCGM record for the other site
        LearnerCourseGradeMetricsFactory(site=other_site,
                                         sections_worked=1,
                                         sections_possible=1)
        # Create an LCGM record for our site that is not completed
        LearnerCourseGradeMetricsFactory(site=site,
                                         sections_worked=1,
                                         sections_possible=5)
        completed_lcgm = [LearnerCourseGradeMetricsFactory(site=site,
                                                           sections_worked=5,
                                                           sections_possible=5)
                          for i in range(3)]

        request_path = self.base_request_path + '/completed/'
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=site,
                                     caller=caller,
                                     action='completed')
        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check keys
        result_ids = [obj['id'] for obj in results]
        assert set(result_ids) == set([obj.id for obj in completed_lcgm])
        # Spot check the first record
        obj = LearnerCourseGradeMetrics.objects.get(id=results[0]['id'])
        self.check_serialized_data(results[0], obj)
    def test_course_param_multiple(self, monkeypatch, enrollment_test_data):
        """Test that the 'course' query parameter works

        """
        site = enrollment_test_data['site']
        users = enrollment_test_data['users']
        enrollments = enrollment_test_data['enrollments']
        course_overviews = enrollment_test_data['course_overviews']

        caller = self.make_caller(site, users)
        other_site = SiteFactory()
        assert site.domain != other_site.domain
        assert len(course_overviews) > 1
        query_params = '?course={}&course={}'.format(
            str(course_overviews[0].id), str(course_overviews[1].id))

        request_path = self.base_request_path + query_params
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=site,
                                     caller=caller,
                                     action='list')

        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check user ids
        result_ids = [obj['id'] for obj in results]
        expected_user_ids = [obj.user.id for obj in enrollments]
        assert set(result_ids) == set(expected_user_ids)
    def test_list_method_all(self, monkeypatch, enrollment_test_data):
        """Partial test coverage to check we get all site users

        Checks returned user ids against all user ids for the site
        Checks top level keys

        Does NOT check values in the `enrollments` key. This should be done as
        follow up work
        """
        site = enrollment_test_data['site']
        users = enrollment_test_data['users']

        caller = self.make_caller(site, users)
        other_site = SiteFactory()
        assert site.domain != other_site.domain

        response = self.make_request(request_path=self.base_request_path,
                                     monkeypatch=monkeypatch,
                                     site=site,
                                     caller=caller,
                                     action='list')

        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check user ids
        result_ids = [obj['id'] for obj in results]
        user_ids = get_user_ids_for_site(site=site)
        assert set(result_ids) == set(user_ids)
        # Spot check the first record
        top_keys = [
            'id', 'username', 'email', 'fullname', 'is_active', 'date_joined',
            'enrollments'
        ]
        assert set(results[0].keys()) == set(top_keys)
Exemple #5
0
    def test_no_paginate(self, monkeypatch, enrollment_test_data, action):

        site = enrollment_test_data['site']
        users = enrollment_test_data['users']
        caller = self.make_caller(site, users)
        request_path = '{}/{}/'.format(self.base_request_path, action)
        monkeypatch.setattr(EnrollmentMetricsViewSet, 'paginate_queryset',
                            lambda self, qs: None)
        with mock.patch.object(self.view_class, 'get_paginated_response') as paginate_check:
            response = self.make_request(request_path=request_path,
                                         monkeypatch=monkeypatch,
                                         site=site,
                                         caller=caller,
                                         action=action)
            assert response.status_code == status.HTTP_200_OK
            assert not is_response_paginated(response.data)
            assert not paginate_check.called
Exemple #6
0
    def test_completed_ids_method(self, monkeypatch, enrollment_test_data):
        site = enrollment_test_data['site']
        users = enrollment_test_data['users']
        caller = self.make_caller(site, users)
        other_site = SiteFactory()
        assert site.domain != other_site.domain
        LearnerCourseGradeMetricsFactory(site=other_site,
                                         sections_worked=1,
                                         sections_possible=1)
        # Create an incomplete LCGM rec for our site
        LearnerCourseGradeMetricsFactory(site=site,
                                         sections_worked=1,
                                         sections_possible=5)
        completed_lcgm = [
            LearnerCourseGradeMetricsFactory(site=site,
                                             sections_worked=5,
                                             sections_possible=5)
            for i in range(3)
        ]

        request_path = self.base_request_path + '/completed_ids/'
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=site,
                                     caller=caller,
                                     action='completed_ids')
        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check that the results have our expected keys and only our expected keys
        res_keys_list = [elem.keys() for elem in results]
        results_key_set = set(
            [item for sublist in res_keys_list for item in sublist])
        assert results_key_set == set(['course_id', 'user_id'])

        # Check that we have the data we're looking for
        results_values = [elem.values() for elem in results]
        expected_values = [[obj.course_id, obj.user_id]
                           for obj in completed_lcgm]
        assert set(map(tuple,
                       results_values)) == set(map(tuple, expected_values))
Exemple #7
0
    def test_list_method_all(self, monkeypatch, lm_test_data):
        """Partial test coverage to check we get all site users

        Checks returned user ids against all user ids for the site
        Checks top level keys

        Does NOT check values in the `enrollments` key. This should be done as
        follow up work
        """
        us = lm_test_data['us']
        them = lm_test_data['them']
        our_courses = us['courses']
        caller = make_caller(us['org'])
        assert us['site'].domain != them['site'].domain
        assert len(our_courses) > 1

        response = self.make_request(request_path=self.base_request_path,
                                     monkeypatch=monkeypatch,
                                     site=us['site'],
                                     caller=caller,
                                     action='list')

        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check users
        result_ids = [obj['id'] for obj in results]
        # Get all enrolled users
        course_keys = get_course_keys_for_site(site=us['site'])
        users = users_enrolled_in_courses(course_keys)
        user_ids = [user.id for user in users]
        assert set(result_ids) == set(user_ids)
        # Spot check the first record
        top_keys = [
            'id', 'username', 'email', 'fullname', 'is_active', 'date_joined',
            'enrollments'
        ]
        assert set(results[0].keys()) == set(top_keys)
Exemple #8
0
    def test_distinct_user(self, monkeypatch, lm_test_data, query_param,
                           field_name):
        """

        Test data setup:
        We need to have a user enrolled in multiple courses

        We expect to have just one user record returned with each of the
        courses for which the user is enrolled
        """
        # Set up data
        us = lm_test_data['us']
        our_enrollments = us['enrollments']
        caller = make_caller(us['org'])
        our_site_users = lm_test_data['us']['users']
        our_user = our_site_users[-1]
        user_ce = [
            rec for rec in our_enrollments if rec.user_id == our_user.id
        ]
        query_val = getattr(our_user, field_name)
        query_str = '?{}={}'.format(query_param, query_val)

        # Run test
        request_path = self.base_request_path + query_str
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=us['site'],
                                     caller=caller,
                                     action='list')
        # Check results
        # Continue updating here
        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        found_ce_ids = set([rec['id'] for rec in results[0]['enrollments']])
        assert len(results) == 1
        assert results[0]['id'] == our_user.id
        assert found_ce_ids == set([rec.id for rec in user_ce])
Exemple #9
0
    def test_course_param_multiple(self, monkeypatch, lm_test_data):
        """Test that the 'course' query parameter works

        """
        us = lm_test_data['us']
        them = lm_test_data['them']
        our_enrollments = us['enrollments']
        our_courses = us['courses']
        caller = make_caller(us['org'])
        assert us['site'].domain != them['site'].domain
        assert len(our_courses) > 1

        filtered_courses = our_courses[:2]

        # TODO: build params from 'filtered_courses'
        query_params = '?course={}&course={}'.format(str(our_courses[0].id),
                                                     str(our_courses[1].id))

        request_path = self.base_request_path + query_params
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=us['site'],
                                     caller=caller,
                                     action='list')

        # Continue updating here
        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check user ids
        result_ids = [obj['id'] for obj in results]
        expected_enrollments = filter_enrollments(enrollments=our_enrollments,
                                                  courses=filtered_courses)
        expected_user_ids = [obj.user.id for obj in expected_enrollments]
        assert set(result_ids) == set(expected_user_ids)
        for rec in results:
            assert self.matching_enrollment_set_to_course_ids(
                rec['enrollments'], [rec.id for rec in filtered_courses])
Exemple #10
0
    def test_course_param_single(self, monkeypatch, lm_test_data):
        """Test that the 'course' query parameter works

        """
        us = lm_test_data['us']
        them = lm_test_data['them']
        our_enrollments = us['enrollments']
        our_courses = us['courses']

        caller = make_caller(us['org'])
        assert us['site'].domain != them['site'].domain
        assert len(our_courses) > 1
        query_params = '?course={}'.format(str(our_courses[0].id))

        request_path = self.base_request_path + query_params
        response = self.make_request(request_path=request_path,
                                     monkeypatch=monkeypatch,
                                     site=us['site'],
                                     caller=caller,
                                     action='list')

        assert response.status_code == status.HTTP_200_OK
        assert is_response_paginated(response.data)
        results = response.data['results']
        # Check user ids
        result_ids = [obj['id'] for obj in results]

        course_enrollments = [
            elem for elem in our_enrollments
            if elem.course_id == our_courses[0].id
        ]
        expected_user_ids = [obj.user.id for obj in course_enrollments]
        assert set(result_ids) == set(expected_user_ids)

        for rec in results:
            assert self.matching_enrollment_set_to_course_ids(
                rec['enrollments'], [our_courses[0].id])