fix: complete notification warning context

This commit is contained in:
2026-08-21 19:11:16 +09:00
parent 831db34acf
commit 83c6d290b4
+44 -2
View File
@@ -5316,18 +5316,28 @@ fn ticket_notification_content(ticket_id: &str, current_state: &str) -> String {
struct TicketNotificationDeliveryWarning { struct TicketNotificationDeliveryWarning {
level: &'static str, level: &'static str,
event: &'static str, event: &'static str,
workspace_id: String,
ticket_id: String, ticket_id: String,
current_state: String,
recipient_runtime_id: String, recipient_runtime_id: String,
recipient_worker_id: String, recipient_worker_id: String,
error_category: &'static str, error_category: &'static str,
} }
impl TicketNotificationDeliveryWarning { impl TicketNotificationDeliveryWarning {
fn new(ticket_id: &str, recipient: &RuntimeWorkerRef, error_category: &'static str) -> Self { fn new(
workspace_id: &str,
ticket_id: &str,
current_state: &str,
recipient: &RuntimeWorkerRef,
error_category: &'static str,
) -> Self {
Self { Self {
level: "warning", level: "warning",
event: "ticket_notification_delivery_failed", event: "ticket_notification_delivery_failed",
workspace_id: workspace_id.to_string(),
ticket_id: ticket_id.to_string(), ticket_id: ticket_id.to_string(),
current_state: current_state.to_string(),
recipient_runtime_id: recipient.runtime_id.clone(), recipient_runtime_id: recipient.runtime_id.clone(),
recipient_worker_id: recipient.worker_id.clone(), recipient_worker_id: recipient.worker_id.clone(),
error_category, error_category,
@@ -5413,7 +5423,9 @@ fn notify_ticket_recipients(
); );
if let Some(error_category) = ticket_notification_delivery_error_category(&result) { if let Some(error_category) = ticket_notification_delivery_error_category(&result) {
emit_ticket_notification_delivery_warning(TicketNotificationDeliveryWarning::new( emit_ticket_notification_delivery_warning(TicketNotificationDeliveryWarning::new(
workspace_id,
ticket_id, ticket_id,
current_state,
&recipient, &recipient,
error_category, error_category,
)); ));
@@ -15796,7 +15808,8 @@ mod tests {
#[tokio::test] #[tokio::test]
async fn queued_ticket_mutation_stays_committed_when_notification_recipient_is_missing() { async fn queued_ticket_mutation_stays_committed_when_notification_recipient_is_missing() {
let dir = tempfile::tempdir().unwrap(); let dir = tempfile::tempdir().unwrap();
let api = test_api(dir.path()).await; init_clean_git_workspace(dir.path());
let (api, execution) = test_api_with_recording_backend(dir.path()).await;
let source = api let source = api
.runtime .runtime
.spawn_worker( .spawn_worker(
@@ -15829,6 +15842,19 @@ mod tests {
.unwrap() .unwrap()
.worker .worker
.unwrap(); .unwrap();
let orchestrator = scoped_start_workspace_orchestrator(
State(api.clone()),
AxumPath(ScopedWorkspacePath {
workspace_id: TEST_WORKSPACE_ID.to_string(),
}),
)
.await
.unwrap()
.0
.worker
.expect("Workspace Orchestrator should be available")
.worker;
let _ = execution.take_inputs();
let backend = browser_ticket_backend(&api).unwrap(); let backend = browser_ticket_backend(&api).unwrap();
let mut input = ticket::NewTicket::new("Queued notification"); let mut input = ticket::NewTicket::new("Queued notification");
input.workflow_state = Some(TicketWorkflowState::Queued); input.workflow_state = Some(TicketWorkflowState::Queued);
@@ -15908,12 +15934,28 @@ mod tests {
let warning = &warnings[0]; let warning = &warnings[0];
assert_eq!(warning.level, "warning"); assert_eq!(warning.level, "warning");
assert_eq!(warning.event, "ticket_notification_delivery_failed"); assert_eq!(warning.event, "ticket_notification_delivery_failed");
assert_eq!(warning.workspace_id, TEST_WORKSPACE_ID);
assert_eq!(warning.current_state, TicketWorkflowState::Queued.as_str());
assert_eq!(warning.recipient_runtime_id, missing_recipient.runtime_id); assert_eq!(warning.recipient_runtime_id, missing_recipient.runtime_id);
assert_eq!(warning.recipient_worker_id, missing_recipient.worker_id); assert_eq!(warning.recipient_worker_id, missing_recipient.worker_id);
assert_eq!(warning.error_category, "unknown_worker"); assert_eq!(warning.error_category, "unknown_worker");
let serialized = serde_json::to_string(warning).unwrap(); let serialized = serde_json::to_string(warning).unwrap();
assert!(!serialized.contains("queued update")); assert!(!serialized.contains("queued update"));
assert!(!serialized.contains("Ticket notification:")); assert!(!serialized.contains("Ticket notification:"));
let notifications = execution.take_inputs();
assert_eq!(notifications.len(), 1);
assert_eq!(
notifications[0].0.worker_id.to_string(),
orchestrator.worker_id
);
assert_eq!(
notifications[0].1,
ticket_notification_content(
ticket_ref.id.as_str(),
TicketWorkflowState::Queued.as_str()
)
);
} }
#[tokio::test] #[tokio::test]