(t *testing.T)
| 3366 | } |
| 3367 | |
| 3368 | func TestReinit(t *testing.T) { |
| 3369 | t.Parallel() |
| 3370 | |
| 3371 | // Helper to create the prebuilds system user's workspace (an |
| 3372 | // unclaimed prebuild) and return the build result. The first |
| 3373 | // build's InitiatorID defaults to PrebuildsSystemUserID via |
| 3374 | // dbfake. |
| 3375 | setupPrebuildWorkspace := func(t *testing.T, db database.Store, orgID uuid.UUID) dbfake.WorkspaceResponse { |
| 3376 | t.Helper() |
| 3377 | return dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ |
| 3378 | OrganizationID: orgID, |
| 3379 | OwnerID: database.PrebuildsSystemUserID, |
| 3380 | }).WithAgent().Do() |
| 3381 | } |
| 3382 | |
| 3383 | // Helper to simulate claiming a prebuild: change the workspace |
| 3384 | // owner to the real user and create a second (claim) build. |
| 3385 | claimPrebuild := func(t *testing.T, db database.Store, sqlDB *sql.DB, ws database.WorkspaceTable, claimerID uuid.UUID, templateVersionID uuid.UUID, complete bool) dbfake.WorkspaceResponse { |
| 3386 | t.Helper() |
| 3387 | // Change the workspace owner to the claiming user. |
| 3388 | _, err := sqlDB.Exec("UPDATE workspaces SET owner_id = $1 WHERE id = $2", claimerID, ws.ID) |
| 3389 | require.NoError(t, err) |
| 3390 | |
| 3391 | // Update the in-memory workspace to reflect the new owner |
| 3392 | // so that dbfake uses it for the second build. |
| 3393 | ws.OwnerID = claimerID |
| 3394 | |
| 3395 | builder := dbfake.WorkspaceBuild(t, db, ws). |
| 3396 | Seed(database.WorkspaceBuild{ |
| 3397 | TemplateVersionID: templateVersionID, |
| 3398 | BuildNumber: 2, |
| 3399 | InitiatorID: claimerID, |
| 3400 | Transition: database.WorkspaceTransitionStart, |
| 3401 | }). |
| 3402 | MarkPrebuiltWorkspaceClaim(). |
| 3403 | WithAgent() |
| 3404 | if !complete { |
| 3405 | builder = builder.Starting() |
| 3406 | } |
| 3407 | return builder.Do() |
| 3408 | } |
| 3409 | |
| 3410 | t.Run("unclaimed prebuild receives reinit via pubsub", func(t *testing.T) { |
| 3411 | t.Parallel() |
| 3412 | |
| 3413 | db, ps := dbtestutil.NewDB(t) |
| 3414 | pubsubSpy := pubsubReinitSpy{ |
| 3415 | Pubsub: ps, |
| 3416 | triedToSubscribe: make(chan string), |
| 3417 | } |
| 3418 | client := coderdtest.New(t, &coderdtest.Options{ |
| 3419 | Database: db, |
| 3420 | Pubsub: &pubsubSpy, |
| 3421 | }) |
| 3422 | user := coderdtest.CreateFirstUser(t, client) |
| 3423 | |
| 3424 | r := setupPrebuildWorkspace(t, db, user.OrganizationID) |
| 3425 |
nothing calls this directly
no test coverage detected