Ejemplo n.º 1
0
    def test_list_query(self):
        """ Verify the endpoint returns a filtered list of courses. """
        # Create courses that should NOT match our query
        CourseFactory.create_batch(3)

        # Create courses that SHOULD match our query
        name = 'query test'
        courses = [CourseFactory(name=name), CourseFactory(name=name)]
        courses.sort(key=lambda course: course.id.lower())
        self.refresh_index()

        query = {
            "query": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "course.name.lowercase_sort": name
                            }
                        }
                    ]
                }
            }
        }
        qs = urllib.parse.urlencode({'q': json.dumps(query)})
        url = '{}?{}'.format(reverse('api:v1:course-list'), qs)

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['count'], len(courses))
        self.assertListEqual(response.data['results'], self.serialize_course(courses, many=True))
Ejemplo n.º 2
0
    def test_search(self):
        """ Verify the method returns query results from the data store. """
        prefix = 'test'
        query = {
            'query': {
                'bool': {
                    'must': [
                        {
                            'wildcard': {
                                'course.name': prefix + '*'
                            }
                        }
                    ]
                }
            }
        }
        courses = []
        for i in range(3):
            courses.append(CourseFactory.create(name=prefix + str(i)))
            CourseFactory.create()

        courses.sort(key=lambda course: course.id.lower())
        self.refresh_index()

        expected = {
            'limit': 10,
            'offset': 0,
            'total': len(courses),
            'results': courses,
        }
        self.assertEqual(Course.search(query), expected)
Ejemplo n.º 3
0
    def test_list_query(self):
        """ Verify the endpoint returns a filtered list of courses. """
        # Create courses that should NOT match our query
        CourseFactory.create_batch(3)

        # Create courses that SHOULD match our query
        name = 'query test'
        courses = [CourseFactory(name=name), CourseFactory(name=name)]
        courses.sort(key=lambda course: course.id.lower())
        self.refresh_index()

        query = {
            "query": {
                "bool": {
                    "must": [{
                        "term": {
                            "course.name.lowercase_sort": name
                        }
                    }]
                }
            }
        }
        qs = urllib.parse.urlencode({'q': json.dumps(query)})
        url = '{}?{}'.format(reverse('api:v1:course-list'), qs)

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['count'], len(courses))
        self.assertListEqual(response.data['results'],
                             self.serialize_course(courses, many=True))
Ejemplo n.º 4
0
    def test_search(self):
        """ Verify the method returns query results from the data store. """
        prefix = 'test'
        query = {
            'query': {
                'bool': {
                    'must': [{
                        'wildcard': {
                            'course.name': prefix + '*'
                        }
                    }]
                }
            }
        }
        courses = []
        for i in range(3):
            courses.append(CourseFactory.create(name=prefix + str(i)))
            CourseFactory.create()

        courses.sort(key=lambda course: course.id.lower())
        self.refresh_index()

        expected = {
            'limit': 10,
            'offset': 0,
            'total': len(courses),
            'results': courses,
        }
        self.assertEqual(Course.search(query), expected)
Ejemplo n.º 5
0
    def test_all_with_limit_and_offset(self):
        """ Verify the method supports limit-offset pagination. """
        limit = 1
        courses = [CourseFactory(id='1'), CourseFactory(id='2')]
        self.refresh_index()

        for offset, course in enumerate(courses):
            expected = {
                'limit': limit,
                'offset': offset,
                'total': len(courses),
                'results': [course],
            }
            self.assertDictEqual(Course.all(limit=limit, offset=offset),
                                 expected)
Ejemplo n.º 6
0
 def test_retrieve(self):
     """ Verify the endpoint returns a single course. """
     course = CourseFactory()
     url = reverse('api:v1:course-detail', kwargs={'id': course.id})
     response = self.client.get(url)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.serialize_course(course))
Ejemplo n.º 7
0
    def test_data(self):
        course = CourseFactory()
        path = reverse('api:v1:course-detail', kwargs={'id': course.id})
        request = RequestFactory().get(path)
        serializer = CourseSerializer(course, context={'request': request})

        expected = {
            'id': course.id,
            'name': course.name,
            'url': request.build_absolute_uri(),
        }
        self.assertDictEqual(serializer.data, expected)
Ejemplo n.º 8
0
    def test_eq(self):
        """ Verify the __eq__ method returns True if two Course objects have the same `id`. """
        course = CourseFactory()

        # Both objects must be of type Course
        self.assertNotEqual(course, 1)

        # A Course should be equal to itself
        self.assertEqual(course, course)

        # Two Courses are equal if their id attributes match
        self.assertEqual(course, Course(id=course.id, body=course.body))
Ejemplo n.º 9
0
    def test_list(self, format):
        """ Verify the endpoint returns a list of all courses. """
        courses = CourseFactory.create_batch(10)
        courses.sort(key=lambda course: course.id.lower())
        url = reverse('api:v1:course-list')
        limit = 3
        self.refresh_index()

        response = self.client.get(url, {'format': format, 'limit': limit})
        self.assertEqual(response.status_code, 200)
        self.assertListEqual(response.data['results'], self.serialize_course(courses[:limit], many=True, format=format))

        response.render()
Ejemplo n.º 10
0
    def test_list(self, format):
        """ Verify the endpoint returns a list of all courses. """
        courses = CourseFactory.create_batch(10)
        courses.sort(key=lambda course: course.id.lower())
        url = reverse('api:v1:course-list')
        limit = 3
        self.refresh_index()

        response = self.client.get(url, {'format': format, 'limit': limit})
        self.assertEqual(response.status_code, 200)
        self.assertListEqual(
            response.data['results'],
            self.serialize_course(courses[:limit], many=True, format=format))

        response.render()
Ejemplo n.º 11
0
 def setUp(self):
     super(CatalogTests, self).setUp()
     query = {
         'query': {
             'bool': {
                 'must': [{
                     'wildcard': {
                         'course.name': 'abc*'
                     }
                 }]
             }
         }
     }
     self.catalog = factories.CatalogFactory(query=json.dumps(query))
     self.course = CourseFactory(id='a/b/c', name='ABCs of Ͳҽʂէìղց')
     self.refresh_index()
Ejemplo n.º 12
0
 def setUp(self):
     super(CatalogViewSetTests, self).setUp()
     self.user = UserFactory(is_staff=True, is_superuser=True)
     self.client.login(username=self.user.username, password=USER_PASSWORD)
     query = {
         'query': {
             'bool': {
                 'must': [{
                     'wildcard': {
                         'course.name': 'abc*'
                     }
                 }]
             }
         }
     }
     self.catalog = CatalogFactory(query=json.dumps(query))
     self.course = CourseFactory(id='a/b/c', name='ABC Test Course')
     self.refresh_index()
Ejemplo n.º 13
0
 def test_get(self):
     """ Verify the method returns a single course. """
     course = CourseFactory()
     retrieved = Course.get(course.id)
     self.assertEqual(course, retrieved)
Ejemplo n.º 14
0
 def test_str(self):
     """ Verify the __str__ method returns a string representation of the Course. """
     course = CourseFactory()
     expected = 'Course {id}: {name}'.format(id=course.id, name=course.name)
     self.assertEqual(str(course), expected)