@@ -2,6 +2,7 @@ package coderd_test
22
33import (
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 (
2225func TestProvisionerJobs (t * testing.T ) {
2326t .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-
4428db ,ps := dbtestutil .NewDB (t ,dbtestutil .WithDumpOnFailure ())
4529client := coderdtest .New (t ,& coderdtest.Options {
4630IncludeProvisionerDaemon :true ,
4731Database :db ,
4832Pubsub :ps ,
4933})
5034owner := coderdtest .CreateFirstUser (t ,client )
35+ templateAdminClient ,_ := coderdtest .CreateAnotherUser (t ,client ,owner .OrganizationID ,rbac .ScopedRoleOrgTemplateAdmin (owner .OrganizationID ))
5136memberClient ,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-
5638version := coderdtest .CreateTemplateVersion (t ,client ,owner .OrganizationID ,nil )
5739coderdtest .AwaitTemplateVersionJobCompleted (t ,client ,version .ID )
5840template := coderdtest .CreateTemplate (t ,client ,owner .OrganizationID ,version .ID )
@@ -70,6 +52,7 @@ func TestProvisionerJobs(t *testing.T) {
7052wbID := uuid .New ()
7153job := dbgen .ProvisionerJob (t ,db ,nil , database.ProvisionerJob {
7254OrganizationID :w .OrganizationID ,
55+ StartedAt : sql.NullTime {Time :dbtime .Now (),Valid :true },
7356Type :database .ProvisionerJobTypeWorkspaceBuild ,
7457Input :json .RawMessage (`{"workspace_build_id":"` + wbID .String ()+ `"}` ),
7558})
@@ -83,33 +66,41 @@ func TestProvisionerJobs(t *testing.T) {
8366t .Run ("All" ,func (t * testing.T ) {
8467t .Parallel ()
8568ctx := testutil .Context (t ,testutil .WaitMedium )
86- jobs ,err := memberClient .OrganizationProvisionerJobs (ctx ,owner .OrganizationID ,nil )
69+ jobs ,err := templateAdminClient .OrganizationProvisionerJobs (ctx ,owner .OrganizationID ,nil )
8770require .NoError (t ,err )
8871require .Len (t ,jobs ,3 )
8972})
9073
91- t .Run ("Pending " ,func (t * testing.T ) {
74+ t .Run ("Status " ,func (t * testing.T ) {
9275t .Parallel ()
9376ctx := 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- }
10080require .NoError (t ,err )
10181require .Len (t ,jobs ,1 )
10282})
10383
10484t .Run ("Limit" ,func (t * testing.T ) {
10585t .Parallel ()
10686ctx := 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 {
10888Limit :1 ,
10989})
11090require .NoError (t ,err )
11191require .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
115106func TestProvisionerJobLogs (t * testing.T ) {