forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_search_conversations.py
More file actions
145 lines (113 loc) · 5.09 KB
/
Copy pathtest_search_conversations.py
File metadata and controls
145 lines (113 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
"""
Tests for the search_conversations tool in the standalone MCP server.
Validates the REST helper builds correct URLs/params, handles HTTP errors,
and the tool handler validates required arguments.
"""
import json
from unittest.mock import patch, MagicMock
import logging
import pytest
from mcp_server_omi.server import (
search_conversations,
SearchConversations,
OmiTools,
)
class TestSearchConversationsHelper:
"""Tests for the search_conversations REST helper function."""
def test_builds_correct_url_and_params(self):
mock_response = MagicMock()
mock_response.json.return_value = [
{"id": "c1", "structured": {"title": "Result 1"}},
]
mock_response.raise_for_status = MagicMock()
with patch("mcp_server_omi.server.requests.get", return_value=mock_response) as mock_get:
logger = logging.getLogger("test")
result = search_conversations(logger, "omi_mcp_testkey", query="AI discussion", limit=5)
mock_get.assert_called_once()
call_args = mock_get.call_args
assert "conversations/search" in call_args.args[0]
assert call_args.kwargs["params"]["query"] == "AI discussion"
assert call_args.kwargs["params"]["limit"] == 5
assert call_args.kwargs["headers"]["Authorization"] == "Bearer omi_mcp_testkey"
assert result == [{"id": "c1", "structured": {"title": "Result 1"}}]
def test_passes_date_filters_when_provided(self):
mock_response = MagicMock()
mock_response.json.return_value = []
mock_response.raise_for_status = MagicMock()
with patch("mcp_server_omi.server.requests.get", return_value=mock_response) as mock_get:
logger = logging.getLogger("test")
search_conversations(
logger, "omi_mcp_testkey",
query="meeting",
start_date="2026-01-01",
end_date="2026-01-31",
)
params = mock_get.call_args.kwargs["params"]
assert params["start_date"] == "2026-01-01"
assert params["end_date"] == "2026-01-31"
def test_omits_date_filters_when_none(self):
mock_response = MagicMock()
mock_response.json.return_value = []
mock_response.raise_for_status = MagicMock()
with patch("mcp_server_omi.server.requests.get", return_value=mock_response) as mock_get:
logger = logging.getLogger("test")
search_conversations(logger, "omi_mcp_testkey", query="test")
params = mock_get.call_args.kwargs["params"]
assert "start_date" not in params
assert "end_date" not in params
def test_raises_on_http_error(self):
from requests.exceptions import HTTPError
mock_response = MagicMock()
mock_response.raise_for_status.side_effect = HTTPError("404 Not Found")
with patch("mcp_server_omi.server.requests.get", return_value=mock_response):
logger = logging.getLogger("test")
with pytest.raises(HTTPError):
search_conversations(logger, "omi_mcp_testkey", query="test")
def test_does_not_log_raw_query(self):
mock_response = MagicMock()
mock_response.json.return_value = []
mock_response.raise_for_status = MagicMock()
with patch("mcp_server_omi.server.requests.get", return_value=mock_response):
logger = MagicMock(spec=logging.Logger)
search_conversations(logger, "key", query="my secret medical condition")
log_message = logger.info.call_args[0][0]
assert "my secret medical condition" not in log_message
class TestSearchConversationsModel:
"""Tests for the SearchConversations Pydantic model."""
def test_query_is_required(self):
schema = SearchConversations.model_json_schema()
assert "query" in schema.get("required", [])
def test_defaults_are_correct(self):
model = SearchConversations(query="test")
assert model.limit == 10
assert model.start_date is None
assert model.end_date is None
assert model.api_key is None
def test_all_fields_accepted(self):
model = SearchConversations(
api_key="omi_mcp_test",
query="search term",
limit=5,
start_date="2026-01-01",
end_date="2026-12-31",
)
assert model.query == "search term"
assert model.limit == 5
assert model.start_date == "2026-01-01"
class TestOmiToolsEnum:
"""Verify the enum includes the new tool."""
def test_search_conversations_in_enum(self):
assert OmiTools.SEARCH_CONVERSATIONS == "search_conversations"
def test_search_memories_in_enum(self):
assert OmiTools.SEARCH_MEMORIES == "search_memories"
def test_expected_tools(self):
assert {t.value for t in OmiTools} == {
"get_memories",
"search_memories",
"create_memory",
"delete_memory",
"edit_memory",
"get_conversations",
"get_conversation_by_id",
"search_conversations",
}