bmc_hub/tests/test_mission_call_state.py
Christian 3387f6c475 feat: enhance solution management with customer selection and improve call logging URLs
- Added customer search functionality in the solution management editor, allowing users to select a customer.
- Updated the API endpoint for incoming call logging to use the local recipient extension.
- Implemented a new case number navigation feature in the global search.
- Modified case creation logic to include relations and adjust module visibility.
- Added tests for new features including customer selection in solutions and call logging URL changes.
2026-10-03 14:06:51 +02:00

59 lines
2.2 KiB
Python

from app.dashboard.backend.mission_service import MissionService
def test_stale_ringing_timeout_uses_last_update(monkeypatch):
calls = []
monkeypatch.setattr(MissionService, "_table_exists", staticmethod(lambda _table: True))
monkeypatch.setattr(MissionService, "get_ring_timeout_seconds", staticmethod(lambda: 120))
monkeypatch.setattr(
"app.dashboard.backend.mission_service.execute_query",
lambda query, params=(): calls.append((query, params)),
)
MissionService.expire_stale_ringing_calls()
assert len(calls) == 1
query, params = calls[0]
assert "updated_at < (NOW() - make_interval(secs => %s))" in query
assert "started_at < (NOW() - make_interval(secs => %s))" not in query
assert params == (120,)
def test_repeated_ringing_event_refreshes_call_start_time():
from pathlib import Path
source = Path("app/dashboard/backend/mission_router.py").read_text(encoding="utf-8")
assert "started_at = EXCLUDED.started_at" in source
assert "started_at = LEAST(mission_call_state.started_at, EXCLUDED.started_at)" not in source
def test_yealink_incoming_url_uses_local_value_for_recipient_and_queue():
from pathlib import Path
source = Path("app/settings/frontend/settings.html").read_text(encoding="utf-8")
assert "queue_name=$local&recipient_extension=$local" in source
def test_case_location_list_is_customer_scoped_and_prioritizes_customer_address():
from pathlib import Path
template = Path("app/modules/sag/templates/detail_v4.html").read_text(encoding="utf-8")
assert "/api/v1/locations/by-customer/${encodeURIComponent(caseAddCustomerId)}" in template
assert "visible = customerLocations.filter" in template
assert "customer.address" in template
assert "normalizeAddress" in template
def test_active_calls_are_not_expired_during_state_read():
import inspect
source = inspect.getsource(MissionService.get_active_calls)
assert "expire_stale_ringing_calls" not in source
def test_active_call_read_failure_preserves_client_state():
from pathlib import Path
source = Path("app/dashboard/frontend/mission_control_v2.html").read_text(encoding="utf-8")
assert '"active_calls", MissionService' not in source