Manager: tag update without description now keeps the description

Updating a tag without `description` field in the request body will keep
the tag's description as-is. Previously this caused it to become empty,
which is now still possible by using an explicit `description: ""`.
This commit is contained in:
Sybren A. Stüvel 2023-08-15 10:29:44 +02:00
parent 72ec9501b9
commit c477992467
2 changed files with 38 additions and 3 deletions

View File

@ -307,11 +307,10 @@ func (f *Flamenco) UpdateWorkerTag(e echo.Context, tagUUID string) error {
return sendAPIError(e, http.StatusInternalServerError, "error fetching worker tag: %v", err) return sendAPIError(e, http.StatusInternalServerError, "error fetching worker tag: %v", err)
} }
// Update the tag. // Update the tag.
dbTag.Name = update.Name dbTag.Name = update.Name
if update.Description == nil { if update.Description != nil && dbTag.Description != *update.Description {
dbTag.Description = ""
} else {
dbTag.Description = *update.Description dbTag.Description = *update.Description
} }

View File

@ -299,6 +299,23 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
Name: "updated name", Name: "updated name",
} }
expectNewDBTag := persistence.WorkerTag{ expectNewDBTag := persistence.WorkerTag{
UUID: UUID,
Name: newAPITag.Name,
Description: *apiTag.Description, // Not mentioning new description should keep old one.
}
// TODO: expect SocketIO broadcast of the tag update.
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
echo = mf.prepareMockedJSONRequest(newAPITag)
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
assertResponseNoContent(t, echo)
// Update both description + name & save.
newAPITag = api.WorkerTag{
Name: "updated name",
Description: ptr(""),
}
expectNewDBTag = persistence.WorkerTag{
UUID: UUID, UUID: UUID,
Name: newAPITag.Name, Name: newAPITag.Name,
Description: "", Description: "",
@ -310,6 +327,23 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID)) require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
assertResponseNoContent(t, echo) assertResponseNoContent(t, echo)
// Update both description + name & save.
newAPITag = api.WorkerTag{
Name: "updated name",
Description: ptr("New Description"),
}
expectNewDBTag = persistence.WorkerTag{
UUID: UUID,
Name: newAPITag.Name,
Description: *newAPITag.Description,
}
// TODO: expect SocketIO broadcast of the tag update.
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
echo = mf.prepareMockedJSONRequest(newAPITag)
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
assertResponseNoContent(t, echo)
// Delete. // Delete.
mf.persistence.EXPECT().DeleteWorkerTag(gomock.Any(), UUID) mf.persistence.EXPECT().DeleteWorkerTag(gomock.Any(), UUID)
// TODO: expect SocketIO broadcast of the tag deletion. // TODO: expect SocketIO broadcast of the tag deletion.
@ -317,3 +351,5 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
require.NoError(t, mf.flamenco.DeleteWorkerTag(echo, UUID)) require.NoError(t, mf.flamenco.DeleteWorkerTag(echo, UUID))
assertResponseNoContent(t, echo) assertResponseNoContent(t, echo)
} }
// TODO: add test for creation of already-existing tag.