Commit 73aceb5d by Ehtesham

[MA-1862] updating api tests

parent e9622f0d
...@@ -39,6 +39,7 @@ from discussion_api.tests.utils import ( ...@@ -39,6 +39,7 @@ from discussion_api.tests.utils import (
CommentsServiceMockMixin, CommentsServiceMockMixin,
make_minimal_cs_comment, make_minimal_cs_comment,
make_minimal_cs_thread, make_minimal_cs_thread,
make_paginated_api_response
) )
from django_comment_common.models import ( from django_comment_common.models import (
FORUM_ROLE_ADMINISTRATOR, FORUM_ROLE_ADMINISTRATOR,
...@@ -538,11 +539,15 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -538,11 +539,15 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
def test_empty(self): def test_empty(self):
self.assertEqual( self.assertEqual(
self.get_thread_list([]), self.get_thread_list([], num_pages=0).data,
{ {
"results": [], "pagination": {
"next": None, "next": None,
"previous": None, "previous": None,
"num_pages": 0,
"count": 0
},
"results": [],
"text_search_rewrite": None, "text_search_rewrite": None,
} }
) )
...@@ -688,14 +693,14 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -688,14 +693,14 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
"read": False, "read": False,
}, },
] ]
expected_result = make_paginated_api_response(
expected_threads, 0, 1, None, None
)
expected_result.update({"text_search_rewrite": None})
self.assertEqual( self.assertEqual(
self.get_thread_list(source_threads), self.get_thread_list(source_threads).data,
{ expected_result
"results": expected_threads,
"next": None,
"previous": None,
"text_search_rewrite": None,
}
) )
@ddt.data( @ddt.data(
...@@ -723,32 +728,29 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -723,32 +728,29 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
def test_pagination(self): def test_pagination(self):
# N.B. Empty thread list is not realistic but convenient for this test # N.B. Empty thread list is not realistic but convenient for this test
expected_result = make_paginated_api_response([], 0, 3, "http://testserver/test_path?page=2", None)
expected_result.update({"text_search_rewrite": None})
self.assertEqual( self.assertEqual(
self.get_thread_list([], page=1, num_pages=3), self.get_thread_list([], page=1, num_pages=3).data,
{ expected_result
"results": [],
"next": "http://testserver/test_path?page=2",
"previous": None,
"text_search_rewrite": None,
}
) )
expected_result = make_paginated_api_response(
[], 0, 3, "http://testserver/test_path?page=3", "http://testserver/test_path?page=1"
)
expected_result.update({"text_search_rewrite": None})
self.assertEqual( self.assertEqual(
self.get_thread_list([], page=2, num_pages=3), self.get_thread_list([], page=2, num_pages=3).data,
{ expected_result
"results": [],
"next": "http://testserver/test_path?page=3",
"previous": "http://testserver/test_path?page=1",
"text_search_rewrite": None,
}
) )
expected_result = make_paginated_api_response(
[], 0, 3, None, "http://testserver/test_path?page=2"
)
expected_result.update({"text_search_rewrite": None})
self.assertEqual( self.assertEqual(
self.get_thread_list([], page=3, num_pages=3), self.get_thread_list([], page=3, num_pages=3).data,
{ expected_result
"results": [],
"next": None,
"previous": "http://testserver/test_path?page=2",
"text_search_rewrite": None,
}
) )
# Test page past the last one # Test page past the last one
...@@ -758,7 +760,11 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -758,7 +760,11 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
@ddt.data(None, "rewritten search string") @ddt.data(None, "rewritten search string")
def test_text_search(self, text_search_rewrite): def test_text_search(self, text_search_rewrite):
self.register_get_threads_search_response([], text_search_rewrite) expected_result = make_paginated_api_response(
[], 0, 0, None, None
)
expected_result.update({"text_search_rewrite": text_search_rewrite})
self.register_get_threads_search_response([], text_search_rewrite, num_pages=0)
self.assertEqual( self.assertEqual(
get_thread_list( get_thread_list(
self.request, self.request,
...@@ -766,13 +772,8 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -766,13 +772,8 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
page=1, page=1,
page_size=10, page_size=10,
text_search="test search string" text_search="test search string"
), ).data,
{ expected_result
"results": [],
"next": None,
"previous": None,
"text_search_rewrite": text_search_rewrite,
}
) )
self.assert_last_query_params({ self.assert_last_query_params({
"user_id": [unicode(self.user.id)], "user_id": [unicode(self.user.id)],
...@@ -786,17 +787,20 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -786,17 +787,20 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
}) })
def test_following(self): def test_following(self):
self.register_subscribed_threads_response(self.user, [], page=1, num_pages=1) self.register_subscribed_threads_response(self.user, [], page=1, num_pages=0)
result = get_thread_list( result = get_thread_list(
self.request, self.request,
self.course.id, self.course.id,
page=1, page=1,
page_size=11, page_size=11,
following=True, following=True,
) ).data
expected_result = make_paginated_api_response([], 0, 0, None, None)
expected_result.update({"text_search_rewrite": None})
self.assertEqual( self.assertEqual(
result, result,
{"results": [], "next": None, "previous": None, "text_search_rewrite": None} expected_result
) )
self.assertEqual( self.assertEqual(
urlparse(httpretty.last_request().path).path, urlparse(httpretty.last_request().path).path,
...@@ -813,17 +817,22 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -813,17 +817,22 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
@ddt.data("unanswered", "unread") @ddt.data("unanswered", "unread")
def test_view_query(self, query): def test_view_query(self, query):
self.register_get_threads_response([], page=1, num_pages=1) self.register_get_threads_response([], page=1, num_pages=0)
result = get_thread_list( result = get_thread_list(
self.request, self.request,
self.course.id, self.course.id,
page=1, page=1,
page_size=11, page_size=11,
view=query, view=query,
).data
expected_result = make_paginated_api_response(
[], 0, 0, None, None
) )
expected_result.update({"text_search_rewrite": None})
self.assertEqual( self.assertEqual(
result, result,
{"results": [], "next": None, "previous": None, "text_search_rewrite": None} expected_result
) )
self.assertEqual( self.assertEqual(
urlparse(httpretty.last_request().path).path, urlparse(httpretty.last_request().path).path,
...@@ -854,18 +863,18 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -854,18 +863,18 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
http_query (str): Query string sent in the http request http_query (str): Query string sent in the http request
cc_query (str): Query string used for the comments client service cc_query (str): Query string used for the comments client service
""" """
self.register_get_threads_response([], page=1, num_pages=1) self.register_get_threads_response([], page=1, num_pages=0)
result = get_thread_list( result = get_thread_list(
self.request, self.request,
self.course.id, self.course.id,
page=1, page=1,
page_size=11, page_size=11,
order_by=http_query, order_by=http_query,
) ).data
self.assertEqual(
result, expected_result = make_paginated_api_response([], 0, 0, None, None)
{"results": [], "next": None, "previous": None, "text_search_rewrite": None} expected_result.update({"text_search_rewrite": None})
) self.assertEqual(result, expected_result)
self.assertEqual( self.assertEqual(
urlparse(httpretty.last_request().path).path, urlparse(httpretty.last_request().path).path,
"/api/v1/threads" "/api/v1/threads"
...@@ -882,18 +891,18 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto ...@@ -882,18 +891,18 @@ class GetThreadListTest(CommentsServiceMockMixin, UrlResetMixin, SharedModuleSto
@ddt.data("asc", "desc") @ddt.data("asc", "desc")
def test_order_direction_query(self, http_query): def test_order_direction_query(self, http_query):
self.register_get_threads_response([], page=1, num_pages=1) self.register_get_threads_response([], page=1, num_pages=0)
result = get_thread_list( result = get_thread_list(
self.request, self.request,
self.course.id, self.course.id,
page=1, page=1,
page_size=11, page_size=11,
order_direction=http_query, order_direction=http_query,
) ).data
self.assertEqual(
result, expected_result = make_paginated_api_response([], 0, 0, None, None)
{"results": [], "next": None, "previous": None, "text_search_rewrite": None} expected_result.update({"text_search_rewrite": None})
) self.assertEqual(result, expected_result)
self.assertEqual( self.assertEqual(
urlparse(httpretty.last_request().path).path, urlparse(httpretty.last_request().path).path,
"/api/v1/threads" "/api/v1/threads"
...@@ -1055,8 +1064,8 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1055,8 +1064,8 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
{"thread_type": "discussion", "children": [], "resp_total": 0} {"thread_type": "discussion", "children": [], "resp_total": 0}
) )
self.assertEqual( self.assertEqual(
self.get_comment_list(discussion_thread), self.get_comment_list(discussion_thread).data,
{"results": [], "next": None, "previous": None} make_paginated_api_response([], 0, 1, None, None)
) )
question_thread = self.make_minimal_cs_thread({ question_thread = self.make_minimal_cs_thread({
...@@ -1066,12 +1075,12 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1066,12 +1075,12 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
"non_endorsed_resp_total": 0 "non_endorsed_resp_total": 0
}) })
self.assertEqual( self.assertEqual(
self.get_comment_list(question_thread, endorsed=False), self.get_comment_list(question_thread, endorsed=False).data,
{"results": [], "next": None, "previous": None} make_paginated_api_response([], 0, 1, None, None)
) )
self.assertEqual( self.assertEqual(
self.get_comment_list(question_thread, endorsed=True), self.get_comment_list(question_thread, endorsed=True).data,
{"results": [], "next": None, "previous": None} make_paginated_api_response([], 0, 1, None, None)
) )
def test_basic_query_params(self): def test_basic_query_params(self):
...@@ -1173,7 +1182,7 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1173,7 +1182,7 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
] ]
actual_comments = self.get_comment_list( actual_comments = self.get_comment_list(
self.make_minimal_cs_thread({"children": source_comments}) self.make_minimal_cs_thread({"children": source_comments})
)["results"] ).data["results"]
self.assertEqual(actual_comments, expected_comments) self.assertEqual(actual_comments, expected_comments)
def test_question_content(self): def test_question_content(self):
...@@ -1184,10 +1193,10 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1184,10 +1193,10 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
"non_endorsed_resp_total": 1, "non_endorsed_resp_total": 1,
}) })
endorsed_actual = self.get_comment_list(thread, endorsed=True) endorsed_actual = self.get_comment_list(thread, endorsed=True).data
self.assertEqual(endorsed_actual["results"][0]["id"], "endorsed_comment") self.assertEqual(endorsed_actual["results"][0]["id"], "endorsed_comment")
non_endorsed_actual = self.get_comment_list(thread, endorsed=False) non_endorsed_actual = self.get_comment_list(thread, endorsed=False).data
self.assertEqual(non_endorsed_actual["results"][0]["id"], "non_endorsed_comment") self.assertEqual(non_endorsed_actual["results"][0]["id"], "non_endorsed_comment")
def test_endorsed_by_anonymity(self): def test_endorsed_by_anonymity(self):
...@@ -1203,7 +1212,7 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1203,7 +1212,7 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
}) })
] ]
}) })
actual_comments = self.get_comment_list(thread)["results"] actual_comments = self.get_comment_list(thread).data["results"]
self.assertIsNone(actual_comments[0]["endorsed_by"]) self.assertIsNone(actual_comments[0]["endorsed_by"])
@ddt.data( @ddt.data(
...@@ -1231,24 +1240,24 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1231,24 +1240,24 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
}) })
# Only page # Only page
actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=1, page_size=5) actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=1, page_size=5).data
self.assertIsNone(actual["next"]) self.assertIsNone(actual["pagination"]["next"])
self.assertIsNone(actual["previous"]) self.assertIsNone(actual["pagination"]["previous"])
# First page of many # First page of many
actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=1, page_size=2) actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=1, page_size=2).data
self.assertEqual(actual["next"], "http://testserver/test_path?page=2") self.assertEqual(actual["pagination"]["next"], "http://testserver/test_path?page=2")
self.assertIsNone(actual["previous"]) self.assertIsNone(actual["pagination"]["previous"])
# Middle page of many # Middle page of many
actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=2, page_size=2) actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=2, page_size=2).data
self.assertEqual(actual["next"], "http://testserver/test_path?page=3") self.assertEqual(actual["pagination"]["next"], "http://testserver/test_path?page=3")
self.assertEqual(actual["previous"], "http://testserver/test_path?page=1") self.assertEqual(actual["pagination"]["previous"], "http://testserver/test_path?page=1")
# Last page of many # Last page of many
actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=3, page_size=2) actual = self.get_comment_list(thread, endorsed=endorsed_arg, page=3, page_size=2).data
self.assertIsNone(actual["next"]) self.assertIsNone(actual["pagination"]["next"])
self.assertEqual(actual["previous"], "http://testserver/test_path?page=2") self.assertEqual(actual["pagination"]["previous"], "http://testserver/test_path?page=2")
# Page past the end # Page past the end
thread = self.make_minimal_cs_thread({ thread = self.make_minimal_cs_thread({
...@@ -1272,18 +1281,18 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase): ...@@ -1272,18 +1281,18 @@ class GetCommentListTest(CommentsServiceMockMixin, SharedModuleStoreTestCase):
Check that requesting the given page/page_size returns the expected Check that requesting the given page/page_size returns the expected
output output
""" """
actual = self.get_comment_list(thread, endorsed=True, page=page, page_size=page_size) actual = self.get_comment_list(thread, endorsed=True, page=page, page_size=page_size).data
result_ids = [result["id"] for result in actual["results"]] result_ids = [result["id"] for result in actual["results"]]
self.assertEqual( self.assertEqual(
result_ids, result_ids,
["comment_{}".format(i) for i in range(expected_start, expected_stop)] ["comment_{}".format(i) for i in range(expected_start, expected_stop)]
) )
self.assertEqual( self.assertEqual(
actual["next"], actual["pagination"]["next"],
"http://testserver/test_path?page={}".format(expected_next) if expected_next else None "http://testserver/test_path?page={}".format(expected_next) if expected_next else None
) )
self.assertEqual( self.assertEqual(
actual["previous"], actual["pagination"]["previous"],
"http://testserver/test_path?page={}".format(expected_prev) if expected_prev else None "http://testserver/test_path?page={}".format(expected_prev) if expected_prev else None
) )
......
...@@ -71,7 +71,7 @@ class CommentsServiceMockMixin(object): ...@@ -71,7 +71,7 @@ class CommentsServiceMockMixin(object):
status=200 status=200
) )
def register_get_threads_search_response(self, threads, rewrite): def register_get_threads_search_response(self, threads, rewrite, num_pages=1):
"""Register a mock response for GET on the CS thread search endpoint""" """Register a mock response for GET on the CS thread search endpoint"""
httpretty.register_uri( httpretty.register_uri(
httpretty.GET, httpretty.GET,
...@@ -79,7 +79,7 @@ class CommentsServiceMockMixin(object): ...@@ -79,7 +79,7 @@ class CommentsServiceMockMixin(object):
body=json.dumps({ body=json.dumps({
"collection": threads, "collection": threads,
"page": 1, "page": 1,
"num_pages": 1, "num_pages": num_pages,
"corrected_text": rewrite, "corrected_text": rewrite,
}), }),
status=200 status=200
...@@ -371,3 +371,18 @@ def make_minimal_cs_comment(overrides=None): ...@@ -371,3 +371,18 @@ def make_minimal_cs_comment(overrides=None):
} }
ret.update(overrides or {}) ret.update(overrides or {})
return ret return ret
def make_paginated_api_response(results, count, num_pages, next, previous):
"""
Generates the response dictionary of paginated APIs with passed data
"""
return {
"pagination": {
"next": next,
"previous": previous,
"count": count,
"num_pages": num_pages,
},
"results": results
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment