Skip to content

Commit ab7cde2

Browse files
committed
Add comprehensive unit tests for timeframe parameter
- Added 4 new timeframe-specific tests covering default, custom, zero, and large values - Enhanced existing test_list_jira_issues_with_filters to include timeframe validation - Validates SQL generation, filter integration, and edge cases - Ensures backward compatibility and comprehensive test coverage assisted by cursor
1 parent e0ba161 commit ab7cde2

File tree

1 file changed

+94
-2
lines changed

1 file changed

+94
-2
lines changed

tests/test_tools.py

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@ async def test_list_jira_issues_with_filters(self, mock_mcp, mock_dependencies):
199199
issue_type='Bug',
200200
status='Open',
201201
priority='High',
202-
search_text='test search'
202+
search_text='test search',
203+
timeframe=14
203204
)
204205

205206
# Verify SQL conditions were built correctly
@@ -210,6 +211,14 @@ async def test_list_jira_issues_with_filters(self, mock_mcp, mock_dependencies):
210211
assert "ISSUESTATUS = 'Open'" in sql_call
211212
assert "PRIORITY = 'High'" in sql_call
212213
assert "LOWER(SUMMARY) LIKE '%test search%'" in sql_call
214+
215+
# Verify timeframe condition is included
216+
assert "CREATED >= CURRENT_DATE() - INTERVAL '14 DAYS'" in sql_call
217+
assert "UPDATED >= CURRENT_DATE() - INTERVAL '14 DAYS'" in sql_call
218+
assert "RESOLUTIONDATE >= CURRENT_DATE() - INTERVAL '14 DAYS'" in sql_call
219+
220+
# Verify filters_applied includes timeframe
221+
assert result['filters_applied']['timeframe'] == 14
213222

214223
@pytest.mark.asyncio
215224
async def test_get_jira_issue_details_not_found(self, mock_mcp, mock_dependencies):
@@ -334,4 +343,87 @@ async def test_exception_handling(self, mock_mcp, mock_dependencies):
334343

335344
result = await list_jira_issues()
336345
assert 'error' in result
337-
assert 'Database error' in result['error']
346+
assert 'Database error' in result['error']
347+
348+
@pytest.mark.asyncio
349+
async def test_list_jira_issues_default_timeframe(self, mock_mcp, mock_dependencies):
350+
"""Test list_jira_issues with default timeframe (30 days)"""
351+
mock_dependencies['query'].return_value = []
352+
353+
register_tools(mock_mcp)
354+
list_jira_issues = mock_mcp._registered_tools[0]
355+
356+
# Call without specifying timeframe (should use default 30)
357+
result = await list_jira_issues(project='TEST')
358+
359+
# Verify SQL conditions include default timeframe
360+
mock_dependencies['query'].assert_called_once()
361+
sql_call = mock_dependencies['query'].call_args[0][0]
362+
assert "CREATED >= CURRENT_DATE() - INTERVAL '30 DAYS'" in sql_call
363+
assert "UPDATED >= CURRENT_DATE() - INTERVAL '30 DAYS'" in sql_call
364+
assert "RESOLUTIONDATE >= CURRENT_DATE() - INTERVAL '30 DAYS'" in sql_call
365+
366+
# Verify filters_applied includes default timeframe
367+
assert result['filters_applied']['timeframe'] == 30
368+
369+
@pytest.mark.asyncio
370+
async def test_list_jira_issues_custom_timeframe(self, mock_mcp, mock_dependencies):
371+
"""Test list_jira_issues with custom timeframe (7 days)"""
372+
mock_dependencies['query'].return_value = []
373+
374+
register_tools(mock_mcp)
375+
list_jira_issues = mock_mcp._registered_tools[0]
376+
377+
# Test with custom timeframe
378+
result = await list_jira_issues(project='KONFLUX', timeframe=7)
379+
380+
# Verify SQL conditions include custom timeframe
381+
mock_dependencies['query'].assert_called_once()
382+
sql_call = mock_dependencies['query'].call_args[0][0]
383+
assert "CREATED >= CURRENT_DATE() - INTERVAL '7 DAYS'" in sql_call
384+
assert "UPDATED >= CURRENT_DATE() - INTERVAL '7 DAYS'" in sql_call
385+
assert "RESOLUTIONDATE >= CURRENT_DATE() - INTERVAL '7 DAYS'" in sql_call
386+
387+
# Verify filters_applied includes custom timeframe
388+
assert result['filters_applied']['timeframe'] == 7
389+
390+
@pytest.mark.asyncio
391+
async def test_list_jira_issues_zero_timeframe(self, mock_mcp, mock_dependencies):
392+
"""Test list_jira_issues with timeframe=0 (disabled)"""
393+
mock_dependencies['query'].return_value = []
394+
395+
register_tools(mock_mcp)
396+
list_jira_issues = mock_mcp._registered_tools[0]
397+
398+
# Test with timeframe=0 (should disable timeframe filtering)
399+
result = await list_jira_issues(project='TEST', timeframe=0)
400+
401+
# Verify SQL conditions do NOT include timeframe
402+
mock_dependencies['query'].assert_called_once()
403+
sql_call = mock_dependencies['query'].call_args[0][0]
404+
assert "INTERVAL" not in sql_call
405+
assert "CURRENT_DATE()" not in sql_call
406+
407+
# Verify filters_applied includes timeframe=0
408+
assert result['filters_applied']['timeframe'] == 0
409+
410+
@pytest.mark.asyncio
411+
async def test_list_jira_issues_large_timeframe(self, mock_mcp, mock_dependencies):
412+
"""Test list_jira_issues with large timeframe (365 days)"""
413+
mock_dependencies['query'].return_value = []
414+
415+
register_tools(mock_mcp)
416+
list_jira_issues = mock_mcp._registered_tools[0]
417+
418+
# Test with large timeframe
419+
result = await list_jira_issues(timeframe=365)
420+
421+
# Verify SQL conditions include large timeframe
422+
mock_dependencies['query'].assert_called_once()
423+
sql_call = mock_dependencies['query'].call_args[0][0]
424+
assert "CREATED >= CURRENT_DATE() - INTERVAL '365 DAYS'" in sql_call
425+
assert "UPDATED >= CURRENT_DATE() - INTERVAL '365 DAYS'" in sql_call
426+
assert "RESOLUTIONDATE >= CURRENT_DATE() - INTERVAL '365 DAYS'" in sql_call
427+
428+
# Verify filters_applied includes large timeframe
429+
assert result['filters_applied']['timeframe'] == 365

0 commit comments

Comments
 (0)