MCPcopy Index your code
hub / github.com/coder/coder / createTaskInState

Function createTaskInState

coderd/aitasks_test.go:50–109  ·  view source on GitHub ↗

createTaskInState is a helper to create a task in the desired state. It returns a function that takes context, test, and status, and returns the task. The caller is responsible for setting up the database, owner, and user.

(db database.Store, ownerSubject rbac.Subject, ownerOrgID, userID uuid.UUID)

Source from the content-addressed store, hash-verified

48// It returns a function that takes context, test, and status, and returns the task.
49// The caller is responsible for setting up the database, owner, and user.
50func createTaskInState(db database.Store, ownerSubject rbac.Subject, ownerOrgID, userID uuid.UUID) func(context.Context, *testing.T, database.TaskStatus) database.Task {
51 return func(ctx context.Context, t *testing.T, status database.TaskStatus) database.Task {
52 ctx = dbauthz.As(ctx, ownerSubject)
53
54 builder := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{
55 OrganizationID: ownerOrgID,
56 OwnerID: userID,
57 }).
58 WithTask(database.TaskTable{
59 OrganizationID: ownerOrgID,
60 OwnerID: userID,
61 }, nil)
62
63 switch status {
64 case database.TaskStatusPending:
65 builder = builder.Pending()
66 case database.TaskStatusInitializing:
67 builder = builder.Starting()
68 case database.TaskStatusActive:
69 // Default builder produces a succeeded start build.
70 // Post-processing below sets agent and app to active.
71 case database.TaskStatusPaused:
72 builder = builder.Seed(database.WorkspaceBuild{
73 Transition: database.WorkspaceTransitionStop,
74 })
75 case database.TaskStatusError:
76 // For error state, create a completed build then manipulate app health.
77 default:
78 require.Fail(t, "unsupported task status in test helper", "status: %s", status)
79 }
80
81 resp := builder.Do()
82
83 // Post-process by manipulating agent and app state.
84 if status == database.TaskStatusActive || status == database.TaskStatusError {
85 // Set agent to ready state so agent_status returns 'active'.
86 err := db.UpdateWorkspaceAgentLifecycleStateByID(ctx, database.UpdateWorkspaceAgentLifecycleStateByIDParams{
87 ID: resp.Agents[0].ID,
88 LifecycleState: database.WorkspaceAgentLifecycleStateReady,
89 })
90 require.NoError(t, err)
91
92 apps, err := db.GetWorkspaceAppsByAgentID(ctx, resp.Agents[0].ID)
93 require.NoError(t, err)
94 require.Len(t, apps, 1, "expected exactly one app for task")
95
96 appHealth := database.WorkspaceAppHealthHealthy
97 if status == database.TaskStatusError {
98 appHealth = database.WorkspaceAppHealthUnhealthy
99 }
100 err = db.UpdateWorkspaceAppHealthByID(ctx, database.UpdateWorkspaceAppHealthByIDParams{
101 ID: apps[0].ID,
102 Health: appHealth,
103 })
104 require.NoError(t, err)
105 }
106
107 return resp.Task

Callers 3

TestTasksFunction · 0.85
TestPauseTaskFunction · 0.85
TestResumeTaskFunction · 0.85

Calls 12

AsFunction · 0.92
WorkspaceBuildFunction · 0.92
WithTaskMethod · 0.80
PendingMethod · 0.80
DoMethod · 0.65
StartingMethod · 0.45
SeedMethod · 0.45
FailMethod · 0.45
LenMethod · 0.45

Tested by

no test coverage detected