Skip to content

Commit 19c68a0

Browse files
committed
chore: convert dbfake.Workspace and .WorkspaceWithAgent to a builder pattern
1 parent 6c67add commit 19c68a0

File tree

1 file changed

+69
-28
lines changed

1 file changed

+69
-28
lines changed

coderd/database/dbfake/dbfake.go

Lines changed: 69 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,78 @@ 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+
}
2738

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
2870
// This intentionally fulfills the minimum requirements of the schema.
2971
// 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,
3476
})
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()
3887
}
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
4096
}
4197

4298
// WorkspaceWithAgent is a helper that generates a workspace with a single resource
@@ -48,23 +104,8 @@ func WorkspaceWithAgent(
48104
database.Workspace, string,
49105
) {
50106
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
68109
}
69110

70111
type WorkspaceBuildBuilder struct {

0 commit comments

Comments
 (0)