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