- Notifications
You must be signed in to change notification settings - Fork927
fix: do not skip properties on creating templates#5060
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Changes fromall commits
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -17,7 +17,7 @@ import ( | ||||||||||||||||||||||||||||||||||
func TestTemplateEdit(t *testing.T) { | ||||||||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||||||||
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("FirstEmptyThenNotModified", func(t *testing.T) { | ||||||||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) | ||||||||||||||||||||||||||||||||||
user := coderdtest.CreateFirstUser(t, client) | ||||||||||||||||||||||||||||||||||
@@ -124,4 +124,102 @@ 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) | ||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||
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) | ||||||||||||||||||||||||||||||||||
MemberAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. This is really unfortunate. If somebody runs EDIT: Side issue - it isn't possible to clear the template description with UI. User can submit an empty description field, but the content is not deleted. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Considering the behavior here: Lines 481 to 496 in4b3d211
I would definitely consider it a bug. It's inconsistent how fields are affected. A missing field (null) should produce no change, an empty string should remove it and a non empty string change it. Feel free to open an issue about this. 👍🏻 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. | ||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||
} |