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))
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)
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))
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)
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)
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))
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)
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))
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()
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()
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()
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()
def test_get(self): """ Verify the method returns a single course. """ course = CourseFactory() retrieved = Course.get(course.id) self.assertEqual(course, retrieved)
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)