Spaces:
Sleeping
Sleeping
| import sys | |
| from pathlib import Path | |
| sys.path.insert(0, str(Path(__file__).parent.parent / "src")) | |
| import pytest | |
| import numpy as np | |
| from unittest.mock import Mock, patch, MagicMock | |
| class TestTurkishEmbedder: | |
| """Tests for TurkishEmbedder class.""" | |
| def test_lazy_loading(self, mock_st): | |
| """Model should not load until first use.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| embedder = TurkishEmbedder() | |
| mock_st.assert_not_called() | |
| _ = embedder.model | |
| mock_st.assert_called_once() | |
| def test_embed_documents_adds_prefix(self, mock_st): | |
| """Documents should be prefixed with 'passage:'.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| mock_model = MagicMock() | |
| mock_model.encode.return_value = np.array([[0.1, 0.2], [0.3, 0.4]]) | |
| mock_st.return_value = mock_model | |
| embedder = TurkishEmbedder() | |
| embedder.embed_documents(["test1", "test2"]) | |
| call_args = mock_model.encode.call_args[0][0] | |
| assert call_args == ["passage: test1", "passage: test2"] | |
| def test_embed_query_adds_prefix(self, mock_st): | |
| """Query should be prefixed with 'query:'.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| mock_model = MagicMock() | |
| mock_model.encode.return_value = np.array([0.1, 0.2]) | |
| mock_st.return_value = mock_model | |
| embedder = TurkishEmbedder() | |
| embedder.embed_query("test query") | |
| call_args = mock_model.encode.call_args[0][0] | |
| assert call_args == "query: test query" | |
| def test_query_and_document_prefix_differ(self, mock_st): | |
| """Query and document prefixes should be different.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| mock_model = MagicMock() | |
| mock_model.encode.return_value = np.array([0.1, 0.2]) | |
| mock_st.return_value = mock_model | |
| embedder = TurkishEmbedder() | |
| embedder.embed_query("test") | |
| query_prefix = mock_model.encode.call_args[0][0] | |
| mock_model.encode.return_value = np.array([[0.1, 0.2]]) | |
| embedder.embed_documents(["test"]) | |
| doc_prefix = mock_model.encode.call_args[0][0][0] | |
| assert query_prefix != doc_prefix | |
| assert query_prefix.startswith("query:") | |
| assert doc_prefix.startswith("passage:") | |
| def test_embed_documents_empty_list(self, mock_st): | |
| """Empty input should return empty list.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| embedder = TurkishEmbedder() | |
| result = embedder.embed_documents([]) | |
| assert result == [] | |
| mock_st.assert_not_called() | |
| def test_embed_documents_returns_list(self, mock_st): | |
| """Should return list of lists.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| mock_model = MagicMock() | |
| mock_model.encode.return_value = np.array([[0.1, 0.2], [0.3, 0.4]]) | |
| mock_st.return_value = mock_model | |
| embedder = TurkishEmbedder() | |
| result = embedder.embed_documents(["a", "b"]) | |
| assert isinstance(result, list) | |
| assert isinstance(result[0], list) | |
| def test_embed_passages_returns_numpy(self, mock_st): | |
| """embed_passages should return numpy array.""" | |
| from embeddings import TurkishEmbedder, reset_embedder | |
| reset_embedder() | |
| mock_model = MagicMock() | |
| mock_model.encode.return_value = np.array([[0.1, 0.2]]) | |
| mock_st.return_value = mock_model | |
| embedder = TurkishEmbedder() | |
| result = embedder.embed_passages(["test"]) | |
| assert isinstance(result, np.ndarray) | |
| class TestSingleton: | |
| """Tests for singleton pattern.""" | |
| def test_get_embedder_returns_same_instance(self, mock_st): | |
| """get_embedder should return the same instance.""" | |
| from embeddings import get_embedder, reset_embedder | |
| reset_embedder() | |
| instance1 = get_embedder() | |
| instance2 = get_embedder() | |
| assert instance1 is instance2 | |
| def test_reset_embedder_clears_instance(self, mock_st): | |
| """reset_embedder should clear the singleton.""" | |
| from embeddings import get_embedder, reset_embedder | |
| reset_embedder() | |
| instance1 = get_embedder() | |
| reset_embedder() | |
| instance2 = get_embedder() | |
| assert instance1 is not instance2 | |