Skip to content

Commit 0fd9aa7

Browse files
committed
fix tests
1 parent 765c93a commit 0fd9aa7

File tree

3 files changed

+32
-30
lines changed

3 files changed

+32
-30
lines changed

coderd/provisionerjobs.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"github.com/coder/coder/v2/coderd/database/pubsub"
2121
"github.com/coder/coder/v2/coderd/httpapi"
2222
"github.com/coder/coder/v2/coderd/httpmw"
23+
"github.com/coder/coder/v2/coderd/rbac"
24+
"github.com/coder/coder/v2/coderd/rbac/policy"
2325
"github.com/coder/coder/v2/coderd/util/slice"
2426
"github.com/coder/coder/v2/codersdk"
2527
"github.com/coder/coder/v2/codersdk/wsjson"
@@ -41,6 +43,12 @@ func (api *API) provisionerJobs(rw http.ResponseWriter, r *http.Request) {
4143
ctx := r.Context()
4244
org := httpmw.OrganizationParam(r)
4345

46+
// For now, only owners and template admins can access provisioner jobs.
47+
if !api.Authorize(r, policy.ActionRead, rbac.ResourceProvisionerJobs.InOrg(org.ID)) {
48+
httpapi.ResourceNotFound(rw)
49+
return
50+
}
51+
4452
qp := r.URL.Query()
4553
p := httpapi.NewQueryParamParser()
4654
limit := p.PositiveInt32(qp, 0, "limit")

coderd/provisionerjobs_test.go

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package coderd_test
22

33
import (
44
"context"
5+
"database/sql"
56
"encoding/json"
67
"testing"
78
"time"
@@ -13,6 +14,8 @@ import (
1314
"github.com/coder/coder/v2/coderd/database"
1415
"github.com/coder/coder/v2/coderd/database/dbgen"
1516
"github.com/coder/coder/v2/coderd/database/dbtestutil"
17+
"github.com/coder/coder/v2/coderd/database/dbtime"
18+
"github.com/coder/coder/v2/coderd/rbac"
1619
"github.com/coder/coder/v2/codersdk"
1720
"github.com/coder/coder/v2/provisioner/echo"
1821
"github.com/coder/coder/v2/provisionersdk/proto"
@@ -22,37 +25,16 @@ import (
2225
func TestProvisionerJobs(t *testing.T) {
2326
t.Parallel()
2427

25-
// encode := func(v interface{}) []byte {
26-
// b, err := json.Marshal(v)
27-
// require.NoError(t, err)
28-
// return b
29-
// }
30-
31-
// db, ps := dbtestutil.NewDB(t,
32-
// dbtestutil.WithDumpOnFailure(),
33-
// //nolint:gocritic // Use UTC for consistent timestamp length in golden files.
34-
// dbtestutil.WithTimezone("UTC"),
35-
// )
36-
// client, _, coderdAPI := coderdtest.NewWithAPI(t, &coderdtest.Options{
37-
// IncludeProvisionerDaemon: true,
38-
// Database: db,
39-
// Pubsub: ps,
40-
// })
41-
// owner := coderdtest.CreateFirstUser(t, client)
42-
// _, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
43-
4428
db, ps := dbtestutil.NewDB(t, dbtestutil.WithDumpOnFailure())
4529
client := coderdtest.New(t, &coderdtest.Options{
4630
IncludeProvisionerDaemon: true,
4731
Database: db,
4832
Pubsub: ps,
4933
})
5034
owner := coderdtest.CreateFirstUser(t, client)
35+
templateAdminClient, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.ScopedRoleOrgTemplateAdmin(owner.OrganizationID))
5136
memberClient, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
5237

53-
// client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
54-
// user := coderdtest.CreateFirstUser(t, client)
55-
5638
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)
5739
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
5840
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
@@ -70,6 +52,7 @@ func TestProvisionerJobs(t *testing.T) {
7052
wbID := uuid.New()
7153
job := dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
7254
OrganizationID: w.OrganizationID,
55+
StartedAt: sql.NullTime{Time: dbtime.Now(), Valid: true},
7356
Type: database.ProvisionerJobTypeWorkspaceBuild,
7457
Input: json.RawMessage(`{"workspace_build_id":"` + wbID.String() + `"}`),
7558
})
@@ -83,33 +66,41 @@ func TestProvisionerJobs(t *testing.T) {
8366
t.Run("All", func(t *testing.T) {
8467
t.Parallel()
8568
ctx := testutil.Context(t, testutil.WaitMedium)
86-
jobs, err := memberClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, nil)
69+
jobs, err := templateAdminClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, nil)
8770
require.NoError(t, err)
8871
require.Len(t, jobs, 3)
8972
})
9073

91-
t.Run("Pending", func(t *testing.T) {
74+
t.Run("Status", func(t *testing.T) {
9275
t.Parallel()
9376
ctx := testutil.Context(t, testutil.WaitMedium)
94-
jobs, err := memberClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, &codersdk.OrganizationProvisionerJobsOptions{
95-
Status: []codersdk.ProvisionerJobStatus{codersdk.ProvisionerJobPending},
77+
jobs, err := templateAdminClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, &codersdk.OrganizationProvisionerJobsOptions{
78+
Status: []codersdk.ProvisionerJobStatus{codersdk.ProvisionerJobRunning},
9679
})
97-
for _, job := range jobs {
98-
t.Logf("job: %#v", job)
99-
}
10080
require.NoError(t, err)
10181
require.Len(t, jobs, 1)
10282
})
10383

10484
t.Run("Limit", func(t *testing.T) {
10585
t.Parallel()
10686
ctx := testutil.Context(t, testutil.WaitMedium)
107-
jobs, err := memberClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, &codersdk.OrganizationProvisionerJobsOptions{
87+
jobs, err := templateAdminClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, &codersdk.OrganizationProvisionerJobsOptions{
10888
Limit: 1,
10989
})
11090
require.NoError(t, err)
11191
require.Len(t, jobs, 1)
11292
})
93+
94+
// For now, this is not allowed even though the member has created a
95+
// workspace. Once member-level permissions for jobs are supported
96+
// by RBAC, this test should be updated.
97+
t.Run("MemberDenied", func(t *testing.T) {
98+
t.Parallel()
99+
ctx := testutil.Context(t, testutil.WaitMedium)
100+
jobs, err := memberClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, nil)
101+
require.Error(t, err)
102+
require.Len(t, jobs, 0)
103+
})
113104
}
114105

115106
func TestProvisionerJobLogs(t *testing.T) {

coderd/util/slice/slice.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ func ToStrings[T ~string](a []T) []string {
1414
}
1515

1616
func StringEnums[E ~string](a []string) []E {
17+
if a == nil {
18+
return nil
19+
}
1720
tmp := make([]E, 0, len(a))
1821
for _, v := range a {
1922
tmp = append(tmp, E(v))

0 commit comments

Comments
 (0)