32 lines
1.8 KiB
Python
32 lines
1.8 KiB
Python
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
from search.api import Api, ApiError
|
|
|
|
|
|
class SearchReviewTest(unittest.TestCase):
|
|
def test_saves_signed_search_snapshot_and_rejects_tampering(self):
|
|
with tempfile.TemporaryDirectory() as temporary:
|
|
api = Api("http://opensearch:9200", "current", Path(temporary), Path(temporary) / "reviews.sqlite3", b"test-secret")
|
|
response = {"hits": {"hits": [{"_source": {"document_code": "7", "edition_code": "10", "document_name_ru": "Закон"}}]}}
|
|
with patch("search.api.request_json", return_value=response):
|
|
result = api.handle("GET", "/search?q=%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD&language=ru")[1]
|
|
saved = api.handle("POST", "/search-reviews", {"review_token": result["review_token"], "reviewer": "Юрист", "results": [{"rank": 1, "code": "7", "rating": 3, "comment": "Прямой ответ"}]})
|
|
self.assertEqual(saved[0], 201)
|
|
exported = api.handle("GET", "/search-reviews/export")[1]["reviews"]
|
|
self.assertEqual(exported[0]["top_result_code"], "7")
|
|
self.assertEqual(exported[0]["results"][0]["rating"], 3)
|
|
with self.assertRaisesRegex(ApiError, "does not match"):
|
|
api.handle("POST", "/search-reviews", {"review_token": result["review_token"], "reviewer": "Юрист", "results": [{"rank": 1, "code": "8", "rating": 3}]})
|
|
|
|
def test_snapshot_and_review_page_are_available(self):
|
|
with tempfile.TemporaryDirectory() as temporary:
|
|
api = Api("http://opensearch:9200", "current", Path(temporary))
|
|
self.assertIn("Оценка поисковой выдачи", api.review_page())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|