fix: FCM data-only push so Seaca controls sound (0.9.6)
Send title and body in the data payload instead of notification block so onMessageReceived always runs and the app can honour silent mode in background. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"""FCM push must not break event ingest."""
|
||||
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -40,3 +40,37 @@ def test_send_fcm_data_raises_token_errors_when_required():
|
||||
body="b",
|
||||
require_success=True,
|
||||
)
|
||||
|
||||
|
||||
def test_send_fcm_data_payload_is_data_only():
|
||||
posted: list[dict] = []
|
||||
|
||||
def capture_post(_url, *, headers, json):
|
||||
posted.append(json)
|
||||
response = MagicMock()
|
||||
response.raise_for_status.return_value = None
|
||||
return response
|
||||
|
||||
with patch("app.services.mobile_notify._fcm_access_token", return_value="token"):
|
||||
with patch("app.services.mobile_notify.get_effective_fcm_config") as mock_cfg:
|
||||
mock_cfg.return_value.enabled = True
|
||||
mock_cfg.return_value.project_id = "proj"
|
||||
mock_cfg.return_value.service_account_path = "/etc/fcm.json"
|
||||
mock_cfg.return_value.configured = True
|
||||
mock_cfg.return_value.active = True
|
||||
with patch("httpx.Client") as mock_client:
|
||||
mock_client.return_value.__enter__.return_value.post = capture_post
|
||||
_send_fcm_data(
|
||||
["device-token"],
|
||||
{"kind": "event", "id": "42", "severity": "high"},
|
||||
title="Alert",
|
||||
body="Summary text",
|
||||
)
|
||||
|
||||
assert len(posted) == 1
|
||||
message = posted[0]["message"]
|
||||
assert "notification" not in message
|
||||
assert message["data"]["title"] == "Alert"
|
||||
assert message["data"]["body"] == "Summary text"
|
||||
assert message["data"]["kind"] == "event"
|
||||
assert message["data"]["id"] == "42"
|
||||
|
||||
Reference in New Issue
Block a user