def test_empty_search_string(self): """ test when search string is provided as empty or null (None) """ code, results = post_request({"search_string": ""}) self.assertGreater(code, 499) self.assertEqual(results["error"], "No search term provided for search") code, results = post_request({"no_search_string_provided": ""}) self.assertGreater(code, 499) self.assertEqual(results["error"], "No search term provided for search")
def test_malformed_query_handling(self): # root code, results = post_request({"search_string": "\"missing quote"}) self.assertGreater(code, 499) self.assertEqual(results["error"], 'Your query seems malformed. Check for unmatched quotes.') # course ID code, results = post_request({"search_string": "\"missing quote"}, "ABC/DEF/GHI") self.assertGreater(code, 499) self.assertEqual(results["error"], 'Your query seems malformed. Check for unmatched quotes.') # course discovery code, results = post_discovery_request({"search_string": "\"missing quote"}) self.assertGreater(code, 499) self.assertEqual(results["error"], 'Your query seems malformed. Check for unmatched quotes.')
def test_search_from_url(self): """ ensure that we get the error back when the backend fails """ searcher = SearchEngine.get_search_engine(TEST_INDEX_NAME) searcher.index( "courseware_content", [ { "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) searcher.index( "courseware_content", [ { "id": "FAKE_ID_2", "content": { "text": "Little Darling, it's been a year since sun been gone" } } ] ) searcher.index("test_doc", [{"id": "FAKE_ID_3", "content": {"text": "Here comes the sun"}}]) code, results = post_request({"search_string": "sun"}) self.assertGreater(code, 499) self.assertEqual(results["error"], 'An error occurred when searching for "sun"') with self.assertRaises(Exception): searcher.search(query_string="test search")
def test_search_from_url(self): """ ensure that we get the error back when the backend fails """ searcher = SearchEngine.get_search_engine(TEST_INDEX_NAME) searcher.index( "courseware_content", [ { "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) searcher.index( "courseware_content", [ { "id": "FAKE_ID_2", "content": { "text": "Little Darling, it's been a year since sun been gone" } } ] ) searcher.index("test_doc", [{"id": "FAKE_ID_3", "content": {"text": "Here comes the sun"}}]) code, results = post_request({"search_string": "sun"}) self.assertGreater(code, 499) self.assertEqual(results["error"], 'An error occurred when searching for "sun"') with self.assertRaises(StandardError): searcher.search(query_string="test search")
def test_page_size_too_large(self): """ test searching with too-large page_size """ self.searcher.index("test_doc", [{ "course": "ABC/DEF/GHI", "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" } }]) code, results = post_request({ "search_string": "Little Darling", "page_size": 101 }) self.assertEqual(code, 500) self.assertTrue("error" in results)
def test_page_size_too_large(self): """ test searching with too-large page_size """ self.searcher.index( "test_doc", [ { "course": "ABC/DEF/GHI", "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) code, results = post_request({"search_string": "Little Darling", "page_size": 101}) self.assertEqual(code, 500) self.assertTrue("error" in results)
def test_search_from_url(self): """ test searching using the url """ self.searcher.index( "courseware_content", [ { "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" }, "test_date": datetime(2015, 1, 1), "test_string": "ABC, It's easy as 123" } ] ) self.searcher.index( "courseware_content", [ { "id": "FAKE_ID_2", "content": { "text": "Little Darling, it's been a year since sun been gone" } } ] ) self.searcher.index("courseware_content", [{"id": "FAKE_ID_3", "content": {"text": "Here comes the sun"}}]) # Test no events called yet after setup self.assert_no_events_were_emitted() self._reset_mocked_tracker() code, results = post_request({"search_string": "sun"}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 2) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_3" in result_ids and "FAKE_ID_2" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("sun", 20, 0, 2) self._reset_mocked_tracker() code, results = post_request({"search_string": "Darling"}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 2) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Darling", 20, 0, 2) self._reset_mocked_tracker() code, results = post_request({"search_string": "winter"}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 1) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" not in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("winter", 20, 0, 1) self._reset_mocked_tracker() self.assertTrue(results["results"][0]["data"]["test_date"], datetime(2015, 1, 1).isoformat()) self.assertTrue(results["results"][0]["data"]["test_string"], "ABC, It's easy as 123")
def test_valid_search(self, query, course_id, result_count): code, results = post_request({"search_string": query}, course_id) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], result_count)
def test_pagination(self): """ test searching using the course url """ self.searcher.index( "courseware_content", [ { "course": "ABC", "id": "FAKE_ID_1", "content": { "text": "Little Darling Little Darling Little Darling, it's been a long long lonely winter" } } ] ) self.searcher.index( "courseware_content", [ { "course": "ABC", "id": "FAKE_ID_2", "content": { "text": "Little Darling Little Darling, it's been a year since you've been gone" } } ] ) self.searcher.index( "courseware_content", [ { "course": "XYZ", "id": "FAKE_ID_3", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) # Test no events called yet after setup self.assert_no_events_were_emitted() self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling"}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) self.assertEqual(len(results["results"]), 3) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 20, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 1}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_1"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 1, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 1, "page_index": 0}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_1"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 1, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 1, "page_index": 1}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_2"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 1, 1, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 1, "page_index": 2}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_3"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 1, 2, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 2}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_1", "FAKE_ID_2"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 2, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 2, "page_index": 0}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_1", "FAKE_ID_2"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 2, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling", "page_size": 2, "page_index": 1}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) result_ids = [r["data"]["id"] for r in results["results"]] self.assertEqual(result_ids, ["FAKE_ID_3"]) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 2, 1, 3) self._reset_mocked_tracker()
def test_course_search_url(self): """ test searching using the course url """ self.searcher.index( "courseware_content", [ { "course": "ABC/DEF/GHI", "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) self.searcher.index( "courseware_content", [ { "course": "ABC/DEF/GHI", "id": "FAKE_ID_2", "content": { "text": "Little Darling, it's been a year since you've been gone" } } ] ) self.searcher.index( "courseware_content", [ { "course": "LMN/OPQ/RST", "id": "FAKE_ID_3", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) # Test no events called yet after setup self.assert_no_events_were_emitted() self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling"}) self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 3) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 20, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Darling"}, "ABC/DEF/GHI") self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 2) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Darling", 20, 0, 2) self._reset_mocked_tracker() code, results = post_request({"search_string": "winter"}, "ABC/DEF/GHI") self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 1) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" not in result_ids and "FAKE_ID_3" not in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("winter", 20, 0, 1) self._reset_mocked_tracker() code, results = post_request({"search_string": "winter"}, "LMN/OPQ/RST") self.assertTrue(199 < code < 300) self.assertEqual(results["total"], 1) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" not in result_ids and "FAKE_ID_2" not in result_ids and "FAKE_ID_3" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("winter", 20, 0, 1) self._reset_mocked_tracker()
def test_search_from_url(self): """ test searching using the url """ self.searcher.index( "courseware_content", [ { "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" }, "test_date": datetime(2015, 1, 1), "test_string": "ABC, It's easy as 123" } ] ) self.searcher.index( "courseware_content", [ { "id": "FAKE_ID_2", "content": { "text": "Little Darling, it's been a year since sun been gone" } } ] ) self.searcher.index("courseware_content", [{"id": "FAKE_ID_3", "content": {"text": "Here comes the sun"}}]) # Test no events called yet after setup self.assert_no_events_were_emitted() self._reset_mocked_tracker() code, results = post_request({"search_string": "sun"}) self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 2) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_3" in result_ids and "FAKE_ID_2" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("sun", 20, 0, 2) self._reset_mocked_tracker() code, results = post_request({"search_string": "Darling"}) self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 2) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Darling", 20, 0, 2) self._reset_mocked_tracker() code, results = post_request({"search_string": "winter"}) self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 1) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" not in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("winter", 20, 0, 1) self._reset_mocked_tracker() self.assertTrue(results["results"][0]["data"]["test_date"], datetime(2015, 1, 1).isoformat()) self.assertTrue(results["results"][0]["data"]["test_string"], "ABC, It's easy as 123")
def test_course_search_url(self): """ test searching using the course url """ self.searcher.index( "courseware_content", [ { "course": "ABC/DEF/GHI", "id": "FAKE_ID_1", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) self.searcher.index( "courseware_content", [ { "course": "ABC/DEF/GHI", "id": "FAKE_ID_2", "content": { "text": "Little Darling, it's been a year since you've been gone" } } ] ) self.searcher.index( "courseware_content", [ { "course": "LMN/OPQ/RST", "id": "FAKE_ID_3", "content": { "text": "Little Darling, it's been a long long lonely winter" } } ] ) # Test no events called yet after setup self.assert_no_events_were_emitted() self._reset_mocked_tracker() code, results = post_request({"search_string": "Little Darling"}) self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 3) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Little Darling", 20, 0, 3) self._reset_mocked_tracker() code, results = post_request({"search_string": "Darling"}, "ABC/DEF/GHI") self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 2) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("Darling", 20, 0, 2) self._reset_mocked_tracker() code, results = post_request({"search_string": "winter"}, "ABC/DEF/GHI") self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 1) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" in result_ids and "FAKE_ID_2" not in result_ids and "FAKE_ID_3" not in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("winter", 20, 0, 1) self._reset_mocked_tracker() code, results = post_request({"search_string": "winter"}, "LMN/OPQ/RST") self.assertTrue(code < 300 and code > 199) self.assertEqual(results["total"], 1) result_ids = [r["data"]["id"] for r in results["results"]] self.assertTrue("FAKE_ID_1" not in result_ids and "FAKE_ID_2" not in result_ids and "FAKE_ID_3" in result_ids) # Test initiate search and return results were called - and clear mocked tracker self.assert_initiated_return_events("winter", 20, 0, 1) self._reset_mocked_tracker()