Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e1ce04e

Browse files
committed
finish testing template methods
1 parent 13a8445 commit e1ce04e

File tree

3 files changed

+264
-4
lines changed

3 files changed

+264
-4
lines changed

coderd/authzquery/methods_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var (
2727
"InTx": "Not relevant",
2828
"Ping": "Not relevant",
2929
"GetAuthorizedWorkspaces": "Will not be exposed",
30+
"GetAuthorizedTemplates": "Will not be exposed",
3031
}
3132
)
3233

coderd/authzquery/template.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func (q *AuthzQuerier) GetTemplateVersionByTemplateIDAndName(ctx context.Context
116116

117117
func (q *AuthzQuerier) GetTemplateVersionParameters(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionParameter, error) {
118118
// An actor can read template version parameters if they can read the related template.
119-
tv, err := q.GetTemplateVersionByID(ctx, templateVersionID)
119+
tv, err := q.database.GetTemplateVersionByID(ctx, templateVersionID)
120120
if err != nil {
121121
return nil, err
122122
}
@@ -288,7 +288,21 @@ func (q *AuthzQuerier) UpdateTemplateVersionByID(ctx context.Context, arg databa
288288

289289
func (q *AuthzQuerier) UpdateTemplateVersionDescriptionByJobID(ctx context.Context, arg database.UpdateTemplateVersionDescriptionByJobIDParams) error {
290290
// An actor is allowed to update the template version description if they are authorized to update the template.
291-
if err := q.authorizeContext(ctx, rbac.ActionUpdate, rbac.ResourceTemplate.All()); err != nil {
291+
tv, err := q.database.GetTemplateVersionByJobID(ctx, arg.JobID)
292+
if err != nil {
293+
return err
294+
}
295+
var obj rbac.Objecter
296+
if !tv.TemplateID.Valid {
297+
obj = rbac.ResourceTemplate.InOrg(tv.OrganizationID)
298+
} else {
299+
tpl, err := q.database.GetTemplateByID(ctx, tv.TemplateID.UUID)
300+
if err != nil {
301+
return err
302+
}
303+
obj = tpl
304+
}
305+
if err := q.authorizeContext(ctx, rbac.ActionUpdate, obj); err != nil {
292306
return err
293307
}
294308
return q.database.UpdateTemplateVersionDescriptionByJobID(ctx, arg)

coderd/authzquery/template_test.go

Lines changed: 247 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,262 @@ package authzquery_test
22

33
import (
44
"testing"
5+
"time"
6+
7+
"github.com/google/uuid"
58

69
"github.com/coder/coder/coderd/database"
710
"github.com/coder/coder/coderd/database/dbgen"
811
"github.com/coder/coder/coderd/rbac"
912
)
1013

1114
func (suite *MethodTestSuite) TestTemplate() {
15+
suite.Run("GetPreviousTemplateVersion", func() {
16+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
17+
tvid := uuid.New()
18+
now := time.Now()
19+
o1 := dbgen.Organization(t, db, database.Organization{})
20+
t1 := dbgen.Template(t, db, database.Template{
21+
OrganizationID: o1.ID,
22+
ActiveVersionID: tvid,
23+
})
24+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
25+
CreatedAt: now.Add(-time.Hour),
26+
ID: tvid,
27+
Name: t1.Name,
28+
OrganizationID: o1.ID,
29+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true}})
30+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
31+
CreatedAt: now.Add(-2 * time.Hour),
32+
Name: t1.Name,
33+
OrganizationID: o1.ID,
34+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true}})
35+
return methodCase(inputs(database.GetPreviousTemplateVersionParams{
36+
Name: t1.Name,
37+
OrganizationID: o1.ID,
38+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
39+
}), asserts(t1, rbac.ActionRead))
40+
})
41+
})
42+
suite.Run("GetTemplateAverageBuildTime", func() {
43+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
44+
t1 := dbgen.Template(t, db, database.Template{})
45+
return methodCase(inputs(database.GetTemplateAverageBuildTimeParams{
46+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
47+
}), asserts(t1, rbac.ActionRead))
48+
})
49+
})
1250
suite.Run("GetTemplateByID", func() {
1351
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
14-
obj := dbgen.Template(t, db, database.Template{})
15-
return methodCase(inputs(obj.ID), asserts(obj, rbac.ActionRead))
52+
t1 := dbgen.Template(t, db, database.Template{})
53+
return methodCase(inputs(t1.ID), asserts(t1, rbac.ActionRead))
54+
})
55+
})
56+
suite.Run("GetTemplateByOrganizationAndName", func() {
57+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
58+
o1 := dbgen.Organization(t, db, database.Organization{})
59+
t1 := dbgen.Template(t, db, database.Template{
60+
OrganizationID: o1.ID,
61+
})
62+
return methodCase(inputs(database.GetTemplateByOrganizationAndNameParams{
63+
Name: t1.Name,
64+
OrganizationID: o1.ID,
65+
}), asserts(t1, rbac.ActionRead))
66+
})
67+
})
68+
suite.Run("GetTemplateDAUs", func() {
69+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
70+
t1 := dbgen.Template(t, db, database.Template{})
71+
return methodCase(inputs(t1.ID), asserts(t1, rbac.ActionRead))
72+
})
73+
})
74+
suite.Run("GetTemplateVersionByJobID", func() {
75+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
76+
t1 := dbgen.Template(t, db, database.Template{})
77+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
78+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
79+
})
80+
return methodCase(inputs(tv.JobID), asserts(t1, rbac.ActionRead))
81+
})
82+
})
83+
suite.Run("GetTemplateVersionByTemplateIDAndName", func() {
84+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
85+
t1 := dbgen.Template(t, db, database.Template{})
86+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
87+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
88+
})
89+
return methodCase(inputs(database.GetTemplateVersionByTemplateIDAndNameParams{
90+
Name: tv.Name,
91+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
92+
}), asserts(t1, rbac.ActionRead))
93+
})
94+
})
95+
suite.Run("GetTemplateVersionParameters", func() {
96+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
97+
t1 := dbgen.Template(t, db, database.Template{})
98+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
99+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
100+
})
101+
return methodCase(inputs(tv.ID), asserts(t1, rbac.ActionRead))
102+
})
103+
})
104+
suite.Run("GetTemplateGroupRoles", func() {
105+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
106+
t1 := dbgen.Template(t, db, database.Template{})
107+
return methodCase(inputs(t1.ID), asserts(t1, rbac.ActionRead))
108+
})
109+
})
110+
suite.Run("GetTemplateUserRoles", func() {
111+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
112+
t1 := dbgen.Template(t, db, database.Template{})
113+
return methodCase(inputs(t1.ID), asserts(t1, rbac.ActionRead))
114+
})
115+
})
116+
suite.Run("GetTemplateVersionByID", func() {
117+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
118+
t1 := dbgen.Template(t, db, database.Template{})
119+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
120+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
121+
})
122+
return methodCase(inputs(tv.ID), asserts(t1, rbac.ActionRead))
123+
})
124+
})
125+
suite.Run("GetTemplateVersionsByIDs", func() {
126+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
127+
t1 := dbgen.Template(t, db, database.Template{})
128+
t2 := dbgen.Template(t, db, database.Template{})
129+
tv1 := dbgen.TemplateVersion(t, db, database.TemplateVersion{
130+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
131+
})
132+
tv2 := dbgen.TemplateVersion(t, db, database.TemplateVersion{
133+
TemplateID: uuid.NullUUID{UUID: t2.ID, Valid: true},
134+
})
135+
return methodCase(inputs([]uuid.UUID{tv1.ID, tv2.ID}),
136+
asserts(t1, rbac.ActionRead, t2, rbac.ActionRead))
137+
})
138+
})
139+
suite.Run("GetTemplateVersionsByTemplateID", func() {
140+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
141+
t1 := dbgen.Template(t, db, database.Template{})
142+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
143+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
144+
})
145+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
146+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
147+
})
148+
return methodCase(inputs(database.GetTemplateVersionsByTemplateIDParams{
149+
TemplateID: t1.ID,
150+
}), asserts(t1, rbac.ActionRead))
151+
})
152+
})
153+
suite.Run("GetTemplateVersionsCreatedAfter", func() {
154+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
155+
now := time.Now()
156+
t1 := dbgen.Template(t, db, database.Template{})
157+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
158+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
159+
CreatedAt: now.Add(-time.Hour),
160+
})
161+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
162+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
163+
CreatedAt: now.Add(-2 * time.Hour),
164+
})
165+
return methodCase(inputs(now.Add(-time.Hour)), asserts(rbac.ResourceTemplate.All(), rbac.ActionRead))
166+
})
167+
})
168+
suite.Run("GetTemplatesWithFilter", func() {
169+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
170+
_ = dbgen.Template(t, db, database.Template{})
171+
// No asserts because SQLFilter.
172+
return methodCase(inputs(database.GetTemplatesWithFilterParams{}), asserts())
173+
})
174+
})
175+
suite.Run("InsertTemplate", func() {
176+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
177+
orgID := uuid.New()
178+
return methodCase(inputs(database.InsertTemplateParams{
179+
Provisioner: "echo",
180+
OrganizationID: orgID,
181+
}), asserts(rbac.ResourceTemplate.InOrg(orgID), rbac.ActionCreate))
182+
})
183+
})
184+
suite.Run("InsertTemplateVersion", func() {
185+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
186+
t1 := dbgen.Template(t, db, database.Template{})
187+
return methodCase(inputs(database.InsertTemplateVersionParams{
188+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
189+
OrganizationID: t1.OrganizationID,
190+
}), asserts(t1, rbac.ActionRead, t1, rbac.ActionCreate))
191+
})
192+
})
193+
suite.Run("SoftDeleteTemplateByID", func() {
194+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
195+
t1 := dbgen.Template(t, db, database.Template{})
196+
return methodCase(inputs(t1.ID), asserts(t1, rbac.ActionDelete))
197+
})
198+
})
199+
suite.Run("UpdateTemplateACLByID", func() {
200+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
201+
t1 := dbgen.Template(t, db, database.Template{})
202+
return methodCase(inputs(database.UpdateTemplateACLByIDParams{
203+
ID: t1.ID,
204+
}), asserts(t1, rbac.ActionCreate))
205+
})
206+
})
207+
suite.Run("UpdateTemplateActiveVersionByID", func() {
208+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
209+
t1 := dbgen.Template(t, db, database.Template{})
210+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
211+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
212+
})
213+
return methodCase(inputs(database.UpdateTemplateActiveVersionByIDParams{
214+
ID: t1.ID,
215+
ActiveVersionID: tv.ID,
216+
}), asserts(t1, rbac.ActionUpdate))
217+
})
218+
})
219+
suite.Run("UpdateTemplateDeletedByID", func() {
220+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
221+
t1 := dbgen.Template(t, db, database.Template{})
222+
return methodCase(inputs(database.UpdateTemplateDeletedByIDParams{
223+
ID: t1.ID,
224+
Deleted: true,
225+
}), asserts(t1, rbac.ActionDelete))
226+
})
227+
})
228+
suite.Run("UpdateTemplateMetaByID", func() {
229+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
230+
t1 := dbgen.Template(t, db, database.Template{})
231+
return methodCase(inputs(database.UpdateTemplateMetaByIDParams{
232+
ID: t1.ID,
233+
Name: "foo",
234+
}), asserts(t1, rbac.ActionUpdate))
235+
})
236+
})
237+
suite.Run("UpdateTemplateVersionByID", func() {
238+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
239+
t1 := dbgen.Template(t, db, database.Template{})
240+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
241+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
242+
})
243+
return methodCase(inputs(database.UpdateTemplateVersionByIDParams{
244+
ID: tv.ID,
245+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
246+
}), asserts(t1, rbac.ActionUpdate))
247+
})
248+
})
249+
suite.Run("UpdateTemplateVersionDescriptionByJobID", func() {
250+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
251+
jobID := uuid.New()
252+
t1 := dbgen.Template(t, db, database.Template{})
253+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
254+
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
255+
JobID: jobID,
256+
})
257+
return methodCase(inputs(database.UpdateTemplateVersionDescriptionByJobIDParams{
258+
JobID: jobID,
259+
Readme: "foo",
260+
}), asserts(t1, rbac.ActionUpdate))
16261
})
17262
})
18263
}

0 commit comments

Comments
 (0)