Skip to content

Commit 0da03c6

Browse files
committed
Implement parameters tests
1 parent a7899cf commit 0da03c6

File tree

2 files changed

+140
-13
lines changed

2 files changed

+140
-13
lines changed

coderd/authzquery/parameters.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,35 @@ func (q *AuthzQuerier) parameterRBACResource(ctx context.Context, scope database
1717
var err error
1818
switch scope {
1919
case database.ParameterScopeWorkspace:
20-
resource, err = q.database.GetWorkspaceByID(ctx, scopeID)
20+
return q.database.GetWorkspaceByID(ctx, scopeID)
2121
case database.ParameterScopeImportJob:
2222
var version database.TemplateVersion
2323
version, err = q.database.GetTemplateVersionByJobID(ctx, scopeID)
2424
if err != nil {
2525
if errors.Is(err, sql.ErrNoRows) {
2626
// Template version does not exist yet, fall back to rbac.ResourceTemplate
27+
// TODO: This is likely incorrect because we do not have an org ID.
2728
resource = rbac.ResourceTemplate
2829
err = nil
30+
} else {
31+
return nil, err
2932
}
30-
break
3133
}
34+
resource = version.RBACObjectNoTemplate()
35+
3236
var template database.Template
3337
template, err = q.database.GetTemplateByID(ctx, version.TemplateID.UUID)
34-
if err != nil {
35-
break
38+
if err == nil {
39+
resource = version.RBACObject(template)
40+
} else if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
41+
return nil, err
3642
}
37-
resource = version.RBACObject(template)
38-
43+
return resource, nil
3944
case database.ParameterScopeTemplate:
40-
resource, err = q.database.GetTemplateByID(ctx, scopeID)
45+
return q.database.GetTemplateByID(ctx, scopeID)
4146
default:
42-
err = xerrors.Errorf("Parameter scope %q unsupported", scope)
43-
}
44-
45-
if err != nil {
46-
return nil, err
47+
return nil, xerrors.Errorf("Parameter scope %q unsupported", scope)
4748
}
48-
return resource, nil
4949
}
5050

