@@ -21,22 +21,78 @@ import (
21
21
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
22
22
)
23
23
24
- // Workspace inserts a workspace into the database.
25
- func Workspace (t testing.TB , db database.Store , seed database.Workspace ) database.Workspace {
26
- t .Helper ()
24
+ type WorkspaceBuilder struct {
25
+ t testing.TB
26
+ db database.Store
27
+ seed database.Workspace
28
+ resources []* sdkproto.Resource
29
+ agentToken string
30
+ }
31
+
32
+ type WorkspaceResponse struct {
33
+ Workspace database.Workspace
34
+ Template database.Template
35
+ Build database.WorkspaceBuild
36
+ AgentToken string
37
+ }
27
38
39
+ func NewWorkspaceBuilder (t testing.TB , db database.Store ) WorkspaceBuilder {
40
+ return WorkspaceBuilder {t : t , db : db }
41
+ }
42
+
43
+ func (b WorkspaceBuilder ) Seed (seed database.Workspace ) WorkspaceBuilder {
44
+ //nolint: revive // returns modified struct
45
+ b .seed = seed
46
+ return b
47
+ }
48
+
49
+ func (b WorkspaceBuilder ) WithAgent (mutations ... func ([]* sdkproto.Agent ) []* sdkproto.Agent ) WorkspaceBuilder {
50
+ b .agentToken = uuid .NewString ()
51
+ agents := []* sdkproto.Agent {{
52
+ Id : uuid .NewString (),
53
+ Auth : & sdkproto.Agent_Token {
54
+ Token : b .agentToken ,
55
+ },
56
+ }}
57
+ for _ , m := range mutations {
58
+ agents = m (agents )
59
+ }
60
+ b .resources = append (b .resources , & sdkproto.Resource {
61
+ Name : "example" ,
62
+ Type : "aws_instance" ,
63
+ Agents : agents ,
64
+ })
65
+ return b
66
+ }
67
+
68
+ func (b WorkspaceBuilder ) Do () WorkspaceResponse {
69
+ var r WorkspaceResponse
28
70
// This intentionally fulfills the minimum requirements of the schema.
29
71
// Tests can provide a custom template ID if necessary.
30
- if seed .TemplateID == uuid .Nil {
31
- template : = dbgen .Template (t , db , database.Template {
32
- OrganizationID : seed .OrganizationID ,
33
- CreatedBy : seed .OwnerID ,
72
+ if b . seed .TemplateID == uuid .Nil {
73
+ r . Template = dbgen .Template (b . t , b . db , database.Template {
74
+ OrganizationID : b . seed .OrganizationID ,
75
+ CreatedBy : b . seed .OwnerID ,
34
76
})
35
- seed .TemplateID = template .ID
36
- seed .OwnerID = template .CreatedBy
37
- seed .OrganizationID = template .OrganizationID
77
+ b .seed .TemplateID = r .Template .ID
78
+ b .seed .OwnerID = r .Template .CreatedBy
79
+ b .seed .OrganizationID = r .Template .OrganizationID
80
+ }
81
+ r .Workspace = dbgen .Workspace (b .t , b .db , b .seed )
82
+ if b .agentToken != "" {
83
+ r .AgentToken = b .agentToken
84
+ r .Build = NewWorkspaceBuildBuilder (b .t , b .db , r .Workspace ).
85
+ Resource (b .resources ... ).
86
+ Do ()
38
87
}
39
- return dbgen .Workspace (t , db , seed )
88
+ return r
89
+ }
90
+
91
+ // Workspace inserts a workspace into the database.
92
+ func Workspace (t testing.TB , db database.Store , seed database.Workspace ) database.Workspace {
93
+ t .Helper ()
94
+ r := NewWorkspaceBuilder (t , db ).Seed (seed ).Do ()
95
+ return r .Workspace
40
96
}
41
97
42
98
// WorkspaceWithAgent is a helper that generates a workspace with a single resource
@@ -48,23 +104,8 @@ func WorkspaceWithAgent(
48
104
database.Workspace , string ,
49
105
) {
50
106
t .Helper ()
51
- authToken := uuid .NewString ()
52
- agents := []* sdkproto.Agent {{
53
- Id : uuid .NewString (),
54
- Auth : & sdkproto.Agent_Token {
55
- Token : authToken ,
56
- },
57
- }}
58
- for _ , m := range mutations {
59
- agents = m (agents )
60
- }
61
- ws := Workspace (t , db , seed )
62
- NewWorkspaceBuildBuilder (t , db , ws ).Resource (& sdkproto.Resource {
63
- Name : "example" ,
64
- Type : "aws_instance" ,
65
- Agents : agents ,
66
- }).Do ()
67
- return ws , authToken
107
+ r := NewWorkspaceBuilder (t , db ).Seed (seed ).WithAgent (mutations ... ).Do ()
108
+ return r .Workspace , r .AgentToken
68
109
}
69
110
70
111
type WorkspaceBuildBuilder struct {
0 commit comments