Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2042b57

Browse files
authored
feat: Add template display name (backend) (#4966)
* Rename to nameValidator * Refactor: NameValid * Fix: comment * Define new migration * Include display_name * Update typesGenerated.ts * Update meta * Adjust tests * CLI tests * Fix: audit * Fix: omitempty * site: display_name is optional * unit: TestUsernameValid * entities.ts: add display_name * site: TemplateSettingsPage.test.tsx * Fix: TemplateSettingsForm.tsx * Adjust tests * Add comment to display_name column * Fix: rename * Fix: make * Loosen regexp * Fix: err check * Fix: template name length * Allow for whitespaces * Update migration number
1 parent f3eb662 commit 2042b57

23 files changed

+218
-56
lines changed

cli/templateedit.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
func templateEdit() *cobra.Command {
1515
var (
1616
name string
17+
displayName string
1718
description string
1819
icon string
1920
defaultTTL time.Duration
@@ -40,6 +41,7 @@ func templateEdit() *cobra.Command {
4041
// NOTE: coderd will ignore empty fields.
4142
req := codersdk.UpdateTemplateMeta{
4243
Name: name,
44+
DisplayName: displayName,
4345
Description: description,
4446
Icon: icon,
4547
DefaultTTLMillis: defaultTTL.Milliseconds(),
@@ -55,6 +57,7 @@ func templateEdit() *cobra.Command {
5557
}
5658

5759
cmd.Flags().StringVarP(&name, "name", "", "", "Edit the template name")
60+
cmd.Flags().StringVarP(&displayName, "display-name", "", "", "Edit the template display name")
5861
cmd.Flags().StringVarP(&description, "description", "", "", "Edit the template description")
5962
cmd.Flags().StringVarP(&icon, "icon", "", "", "Edit the template icon path")
6063
cmd.Flags().DurationVarP(&defaultTTL, "default-ttl", "", 0, "Edit the template default time before shutdown - workspaces created from this template to this value.")

cli/templateedit_test.go

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010

1111
"github.com/coder/coder/cli/clitest"
1212
"github.com/coder/coder/coderd/coderdtest"
13-
"github.com/coder/coder/coderd/util/ptr"
1413
"github.com/coder/coder/codersdk"
14+
"github.com/coder/coder/testutil"
1515
)
1616

1717
func TestTemplateEdit(t *testing.T) {
@@ -23,14 +23,11 @@ func TestTemplateEdit(t *testing.T) {
2323
user := coderdtest.CreateFirstUser(t, client)
2424
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
2525
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
26-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
27-
ctr.Description = "original description"
28-
ctr.Icon = "/icons/default-icon.png"
29-
ctr.DefaultTTLMillis = ptr.Ref(24 * time.Hour.Milliseconds())
30-
})
26+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
3127

3228
// Test the cli command.
3329
name := "new-template-name"
30+
displayName := "New Display Name 789"
3431
desc := "lorem ipsum dolor sit amet et cetera"
3532
icon := "/icons/new-icon.png"
3633
defaultTTL := 12 * time.Hour
@@ -39,37 +36,35 @@ func TestTemplateEdit(t *testing.T) {
3936
"edit",
4037
template.Name,
4138
"--name", name,
39+
"--display-name", displayName,
4240
"--description", desc,
4341
"--icon", icon,
4442
"--default-ttl", defaultTTL.String(),
4543
}
4644
cmd, root := clitest.New(t, cmdArgs...)
4745
clitest.SetupConfig(t, client, root)
4846

49-
err := cmd.Execute()
47+
ctx, _ := testutil.Context(t)
48+
err := cmd.ExecuteContext(ctx)
5049

5150
require.NoError(t, err)
5251

5352
// Assert that the template metadata changed.
5453
updated, err := client.Template(context.Background(), template.ID)
5554
require.NoError(t, err)
5655
assert.Equal(t, name, updated.Name)
56+
assert.Equal(t, displayName, updated.DisplayName)
5757
assert.Equal(t, desc, updated.Description)
5858
assert.Equal(t, icon, updated.Icon)
5959
assert.Equal(t, defaultTTL.Milliseconds(), updated.DefaultTTLMillis)
6060
})
61-
6261
t.Run("NotModified", func(t *testing.T) {
6362
t.Parallel()
6463
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
6564
user := coderdtest.CreateFirstUser(t, client)
6665
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
6766
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
68-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
69-
ctr.Description = "original description"
70-
ctr.Icon = "/icons/default-icon.png"
71-
ctr.DefaultTTLMillis = ptr.Ref(24 * time.Hour.Milliseconds())
72-
})
67+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
7368

7469
// Test the cli command.
7570
cmdArgs := []string{
@@ -84,7 +79,8 @@ func TestTemplateEdit(t *testing.T) {
8479
cmd, root := clitest.New(t, cmdArgs...)
8580
clitest.SetupConfig(t, client, root)
8681

87-
err := cmd.Execute()
82+
ctx, _ := testutil.Context(t)
83+
err := cmd.ExecuteContext(ctx)
8884

8985
require.ErrorContains(t, err, "not modified")
9086

@@ -96,4 +92,36 @@ func TestTemplateEdit(t *testing.T) {
9692
assert.Equal(t, template.Icon, updated.Icon)
9793
assert.Equal(t, template.DefaultTTLMillis, updated.DefaultTTLMillis)
9894
})
95+
t.Run("InvalidDisplayName", func(t *testing.T) {
96+
t.Parallel()
97+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
98+
user := coderdtest.CreateFirstUser(t, client)
99+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
100+
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
101+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
102+
103+
// Test the cli command.
104+
cmdArgs := []string{
105+
"templates",
106+
"edit",
107+
template.Name,
108+
"--name", template.Name,
109+
"--display-name", " a-b-c",
110+
}
111+
cmd, root := clitest.New(t, cmdArgs...)
112+
clitest.SetupConfig(t, client, root)
113+
114+
ctx, _ := testutil.Context(t)
115+
err := cmd.ExecuteContext(ctx)
116+
117+
require.Error(t, err, "client call must fail")
118+
_, isSdkError := codersdk.AsError(err)
119+
require.True(t, isSdkError, "sdk error is expected")
120+
121+
// Assert that the template metadata did not change.
122+
updated, err := client.Template(context.Background(), template.ID)
123+
require.NoError(t, err)
124+
assert.Equal(t, template.Name, updated.Name)
125+
assert.Equal(t, "", template.DisplayName)
126+
})
99127
}

coderd/database/databasefake/databasefake.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,7 @@ func (q *fakeQuerier) UpdateTemplateMetaByID(_ context.Context, arg database.Upd
13031303
}
13041304
tpl.UpdatedAt = database.Now()
13051305
tpl.Name = arg.Name
1306+
tpl.DisplayName = arg.DisplayName
13061307
tpl.Description = arg.Description
13071308
tpl.Icon = arg.Icon
13081309
tpl.DefaultTtl = arg.DefaultTtl

coderd/database/dump.sql

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE templates DROP COLUMN display_name;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE templates ADD COLUMN display_name VARCHAR(64) NOT NULL DEFAULT '';
2+
3+
COMMENT ON COLUMN templates.display_name
4+
IS 'Display name is a custom, human-friendly template name that user can set.';

coderd/database/models.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 22 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/templates.sql

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,11 @@ INSERT INTO
6969
created_by,
7070
icon,
7171
user_acl,
72-
group_acl
72+
group_acl,
73+
display_name
7374
)
7475
VALUES
75-
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) RETURNING *;
76+
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING *;
7677

7778
-- name: UpdateTemplateActiveVersionByID :exec
7879
UPDATE
@@ -100,7 +101,8 @@ SET
100101
description = $3,
101102
default_ttl = $4,
102103
name = $5,
103-
icon = $6
104+
icon = $6,
105+
display_name = $7
104106
WHERE
105107
id = $1
106108
RETURNING

coderd/gitauth/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func ConvertConfig(entries []codersdk.GitAuthConfig, accessURL *url.URL) ([]*Con
4747
// Default to the type.
4848
entry.ID = string(typ)
4949
}
50-
if valid := httpapi.UsernameValid(entry.ID); valid != nil {
50+
if valid := httpapi.NameValid(entry.ID); valid != nil {
5151
return nil, xerrors.Errorf("git auth provider %q doesn't have a valid id: %w", entry.ID, valid)
5252
}
5353

0 commit comments

Comments
 (0)