5151
func (q *AuthzQuerier) InsertParameterValue(ctx context.Context, arg database.InsertParameterValueParams) (database.ParameterValue, error) {

coderd/authzquery/parameters_test.go

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package authzquery_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/google/uuid"
7+
8+
"github.com/coder/coder/coderd/database/dbgen"
9+
10+
"github.com/coder/coder/coderd/database"
11+
"github.com/coder/coder/coderd/rbac"
12+
)
13+
14+
func (suite *MethodTestSuite) TestParameters() {
15+
suite.Run("Workspace/InsertParameterValue", func() {
16+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
17+
w := dbgen.Workspace(t, db, database.Workspace{})
18+
return methodCase(inputs(database.InsertParameterValueParams{
19+
ScopeID: w.ID,
20+
Scope: database.ParameterScopeWorkspace,
21+
SourceScheme: database.ParameterSourceSchemeNone,
22+
DestinationScheme: database.ParameterDestinationSchemeNone,
23+
}), asserts(w, rbac.ActionUpdate))
24+
})
25+
})
26+
suite.Run("TemplateVersionNoTemplate/InsertParameterValue", func() {
27+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
28+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{})
29+
v := dbgen.TemplateVersion(t, db, database.TemplateVersion{JobID: j.ID, TemplateID: uuid.NullUUID{Valid: false}})
30+
return methodCase(inputs(database.InsertParameterValueParams{
31+
ScopeID: j.ID,
32+
Scope: database.ParameterScopeImportJob,
33+
SourceScheme: database.ParameterSourceSchemeNone,
34+
DestinationScheme: database.ParameterDestinationSchemeNone,
35+
}), asserts(v.RBACObjectNoTemplate(), rbac.ActionUpdate))
36+
})
37+
})
38+
suite.Run("TemplateVersionTemplate/InsertParameterValue", func() {
39+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
40+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{})
41+
tpl := dbgen.Template(t, db, database.Template{})
42+
v := dbgen.TemplateVersion(t, db, database.TemplateVersion{JobID: j.ID,
43+
TemplateID: uuid.NullUUID{
44+
UUID: tpl.ID,
45+
Valid: true,
46+
}},
47+
)
48+
return methodCase(inputs(database.InsertParameterValueParams{
49+
ScopeID: j.ID,
50+
Scope: database.ParameterScopeImportJob,
51+
SourceScheme: database.ParameterSourceSchemeNone,
52+
DestinationScheme: database.ParameterDestinationSchemeNone,
53+
}), asserts(v.RBACObject(tpl), rbac.ActionUpdate))
54+
})
55+
})
56+
suite.Run("Template/InsertParameterValue", func() {
57+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
58+
tpl := dbgen.Template(t, db, database.Template{})
59+
return methodCase(inputs(database.InsertParameterValueParams{
60+
ScopeID: tpl.ID,
61+
Scope: database.ParameterScopeTemplate,
62+
SourceScheme: database.ParameterSourceSchemeNone,
63+
DestinationScheme: database.ParameterDestinationSchemeNone,
64+
}), asserts(tpl, rbac.ActionUpdate))
65+
})
66+
})
67+
suite.Run("Template/ParameterValue", func() {
68+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
69+
tpl := dbgen.Template(t, db, database.Template{})
70+
pv := dbgen.ParameterValue(t, db, database.ParameterValue{
71+
ScopeID: tpl.ID,
72+
Scope: database.ParameterScopeTemplate,
73+
})
74+
return methodCase(inputs(pv.ID), asserts(tpl, rbac.ActionRead))
75+
})
76+
})
77+
suite.Run("ParameterValues", func() {
78+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
79+
tpl := dbgen.Template(t, db, database.Template{})
80+
a := dbgen.ParameterValue(t, db, database.ParameterValue{
81+
ScopeID: tpl.ID,
82+
Scope: database.ParameterScopeTemplate,
83+
})
84+
w := dbgen.Workspace(t, db, database.Workspace{})
85+
b := dbgen.ParameterValue(t, db, database.ParameterValue{
86+
ScopeID: w.ID,
87+
Scope: database.ParameterScopeWorkspace,
88+
})
89+
return methodCase(inputs(database.ParameterValuesParams{
90+
IDs: []uuid.UUID{a.ID, b.ID},
91+
}), asserts(tpl, rbac.ActionRead, w, rbac.ActionRead))
92+
})
93+
})
94+
suite.Run("GetParameterSchemasByJobID", func() {
95+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
96+
j := dbgen.ProvisionerJob(t, db, database.ProvisionerJob{})
97+
tpl := dbgen.Template(t, db, database.Template{})
98+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{JobID: j.ID, TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true}})
99+
_ = dbgen.ParameterSchema(t, db, database.ParameterSchema{JobID: j.ID})
100+
return methodCase(inputs(j.ID), asserts(tv.RBACObject(tpl), rbac.ActionRead))
101+
})
102+
})
103+
suite.Run("Workspace/GetParameterValueByScopeAndName", func() {
104+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
105+
w := dbgen.Workspace(t, db, database.Workspace{})
106+
v := dbgen.ParameterValue(t, db, database.ParameterValue{
107+
Scope: database.ParameterScopeWorkspace,
108+
ScopeID: w.ID,
109+
})
110+
return methodCase(inputs(database.GetParameterValueByScopeAndNameParams{
111+
Scope: v.Scope,
112+
ScopeID: v.ScopeID,
113+
Name: v.Name,
114+
}), asserts(w, rbac.ActionRead))
115+
})
116+
})
117+
suite.Run("Workspace/DeleteParameterValueByID", func() {
118+
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
119+
w := dbgen.Workspace(t, db, database.Workspace{})
120+
v := dbgen.ParameterValue(t, db, database.ParameterValue{
121+
Scope: database.ParameterScopeWorkspace,
122+
ScopeID: w.ID,
123+
})
124+
return methodCase(inputs(v.ID), asserts(w, rbac.ActionUpdate))
125+
})
126+
})
127+
}

0 commit comments

Comments
 (0)