Skip to content

Commit 837f66a

Browse files
committed
Add template unit test
1 parent e8ab762 commit 837f66a

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

coderd/authzquery/authz_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,10 @@ func TestAuthzQueryRecursive(t *testing.T) {
7171
reflect.ValueOf(q).Method(i).Call(ins)
7272
}
7373
}
74+
75+
func must[T any](value T, err error) T {
76+
if err != nil {
77+
panic(err)
78+
}
79+
return value
80+
}

coderd/authzquery/job_test.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package authzquery_test
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/google/uuid"
8+
9+
"github.com/coder/coder/coderd/database"
10+
"github.com/coder/coder/coderd/database/dbgen"
11+
"github.com/coder/coder/coderd/rbac"
12+
)
13+
14+
func (suite *MethodTestSuite) TestProvsionerJob() {
15+
suite.Run("Build/GetProvisionerJobByID", func() {
16+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
17+
w := dbgen.Workspace(t, db, database.Workspace{})
18+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{
19+
Type: database.ProvisionerJobTypeWorkspaceBuild,
20+
})
21+
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{JobID: j.ID, WorkspaceID: w.ID})
22+
return methodCase(inputs(j.ID), asserts(w, rbac.ActionRead))
23+
})
24+
})
25+
suite.Run("TemplateVersion/GetProvisionerJobByID", func() {
26+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
27+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{
28+
Type: database.ProvisionerJobTypeTemplateVersionImport,
29+
})
30+
tpl := dbgen.Template(t, db, database.Template{})
31+
v := dbgen.TemplateVersion(t, db, database.TemplateVersion{
32+
TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true},
33+
JobID: j.ID,
34+
})
35+
return methodCase(inputs(j.ID), asserts(v.RBACObject(tpl), rbac.ActionRead))
36+
})
37+
})
38+
suite.Run("TemplateVersionDryRun/GetProvisionerJobByID", func() {
39+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
40+
tpl := dbgen.Template(t, db, database.Template{})
41+
v := dbgen.TemplateVersion(t, db, database.TemplateVersion{
42+
TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true},
43+
})
44+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{
45+
Type: database.ProvisionerJobTypeTemplateVersionDryRun,
46+
Input: must(json.Marshal(struct {
47+
TemplateVersionID uuid.UUID `json:"template_version_id"`
48+
}{TemplateVersionID: v.ID})),
49+
})
50+
return methodCase(inputs(j.ID), asserts(v.RBACObject(tpl), rbac.ActionRead))
51+
})
52+
})
53+
suite.Run("Build/UpdateProvisionerJobWithCancelByID", func() {
54+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
55+
tpl := dbgen.Template(t, db, database.Template{AllowUserCancelWorkspaceJobs: true})
56+
w := dbgen.Workspace(t, db, database.Workspace{TemplateID: tpl.ID})
57+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{
58+
Type: database.ProvisionerJobTypeWorkspaceBuild,
59+
})
60+
_ = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{JobID: j.ID, WorkspaceID: w.ID})
61+
return methodCase(inputs(database.UpdateProvisionerJobWithCancelByIDParams{ID: j.ID}), asserts(w, rbac.ActionUpdate))
62+
})
63+
})
64+
suite.Run("TemplateVersion/UpdateProvisionerJobWithCancelByID", func() {
65+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
66+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{
67+
Type: database.ProvisionerJobTypeTemplateVersionImport,
68+
})
69+
tpl := dbgen.Template(t, db, database.Template{})
70+
v := dbgen.TemplateVersion(t, db, database.TemplateVersion{
71+
TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true},
72+
JobID: j.ID,
73+
})
74+
return methodCase(inputs(database.UpdateProvisionerJobWithCancelByIDParams{ID: j.ID}),
75+
asserts(v.RBACObject(tpl), []rbac.Action{rbac.ActionRead, rbac.ActionUpdate}))
76+
})
77+
})
78+
suite.Run("TemplateVersionDryRun/UpdateProvisionerJobWithCancelByID", func() {
79+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
80+
tpl := dbgen.Template(t, db, database.Template{})
81+
v := dbgen.TemplateVersion(t, db, database.TemplateVersion{
82+
TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true},
83+
})
84+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{
85+
Type: database.ProvisionerJobTypeTemplateVersionDryRun,
86+
Input: must(json.Marshal(struct {
87+
TemplateVersionID uuid.UUID `json:"template_version_id"`
88+
}{TemplateVersionID: v.ID})),
89+
})
90+
return methodCase(inputs(database.UpdateProvisionerJobWithCancelByIDParams{ID: j.ID}),
91+
asserts(v.RBACObject(tpl), []rbac.Action{rbac.ActionRead, rbac.ActionUpdate}))
92+
})
93+
})
94+
}

0 commit comments

Comments
 (0)