Skip to content

Commit aed06b7

Browse files
author
nandhini
committed
tests: add unit tests for api/tools/tools.py (fixes #298)
1 parent a157481 commit aed06b7

1 file changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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

Comments
 (0)