1+ import pytest
2+ from unittest .mock import patch , MagicMock
3+ from api .tools .tools import (
4+ search_plugin_docs ,
5+ search_jenkins_docs ,
6+ search_stackoverflow_threads ,
7+ search_community_threads ,
8+ )
9+
10+
11+ class TestSearchStackoverflowThreads :
12+ def test_returns_nothing_relevant_for_valid_query (self ):
13+ result = search_stackoverflow_threads ("how to fix jenkins pipeline" )
14+ assert result == "Nothing relevant"
15+
16+ def test_returns_nothing_relevant_for_empty_query (self ):
17+ result = search_stackoverflow_threads ("" )
18+ assert result == "Nothing relevant"
19+
20+
21+ class TestSearchPluginDocs :
22+ @patch ("api.tools.tools.extract_top_chunks" )
23+ @patch ("api.tools.tools.retrieve_documents" )
24+ def test_returns_result_without_plugin_name (self , mock_retrieve , mock_extract ):
25+ mock_retrieve .return_value = (["doc1" ], [0.9 ], ["doc2" ], [0.8 ])
26+ mock_extract .return_value = "plugin result"
27+ logger = MagicMock ()
28+
29+ result = search_plugin_docs ("query" , "keywords" , logger )
30+
31+ assert result == "plugin result"
32+ mock_retrieve .assert_called_once ()
33+ mock_extract .assert_called_once ()
34+
35+ @patch ("api.tools.tools.extract_top_chunks" )
36+ @patch ("api.tools.tools.filter_retrieved_data" )
37+ @patch ("api.tools.tools.is_valid_plugin" )
38+ @patch ("api.tools.tools.retrieve_documents" )
39+ def test_filters_data_when_valid_plugin_name (
40+ self , mock_retrieve , mock_is_valid , mock_filter , mock_extract
41+ ):
42+ mock_retrieve .return_value = (["doc1" ], [0.9 ], ["doc2" ], [0.8 ])
43+ mock_is_valid .return_value = True
44+ mock_filter .return_value = (["filtered1" ], ["filtered2" ])
45+ mock_extract .return_value = "filtered result"
46+ logger = MagicMock ()
47+
48+ result = search_plugin_docs ("query" , "keywords" , logger , plugin_name = "git" )
49+
50+ assert result == "filtered result"
51+ mock_filter .assert_called_once ()
52+
53+ @patch ("api.tools.tools.extract_top_chunks" )
54+ @patch ("api.tools.tools.is_valid_plugin" )
55+ @patch ("api.tools.tools.retrieve_documents" )
56+ def test_skips_filter_when_invalid_plugin_name (
57+ self , mock_retrieve , mock_is_valid , mock_extract
58+ ):
59+ mock_retrieve .return_value = (["doc1" ], [0.9 ], ["doc2" ], [0.8 ])
60+ mock_is_valid .return_value = False
61+ mock_extract .return_value = "unfiltered result"
62+ logger = MagicMock ()
63+
64+ result = search_plugin_docs ("query" , "keywords" , logger , plugin_name = "invalid" )
65+
66+ assert result == "unfiltered result"
67+
68+
69+ class TestSearchJenkinsDocs :
70+ @patch ("api.tools.tools.extract_top_chunks" )
71+ @patch ("api.tools.tools.retrieve_documents" )
72+ def test_returns_result (self , mock_retrieve , mock_extract ):
73+ mock_retrieve .return_value = (["doc1" ], [0.9 ], ["doc2" ], [0.8 ])
74+ mock_extract .return_value = "jenkins docs result"
75+ logger = MagicMock ()
76+
77+ result = search_jenkins_docs ("query" , "keywords" , logger )
78+
79+ assert result == "jenkins docs result"
80+ mock_retrieve .assert_called_once ()
81+ mock_extract .assert_called_once ()
82+
83+
84+ class TestSearchCommunityThreads :
85+ @patch ("api.tools.tools.extract_top_chunks" )
86+ @patch ("api.tools.tools.retrieve_documents" )
87+ def test_returns_result_with_semantic_weight (self , mock_retrieve , mock_extract ):
88+ mock_retrieve .return_value = (["doc1" ], [0.9 ], ["doc2" ], [0.8 ])
89+ mock_extract .return_value = "community result"
90+ logger = MagicMock ()
91+
92+ result = search_community_threads ("query" , "keywords" , logger )
93+
94+ assert result == "community result"
95+ mock_extract .assert_called_once ()
96+ call_kwargs = mock_extract .call_args .kwargs
97+ assert call_kwargs .get ("semantic_weight" ) == 0.7
0 commit comments