mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat(coderd): notify on task completion/failure (#20327)
Adds notifications on task transitions to completed or failure state. Authored by Claude, I reviewed it and it appears to be legit.
This commit is contained in:
@@ -1061,6 +1061,64 @@ func TestTasksNotification(t *testing.T) {
|
||||
notificationTemplate: notifications.TemplateTaskIdle,
|
||||
taskPrompt: "This is a very long task prompt that should be truncated to 160 characters. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
},
|
||||
// Should send TemplateTaskCompleted when the AI task transitions to 'Complete'.
|
||||
{
|
||||
name: "TemplateTaskCompleted",
|
||||
latestAppStatuses: []codersdk.WorkspaceAppStatusState{codersdk.WorkspaceAppStatusStateWorking},
|
||||
newAppStatus: codersdk.WorkspaceAppStatusStateComplete,
|
||||
isAITask: true,
|
||||
isNotificationSent: true,
|
||||
notificationTemplate: notifications.TemplateTaskCompleted,
|
||||
taskPrompt: "TemplateTaskCompleted",
|
||||
},
|
||||
// Should send TemplateTaskFailed when the AI task transitions to 'Failure'.
|
||||
{
|
||||
name: "TemplateTaskFailed",
|
||||
latestAppStatuses: []codersdk.WorkspaceAppStatusState{codersdk.WorkspaceAppStatusStateWorking},
|
||||
newAppStatus: codersdk.WorkspaceAppStatusStateFailure,
|
||||
isAITask: true,
|
||||
isNotificationSent: true,
|
||||
notificationTemplate: notifications.TemplateTaskFailed,
|
||||
taskPrompt: "TemplateTaskFailed",
|
||||
},
|
||||
// Should send TemplateTaskCompleted when the AI task transitions from 'Idle' to 'Complete'.
|
||||
{
|
||||
name: "TemplateTaskCompletedFromIdle",
|
||||
latestAppStatuses: []codersdk.WorkspaceAppStatusState{codersdk.WorkspaceAppStatusStateIdle},
|
||||
newAppStatus: codersdk.WorkspaceAppStatusStateComplete,
|
||||
isAITask: true,
|
||||
isNotificationSent: true,
|
||||
notificationTemplate: notifications.TemplateTaskCompleted,
|
||||
taskPrompt: "TemplateTaskCompletedFromIdle",
|
||||
},
|
||||
// Should send TemplateTaskFailed when the AI task transitions from 'Idle' to 'Failure'.
|
||||
{
|
||||
name: "TemplateTaskFailedFromIdle",
|
||||
latestAppStatuses: []codersdk.WorkspaceAppStatusState{codersdk.WorkspaceAppStatusStateIdle},
|
||||
newAppStatus: codersdk.WorkspaceAppStatusStateFailure,
|
||||
isAITask: true,
|
||||
isNotificationSent: true,
|
||||
notificationTemplate: notifications.TemplateTaskFailed,
|
||||
taskPrompt: "TemplateTaskFailedFromIdle",
|
||||
},
|
||||
// Should NOT send notification when transitioning from 'Complete' to 'Complete' (no change).
|
||||
{
|
||||
name: "NoNotificationCompleteToComplete",
|
||||
latestAppStatuses: []codersdk.WorkspaceAppStatusState{codersdk.WorkspaceAppStatusStateComplete},
|
||||
newAppStatus: codersdk.WorkspaceAppStatusStateComplete,
|
||||
isAITask: true,
|
||||
isNotificationSent: false,
|
||||
taskPrompt: "NoNotificationCompleteToComplete",
|
||||
},
|
||||
// Should NOT send notification when transitioning from 'Failure' to 'Failure' (no change).
|
||||
{
|
||||
name: "NoNotificationFailureToFailure",
|
||||
latestAppStatuses: []codersdk.WorkspaceAppStatusState{codersdk.WorkspaceAppStatusStateFailure},
|
||||
newAppStatus: codersdk.WorkspaceAppStatusStateFailure,
|
||||
isAITask: true,
|
||||
isNotificationSent: false,
|
||||
taskPrompt: "NoNotificationFailureToFailure",
|
||||
},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
Reference in New Issue
Block a user