Skip to content

Commit 82d5130

Browse files
authored
chore: convert dbfake.Workspace and .WorkspaceWithAgent to a builder pattern (#10878)
Converts dbfake Workspace and WorkspaceWithAgent to builder pattern.
1 parent b73397e commit 82d5130

File tree

1 file changed

+70
-28
lines changed

1 file changed

+70
-28
lines changed

coderd/database/dbfake/dbfake.go

Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,79 @@ import (
2121
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
2222
)
2323

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+
}
2768

69+
func (b WorkspaceBuilder) Do() WorkspaceResponse {
70+
var r WorkspaceResponse
2871
// This intentionally fulfills the minimum requirements of the schema.
2972
// 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,
3477
})
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
3881
}
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
4097
}
4198

4299
// WorkspaceWithAgent is a helper that generates a workspace with a single resource
@@ -48,23 +105,8 @@ func WorkspaceWithAgent(
48105
database.Workspace, string,
49106
) {
50107
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
68110
}
69111

70112
type WorkspaceBuildBuilder struct {

0 commit comments

Comments
 (0)