Beispiel #1
0
    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")
Beispiel #2
0
    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")
Beispiel #3
0
    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.')
Beispiel #4
0
    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")
Beispiel #5
0
    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")
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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")
Beispiel #9
0
 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)
Beispiel #10
0
    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()
Beispiel #11
0
    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()
Beispiel #12
0
    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")
Beispiel #13
0
    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()
Beispiel #14
0
    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()