Skip to content

Commit ab1f079

Browse files
committed
dbmem
1 parent e2afd43 commit ab1f079

File tree

3 files changed

+80
-5
lines changed

3 files changed

+80
-5
lines changed

coderd/database/dbauthz/dbauthz.go

+24-2
Original file line numberDiff line numberDiff line change
@@ -1787,7 +1787,26 @@ func (q *querier) GetTemplateVersionVariables(ctx context.Context, templateVersi
17871787
}
17881788

17891789
func (q *querier) GetTemplateVersionWorkspaceTags(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionWorkspaceTag, error) {
1790-
panic("not implemented")
1790+
tv, err := q.db.GetTemplateVersionByID(ctx, templateVersionID)
1791+
if err != nil {
1792+
return nil, err
1793+
}
1794+
1795+
var object rbac.Objecter
1796+
template, err := q.db.GetTemplateByID(ctx, tv.TemplateID.UUID)
1797+
if err != nil {
1798+
if !errors.Is(err, sql.ErrNoRows) {
1799+
return nil, err
1800+
}
1801+
object = rbac.ResourceTemplate.InOrg(tv.OrganizationID)
1802+
} else {
1803+
object = tv.RBACObject(template)
1804+
}
1805+
1806+
if err := q.authorizeContext(ctx, rbac.ActionRead, object); err != nil {
1807+
return nil, err
1808+
}
1809+
return q.db.GetTemplateVersionWorkspaceTags(ctx, templateVersionID)
17911810
}
17921811

17931812
// GetTemplateVersionsByIDs is only used for workspace build data.
@@ -2512,7 +2531,10 @@ func (q *querier) InsertTemplateVersionVariable(ctx context.Context, arg databas
25122531
}
25132532

25142533
func (q *querier) InsertTemplateVersionWorkspaceTag(ctx context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
2515-
panic("not implemented")
2534+
if err := q.authorizeContext(ctx, rbac.ActionCreate, rbac.ResourceSystem); err != nil {
2535+
return database.TemplateVersionWorkspaceTag{}, err
2536+
}
2537+
return q.db.InsertTemplateVersionWorkspaceTag(ctx, arg)
25162538
}
25172539

25182540
func (q *querier) InsertUser(ctx context.Context, arg database.InsertUserParams) (database.User, error) {

coderd/database/dbmem/dbmem.go

+24-3
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ type data struct {
163163
templateVersions []database.TemplateVersionTable
164164
templateVersionParameters []database.TemplateVersionParameter
165165
templateVersionVariables []database.TemplateVersionVariable
166+
templateVersionWorkspaceTags []database.TemplateVersionWorkspaceTag
166167
templates []database.TemplateTable
167168
templateUsageStats []database.TemplateUsageStat
168169
workspaceAgents []database.WorkspaceAgent
@@ -4178,7 +4179,17 @@ func (q *FakeQuerier) GetTemplateVersionVariables(_ context.Context, templateVer
41784179
}
41794180

41804181
func (q *FakeQuerier) GetTemplateVersionWorkspaceTags(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionWorkspaceTag, error) {
4181-
panic("not implemented")
4182+
q.mutex.RLock()
4183+
defer q.mutex.RUnlock()
4184+
4185+
workspaceTags := make([]database.TemplateVersionWorkspaceTag, 0)
4186+
for _, workspaceTag := range q.templateVersionWorkspaceTags {
4187+
if workspaceTag.TemplateVersionID != templateVersionID {
4188+
continue
4189+
}
4190+
workspaceTags = append(workspaceTags, workspaceTag)
4191+
}
4192+
return workspaceTags, nil
41824193
}
41834194

41844195
func (q *FakeQuerier) GetTemplateVersionsByIDs(_ context.Context, ids []uuid.UUID) ([]database.TemplateVersion, error) {
@@ -6356,13 +6367,23 @@ func (q *FakeQuerier) InsertTemplateVersionVariable(_ context.Context, arg datab
63566367
return variable, nil
63576368
}
63586369

6359-
func (q *FakeQuerier) InsertTemplateVersionWorkspaceTag(ctx context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
6370+
func (q *FakeQuerier) InsertTemplateVersionWorkspaceTag(_ context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
63606371
err := validateDatabaseType(arg)
63616372
if err != nil {
63626373
return database.TemplateVersionWorkspaceTag{}, err
63636374
}
63646375

6365-
panic("not implemented")
6376+
q.mutex.Lock()
6377+
defer q.mutex.Unlock()
6378+
6379+
//nolint:gosimple
6380+
workspaceTag := database.TemplateVersionWorkspaceTag{
6381+
TemplateVersionID: arg.TemplateVersionID,
6382+
Key: arg.Key,
6383+
Value: arg.Value,
6384+
}
6385+
q.templateVersionWorkspaceTags = append(q.templateVersionWorkspaceTags, workspaceTag)
6386+
return workspaceTag, nil
63666387
}
63676388

63686389
func (q *FakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParams) (database.User, error) {

coderd/provisionerdserver/provisionerdserver_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,38 @@ func TestUpdateJob(t *testing.T) {
750750
require.Equal(t, templateVariables[1].Value, "")
751751
})
752752
})
753+
754+
t.Run("WorkspaceTags", func(t *testing.T) {
755+
t.Parallel()
756+
757+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
758+
defer cancel()
759+
760+
srv, db, _, pd := setup(t, false, &overrides{})
761+
job := setupJob(t, db, pd.ID)
762+
versionID := uuid.New()
763+
err := db.InsertTemplateVersion(ctx, database.InsertTemplateVersionParams{
764+
ID: versionID,
765+
JobID: job,
766+
})
767+
require.NoError(t, err)
768+
_, err = srv.UpdateJob(ctx, &proto.UpdateJobRequest{
769+
JobId: job.String(),
770+
WorkspaceTags: map[string]string{
771+
"bird": "tweety",
772+
"cat": "jinx",
773+
},
774+
})
775+
require.NoError(t, err)
776+
777+
workspaceTags, err := db.GetTemplateVersionWorkspaceTags(ctx, versionID)
778+
require.NoError(t, err)
779+
require.Len(t, workspaceTags, 2)
780+
require.Equal(t, workspaceTags[0].Key, "bird")
781+
require.Equal(t, workspaceTags[0].Value, "tweety")
782+
require.Equal(t, workspaceTags[1].Key, "cat")
783+
require.Equal(t, workspaceTags[1].Value, "jinx")
784+
})
753785
}
754786

755787
func TestFailJob(t *testing.T) {

0 commit comments

Comments
 (0)