Commit 237ef00a by Mushtaq Ali Committed by muhammad-ammar

edxnotes stub server to support multiple usage id search - TNL-5605

parent 753d7821
......@@ -243,8 +243,9 @@ class StubEdxNotesServiceHandler(StubHttpRequestHandler):
"""
Search for a notes by user id, course_id and usage_id.
"""
search_with_usage_id = False
user = self.get_params.get("user", None)
usage_id = self.get_params.get("usage_id", None)
usage_ids = self.get_params.get("usage_id", [])
course_id = self.get_params.get("course_id", None)
text = self.get_params.get("text", None)
page = int(self.get_params.get("page", 1))
......@@ -257,11 +258,14 @@ class StubEdxNotesServiceHandler(StubHttpRequestHandler):
notes = self.server.get_all_notes()
if course_id is not None:
notes = self.server.filter_by_course_id(notes, course_id)
if usage_id is not None:
notes = self.server.filter_by_usage_id(notes, usage_id)
if len(usage_ids) > 0:
search_with_usage_id = True
notes = self.server.filter_by_usage_id(notes, usage_ids)
if text:
notes = self.server.search(notes, text)
self.respond(content=self._get_paginated_response(notes, page, page_size))
if not search_with_usage_id:
notes = self._get_paginated_response(notes, page, page_size)
self.respond(content=notes)
def _collection(self):
"""
......@@ -356,11 +360,13 @@ class StubEdxNotesService(StubHttpService):
"""
return self.filter_by(data, "user", user)
def filter_by_usage_id(self, data, usage_id):
def filter_by_usage_id(self, data, usage_ids):
"""
Filters provided `data(list)` by the `usage_id(str)`.
"""
return self.filter_by(data, "usage_id", usage_id)
if not isinstance(usage_ids, list):
usage_ids = [usage_ids]
return self.filter_by_list(data, "usage_id", usage_ids)
def filter_by_course_id(self, data, course_id):
"""
......@@ -374,6 +380,12 @@ class StubEdxNotesService(StubHttpService):
"""
return [note for note in data if note.get(field_name) == value]
def filter_by_list(self, data, field_name, values):
"""
Filters provided `data(list)` by the `field_name(str)` in values.
"""
return [note for note in data if note.get(field_name) in values]
def search(self, data, query):
"""
Search the `query(str)` text in the provided `data(list)`.
......
"""
Unit tests for stub EdxNotes implementation.
"""
import ddt
import urlparse
import json
import unittest
......@@ -9,6 +10,7 @@ from uuid import uuid4
from ..edxnotes import StubEdxNotesService
@ddt.ddt
class StubEdxNotesServiceTest(unittest.TestCase):
"""
Test cases for the stub EdxNotes service.
......@@ -27,9 +29,9 @@ class StubEdxNotesServiceTest(unittest.TestCase):
"""
Returns a list of dummy notes.
"""
return [self._get_dummy_note() for i in xrange(count)] # pylint: disable=unused-variable
return [self._get_dummy_note(i) for i in xrange(count)] # pylint: disable=unused-variable
def _get_dummy_note(self):
def _get_dummy_note(self, uid=0):
"""
Returns a single dummy note.
"""
......@@ -39,7 +41,7 @@ class StubEdxNotesServiceTest(unittest.TestCase):
"created": "2014-10-31T10:05:00.000000",
"updated": "2014-10-31T10:50:00.101010",
"user": "dummy-user-id",
"usage_id": "dummy-usage-id",
"usage_id": "dummy-usage-id-" + str(uid),
"course_id": "dummy-course-id",
"text": "dummy note text " + nid,
"quote": "dummy note quote",
......@@ -106,7 +108,6 @@ class StubEdxNotesServiceTest(unittest.TestCase):
# get response with default page and page size
response = requests.get(self._get_url("api/v1/search"), params={
"user": "dummy-user-id",
"usage_id": "dummy-usage-id",
"course_id": "dummy-course-id",
})
......@@ -125,7 +126,6 @@ class StubEdxNotesServiceTest(unittest.TestCase):
# search notes with text that don't exist
response = requests.get(self._get_url("api/v1/search"), params={
"user": "dummy-user-id",
"usage_id": "dummy-usage-id",
"course_id": "dummy-course-id",
"text": "world war 2"
})
......@@ -142,6 +142,28 @@ class StubEdxNotesServiceTest(unittest.TestCase):
previous_page=None
)
@ddt.data(
'?usage_id=dummy-usage-id-0',
'?usage_id=dummy-usage-id-0&usage_id=dummy-usage-id-1&dummy-usage-id-2&dummy-usage-id-3&dummy-usage-id-4'
)
def test_search_usage_ids(self, usage_ids):
"""
Test search with usage ids.
"""
url = self._get_url('api/v1/search') + usage_ids
response = requests.get(url, params={
'user': 'dummy-user-id',
'course_id': 'dummy-course-id'
})
self.assertTrue(response.ok)
response = response.json()
parsed = urlparse.urlparse(url)
query_params = urlparse.parse_qs(parsed.query)
query_params['usage_id'].reverse()
self.assertEqual(len(response), len(query_params['usage_id']))
for index, usage_id in enumerate(query_params['usage_id']):
self.assertEqual(response[index]['usage_id'], usage_id)
def test_delete(self):
notes = self._get_notes()
response = requests.delete(self._get_url("api/v1/annotations/does_not_exist"))
......
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