Private
Public Access
0
0
Files
manual_slop/tests/test_ticket_queue.py
T
ed 8f11340b38 refactor(consumers): migrate 85 'from src.models import' sites to direct subsystem imports
Per post_module_taxonomy_de_cruft_20260627 Phase 2 (FR7). Each
'from src.models import X' for a moved class is rewritten to
'from src.<destination> import X':

  Ticket, Track, WorkerContext, TrackState, TrackMetadata,
    ThinkingSegment, EMPTY_TRACK_STATE            -> src.mma
  ProjectContext, ProjectMeta, ProjectOutput, ProjectFiles,
    ProjectScreenshots, ProjectDiscussion, EMPTY_PROJECT_CONTEXT -> src.project
  FileItem, Preset, ContextPreset, ContextFileEntry,
    NamedViewPreset                                -> src.project_files
  Tool, ToolPreset                                 -> src.tool_presets
  BiasProfile                                      -> src.tool_bias
  TextEditorConfig, ExternalEditorConfig,
    EMPTY_TEXT_EDITOR_CONFIG                       -> src.external_editor
  Persona                                          -> src.personas
  WorkspaceProfile                                -> src.workspace_manager
  MCPServerConfig, MCPConfiguration, VectorStoreConfig,
    RAGConfig, load_mcp_config                      -> src.mcp_client

NOT touched (kept on src.models; Phase 3 or Phase 4 will move them):
  GenerateRequest, ConfirmRequest, DEFAULT_TOOL_CATEGORIES, Metadata, PROVIDERS

Migration was performed by the one-time script
scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/migrate_imports.py
which uses a class-to-module map and re.sub() to rewrite each
'from src.models import X' line.

Total: 85 import lines rewritten across 71 files.

Note: this commit depends on the v2 SHIPPED work
(origin/tier2/module_taxonomy_refactor_20260627) being merged into
this branch NEXT. On master (without the v2 SHIPPED commits), the
destination modules do not exist and these imports would fail.
2026-06-26 13:34:03 -04:00

110 lines
3.8 KiB
Python

import pytest
from unittest.mock import patch
from src.mma import Ticket
def test_ticket_priority_default():
ticket = Ticket(id="T1", description="Test ticket")
assert ticket.priority == "medium"
def test_ticket_priority_custom():
ticket_high = Ticket(id="T2", description="High priority", priority="high")
assert ticket_high.priority == "high"
ticket_low = Ticket(id="T3", description="Low priority", priority="low")
assert ticket_low.priority == "low"
def test_ticket_to_dict_priority():
ticket = Ticket(id="T4", description="To dict test", priority="high")
d = ticket.to_dict()
assert "priority" in d
assert d["priority"] == "high"
def test_ticket_from_dict_priority():
data = {
"id": "T5",
"description": "From dict test",
"priority": "low",
"status": "todo"
}
ticket = Ticket.from_dict(data)
assert ticket.priority == "low"
def test_ticket_from_dict_default_priority():
data = {
"id": "T6",
"description": "No priority in dict"
}
ticket = Ticket.from_dict(data)
assert ticket.priority == "medium"
class TestBulkOperations:
def test_bulk_execute(self, mock_app):
mock_app.active_tickets = [
Ticket(id="T1", description="T1", status="todo"),
Ticket(id="T2", description="T2", status="todo"),
Ticket(id="T3", description="T3", status="todo")
]
mock_app.ui_selected_tickets = {"T1", "T3"}
with patch.object(mock_app.controller, "_push_mma_state_update") as mock_push:
mock_app.bulk_execute()
assert mock_app.active_tickets[0].status == "in_progress"
assert mock_app.active_tickets[1].status == "todo"
assert mock_app.active_tickets[2].status == "in_progress"
mock_push.assert_called_once()
def test_bulk_skip(self, mock_app):
mock_app.active_tickets = [
Ticket(id="T1", description="T1", status="todo"),
Ticket(id="T2", description="T2", status="todo")
]
mock_app.ui_selected_tickets = {"T1"}
with patch.object(mock_app.controller, "_push_mma_state_update") as mock_push:
mock_app.bulk_skip()
assert mock_app.active_tickets[0].status == "completed"
assert mock_app.active_tickets[1].status == "todo"
mock_push.assert_called_once()
def test_bulk_block(self, mock_app):
mock_app.active_tickets = [
Ticket(id="T1", description="T1", status="todo"),
Ticket(id="T2", description="T2", status="todo")
]
mock_app.ui_selected_tickets = {"T1", "T2"}
with patch.object(mock_app.controller, "_push_mma_state_update") as mock_push:
mock_app.bulk_block()
assert mock_app.active_tickets[0].status == "blocked"
assert mock_app.active_tickets[1].status == "blocked"
mock_push.assert_called_once()
class TestReorder:
def test_reorder_ticket_valid(self, mock_app):
mock_app.active_tickets = [
Ticket(id="T1", description="T1", depends_on=[]),
Ticket(id="T2", description="T2", depends_on=[]),
Ticket(id="T3", description="T3", depends_on=["T1"])
]
with patch.object(mock_app.controller, "_push_mma_state_update") as mock_push:
# Move T1 to index 1: [T2, T1, T3]. T3 depends on T1. T1 index 1 < T3 index 2. VALID.
mock_app._reorder_ticket(0, 1)
assert mock_app.active_tickets[0].id == "T2"
assert mock_app.active_tickets[1].id == "T1"
assert mock_app.active_tickets[2].id == "T3"
mock_push.assert_called_once()
def test_reorder_ticket_invalid(self, mock_app):
mock_app.active_tickets = [
Ticket(id="T1", description="T1", depends_on=[]),
Ticket(id="T2", description="T2", depends_on=["T1"])
]
with patch.object(mock_app.controller, "_push_mma_state_update") as mock_push:
# Move T1 after T2: [T2, T1]. T2 depends on T1, but T1 is now at index 1 while T2 is at index 0.
# Violation: dependency T1 (index 1) is not before T2 (index 0).
mock_app._reorder_ticket(0, 1)
# Should NOT change
assert mock_app.active_tickets[0].id == "T1"
assert mock_app.active_tickets[1].id == "T2"
mock_push.assert_not_called()