From d7a7b81ddf9ffff704d7161fb31096e305a7e4d6 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 14 Nov 2022 11:22:55 +0100 Subject: [PATCH 1/2] fix: do not skip properties while creating templates --- cli/templateedit_test.go | 54 +++++++++++++++++++- coderd/database/databasefake/databasefake.go | 2 + coderd/templates.go | 2 + 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/cli/templateedit_test.go b/cli/templateedit_test.go index ae39b71b4e00b..0912bf4cb932d 100644 --- a/cli/templateedit_test.go +++ b/cli/templateedit_test.go @@ -17,7 +17,7 @@ import ( func TestTemplateEdit(t *testing.T) { t.Parallel() - t.Run("Modified", func(t *testing.T) { + t.Run("FirstEmptyThenModified", func(t *testing.T) { t.Parallel() client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) user := coderdtest.CreateFirstUser(t, client) @@ -58,7 +58,7 @@ func TestTemplateEdit(t *testing.T) { assert.Equal(t, icon, updated.Icon) assert.Equal(t, defaultTTL.Milliseconds(), updated.DefaultTTLMillis) }) - t.Run("NotModified", func(t *testing.T) { + t.Run("FirstEmptyThenNotModified", func(t *testing.T) { t.Parallel() client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) user := coderdtest.CreateFirstUser(t, client) @@ -124,4 +124,54 @@ func TestTemplateEdit(t *testing.T) { assert.Equal(t, template.Name, updated.Name) assert.Equal(t, "", template.DisplayName) }) + t.Run("WithPropertiesThenModified", func(t *testing.T) { + t.Parallel() + client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) + user := coderdtest.CreateFirstUser(t, client) + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) + _ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + + initialDisplayName := "This is a template" + initialDescription := "This is description" + initialIcon := "/img/icon.png" + + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) { + ctr.DisplayName = initialDisplayName + ctr.Description = initialDescription + ctr.Icon = initialIcon + }) + + // Test created template + created, err := client.Template(context.Background(), template.ID) + require.NoError(t, err) + assert.Equal(t, initialDisplayName, created.DisplayName) + assert.Equal(t, initialDescription, created.Description) + assert.Equal(t, initialIcon, created.Icon) + + // Test the cli command. + displayName := "New Display Name 789" + icon := "/icons/new-icon.png" + cmdArgs := []string{ + "templates", + "edit", + template.Name, + "--display-name", displayName, + "--icon", icon, + } + cmd, root := clitest.New(t, cmdArgs...) + clitest.SetupConfig(t, client, root) + + ctx, _ := testutil.Context(t) + err = cmd.ExecuteContext(ctx) + + require.NoError(t, err) + + // Assert that the template metadata changed. + updated, err := client.Template(context.Background(), template.ID) + require.NoError(t, err) + assert.Equal(t, template.Name, updated.Name) // doesn't change + assert.Equal(t, initialDescription, updated.Description) // doesn't change + assert.Equal(t, displayName, updated.DisplayName) + assert.Equal(t, icon, updated.Icon) + }) } diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index 9d90e182b2a76..c28d0b54dce87 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -2091,6 +2091,8 @@ func (q *fakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTempl CreatedBy: arg.CreatedBy, UserACL: arg.UserACL, GroupACL: arg.GroupACL, + DisplayName: arg.DisplayName, + Icon: arg.Icon, } q.templates = append(q.templates, template) return template, nil diff --git a/coderd/templates.go b/coderd/templates.go index 69520f585f80d..ec601ab0e22be 100644 --- a/coderd/templates.go +++ b/coderd/templates.go @@ -239,6 +239,8 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque GroupACL: database.TemplateACL{ organization.ID.String(): []rbac.Action{rbac.ActionRead}, }, + DisplayName: createTemplate.DisplayName, + Icon: createTemplate.Icon, }) if err != nil { return xerrors.Errorf("insert template: %s", err) From a9109c232501f32b1db515d4d88dd94968c6fde7 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 14 Nov 2022 11:50:30 +0100 Subject: [PATCH 2/2] test: empty edit --- cli/templateedit_test.go | 48 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/cli/templateedit_test.go b/cli/templateedit_test.go index 0912bf4cb932d..23b181391b90d 100644 --- a/cli/templateedit_test.go +++ b/cli/templateedit_test.go @@ -174,4 +174,52 @@ func TestTemplateEdit(t *testing.T) { assert.Equal(t, displayName, updated.DisplayName) assert.Equal(t, icon, updated.Icon) }) + t.Run("WithPropertiesThenEmptyEdit", func(t *testing.T) { + t.Parallel() + client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) + user := coderdtest.CreateFirstUser(t, client) + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) + _ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + + initialDisplayName := "This is a template" + initialDescription := "This is description" + initialIcon := "/img/icon.png" + + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) { + ctr.DisplayName = initialDisplayName + ctr.Description = initialDescription + ctr.Icon = initialIcon + }) + + // Test created template + created, err := client.Template(context.Background(), template.ID) + require.NoError(t, err) + assert.Equal(t, initialDisplayName, created.DisplayName) + assert.Equal(t, initialDescription, created.Description) + assert.Equal(t, initialIcon, created.Icon) + + // Test the cli command. + cmdArgs := []string{ + "templates", + "edit", + template.Name, + } + cmd, root := clitest.New(t, cmdArgs...) + clitest.SetupConfig(t, client, root) + + ctx, _ := testutil.Context(t) + err = cmd.ExecuteContext(ctx) + + require.NoError(t, err) + + // Assert that the template metadata changed. + updated, err := client.Template(context.Background(), template.ID) + require.NoError(t, err) + // Properties don't change + assert.Equal(t, template.Name, updated.Name) + assert.Equal(t, template.Description, updated.Description) + assert.Equal(t, template.DisplayName, updated.DisplayName) + // Icon is removed, as the API considers it as "delete" request + assert.Equal(t, "", updated.Icon) + }) }