| 846 | } |
| 847 | |
| 848 | func WorkspaceBuild(t testing.TB, db database.Store, orig database.WorkspaceBuild) database.WorkspaceBuild { |
| 849 | t.Helper() |
| 850 | |
| 851 | buildID := takeFirst(orig.ID, uuid.New()) |
| 852 | jobID := takeFirst(orig.JobID, uuid.New()) |
| 853 | hasAITask := takeFirst(orig.HasAITask, sql.NullBool{}) |
| 854 | hasExternalAgent := takeFirst(orig.HasExternalAgent, sql.NullBool{}) |
| 855 | var build database.WorkspaceBuild |
| 856 | err := db.InTx(func(db database.Store) error { |
| 857 | err := db.InsertWorkspaceBuild(genCtx, database.InsertWorkspaceBuildParams{ |
| 858 | ID: buildID, |
| 859 | CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()), |
| 860 | UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()), |
| 861 | WorkspaceID: takeFirst(orig.WorkspaceID, uuid.New()), |
| 862 | TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()), |
| 863 | BuildNumber: takeFirst(orig.BuildNumber, 1), |
| 864 | Transition: takeFirst(orig.Transition, database.WorkspaceTransitionStart), |
| 865 | InitiatorID: takeFirst(orig.InitiatorID, uuid.New()), |
| 866 | JobID: jobID, |
| 867 | ProvisionerState: []byte{}, |
| 868 | Deadline: takeFirst(orig.Deadline, dbtime.Now().Add(time.Hour)), |
| 869 | MaxDeadline: takeFirst(orig.MaxDeadline, time.Time{}), |
| 870 | Reason: takeFirst(orig.Reason, database.BuildReasonInitiator), |
| 871 | TemplateVersionPresetID: takeFirst(orig.TemplateVersionPresetID, uuid.NullUUID{ |
| 872 | UUID: uuid.UUID{}, |
| 873 | Valid: false, |
| 874 | }), |
| 875 | }) |
| 876 | if err != nil { |
| 877 | return err |
| 878 | } |
| 879 | |
| 880 | if orig.DailyCost > 0 { |
| 881 | err = db.UpdateWorkspaceBuildCostByID(genCtx, database.UpdateWorkspaceBuildCostByIDParams{ |
| 882 | ID: buildID, |
| 883 | DailyCost: orig.DailyCost, |
| 884 | }) |
| 885 | require.NoError(t, err) |
| 886 | } |
| 887 | |
| 888 | if hasAITask.Valid || hasExternalAgent.Valid { |
| 889 | require.NoError(t, db.UpdateWorkspaceBuildFlagsByID(genCtx, database.UpdateWorkspaceBuildFlagsByIDParams{ |
| 890 | ID: buildID, |
| 891 | HasAITask: hasAITask, |
| 892 | HasExternalAgent: hasExternalAgent, |
| 893 | UpdatedAt: dbtime.Now(), |
| 894 | })) |
| 895 | } |
| 896 | |
| 897 | build, err = db.GetWorkspaceBuildByID(genCtx, buildID) |
| 898 | if err != nil { |
| 899 | return err |
| 900 | } |
| 901 | return nil |
| 902 | }, nil) |
| 903 | require.NoError(t, err, "insert workspace build") |
| 904 | |
| 905 | return build |