mirror of
https://github.com/MrSleeps/jellyfin-scene-search.git
synced 2026-11-15 22:41:28 +00:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import unittest
|
|
from unittest.mock import Mock
|
|
|
|
import numpy as np
|
|
|
|
from scene_search.meili import Meili
|
|
|
|
|
|
class MeiliVectorSerializationTests(unittest.TestCase):
|
|
def test_numpy_float32_vector_is_json_serializable(self) -> None:
|
|
vector = np.asarray([0.125, -0.25, 0.5], dtype=np.float32)
|
|
|
|
converted = Meili._json_vector(vector)
|
|
|
|
self.assertEqual(converted, [0.125, -0.25, 0.5])
|
|
self.assertTrue(all(type(value) is float for value in converted))
|
|
json.dumps({"vector": converted}, allow_nan=False)
|
|
|
|
def test_clear_documents_deletes_all_index_documents(self) -> None:
|
|
meili = Meili("http://localhost:7700", "key", "scenes")
|
|
response = Mock()
|
|
response.ok = True
|
|
meili.ensure_index = Mock()
|
|
meili.session.delete = Mock(return_value=response)
|
|
|
|
meili.clear_documents()
|
|
|
|
meili.ensure_index.assert_called_once()
|
|
meili.session.delete.assert_called_once_with(
|
|
"http://localhost:7700/indexes/scenes/documents"
|
|
)
|
|
|
|
def test_search_vector_adds_optional_filter(self) -> None:
|
|
meili = Meili("http://localhost:7700", "key", "scenes")
|
|
response = Mock()
|
|
response.ok = True
|
|
response.json.return_value = {"hits": []}
|
|
meili.session.post = Mock(return_value=response)
|
|
|
|
meili.search_vector(
|
|
[0.1, 0.2],
|
|
"query",
|
|
filter_expression='source_kind = "jellyfin"',
|
|
)
|
|
|
|
payload = meili.session.post.call_args.kwargs["json"]
|
|
self.assertEqual(payload["filter"], 'source_kind = "jellyfin"')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|