File size: 4,106 Bytes
310260a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Performance Tests for MCP Tools

Tests performance characteristics of all MCP tools:
- list_tasks completes in <500ms for 1000 tasks
- create_task completes in <100ms
- mark_complete completes in <100ms
- update_task completes in <100ms
- delete_task completes in <100ms
"""

import pytest
import time

from src.tools.list_tasks import list_tasks_internal
from src.tools.create_task import create_task_internal
from src.tools.mark_complete import mark_complete_internal
from src.tools.update_task import update_task_internal
from src.tools.delete_task import delete_task_internal
from tests.utils.task_helpers import create_multiple_tasks, create_test_task


@pytest.mark.performance
@pytest.mark.asyncio
async def test_list_tasks_completes_in_under_500ms_for_1000_tasks(mock_mcp_context, test_session):
    """
    Test: list_tasks completes in <500ms for 1000 tasks

    Verifies that list_tasks meets performance target with large dataset.
    """
    # Setup: Create 1000 tasks
    create_multiple_tasks(test_session, mock_mcp_context.user_id, count=1000, title_prefix="Task")

    # Execute and measure time
    start_time = time.time()
    result = await list_tasks_internal(ctx=mock_mcp_context)
    duration_ms = (time.time() - start_time) * 1000

    # Assert
    assert result["total"] == 1000
    assert duration_ms < 500, f"list_tasks took {duration_ms}ms, expected <500ms"


@pytest.mark.performance
@pytest.mark.asyncio
async def test_create_task_completes_in_under_100ms(mock_mcp_context):
    """
    Test: create_task completes in <100ms

    Verifies that create_task meets performance target.
    """
    # Execute and measure time
    start_time = time.time()
    result = await create_task_internal(
        ctx=mock_mcp_context,
        title="Performance test task"
    )
    duration_ms = (time.time() - start_time) * 1000

    # Assert
    assert result["status"] == "success"
    assert duration_ms < 100, f"create_task took {duration_ms}ms, expected <100ms"


@pytest.mark.performance
@pytest.mark.asyncio
async def test_mark_complete_completes_in_under_100ms(mock_mcp_context, test_session):
    """
    Test: mark_complete completes in <100ms

    Verifies that mark_complete meets performance target.
    """
    # Setup
    task = create_test_task(test_session, mock_mcp_context.user_id, title="Test")

    # Execute and measure time
    start_time = time.time()
    result = await mark_complete_internal(
        ctx=mock_mcp_context,
        task_id=task.id
    )
    duration_ms = (time.time() - start_time) * 1000

    # Assert
    assert result["status"] == "success"
    assert duration_ms < 100, f"mark_complete took {duration_ms}ms, expected <100ms"


@pytest.mark.performance
@pytest.mark.asyncio
async def test_update_task_completes_in_under_100ms(mock_mcp_context, test_session):
    """
    Test: update_task completes in <100ms

    Verifies that update_task meets performance target.
    """
    # Setup
    task = create_test_task(test_session, mock_mcp_context.user_id, title="Test")

    # Execute and measure time
    start_time = time.time()
    result = await update_task_internal(
        ctx=mock_mcp_context,
        task_id=task.id,
        title="Updated"
    )
    duration_ms = (time.time() - start_time) * 1000

    # Assert
    assert result["status"] == "success"
    assert duration_ms < 100, f"update_task took {duration_ms}ms, expected <100ms"


@pytest.mark.performance
@pytest.mark.asyncio
async def test_delete_task_completes_in_under_100ms(mock_mcp_context, test_session):
    """
    Test: delete_task completes in <100ms

    Verifies that delete_task meets performance target.
    """
    # Setup
    task = create_test_task(test_session, mock_mcp_context.user_id, title="Test")

    # Execute and measure time
    start_time = time.time()
    result = await delete_task_internal(
        ctx=mock_mcp_context,
        task_id=task.id
    )
    duration_ms = (time.time() - start_time) * 1000

    # Assert
    assert result["status"] == "success"
    assert duration_ms < 100, f"delete_task took {duration_ms}ms, expected <100ms"