From 42dd12661820a2fa3744dc614c1da63b4b9dd938 Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Mon, 21 Oct 2024 20:03:49 -0700 Subject: [PATCH] Fixed settings being overridden when not provided --- src/controller/account_test.go | 35 +++++++++++++++++++++++++++++++ src/controller/controller_test.go | 2 +- src/core/core_test.go | 2 +- src/model/account.go | 2 +- src/repository/account.go | 9 ++++---- src/repository/repository_test.go | 2 +- src/utils/util_test.go | 2 +- 7 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/controller/account_test.go b/src/controller/account_test.go index 868be69..5fa64d1 100644 --- a/src/controller/account_test.go +++ b/src/controller/account_test.go @@ -177,6 +177,41 @@ func TestUpdateAccountHandler(t *testing.T) { assert.False(t, accountResponse.Settings.Active) }) + t.Run("Should update an account (only message) - ignore settings", func(t *testing.T) { + // Create an account + account1 := accountV1 + account1.Domain.ID = "123-controller-update-account-message" + account1.Environment = "default" + account1.Settings.Active = true + account1.Settings.Window = "1m" + accountController.accountRepository.Create(&account1) + + // Update the account + account1.Domain.Message = "Updated successfully" + + // Test + payload, _ := json.Marshal(&model.Account{ + Environment: account1.Environment, + Domain: account1.Domain, + }) + + req, _ := http.NewRequest(http.MethodPut, accountController.routeAccountPath, bytes.NewBuffer(payload)) + response := executeRequest(req, r, token) + + // Assert + var accountResponse model.Account + err := json.NewDecoder(response.Body).Decode(&accountResponse) + + assert.Equal(t, http.StatusOK, response.Code) + assert.Nil(t, err) + assert.NotEmpty(t, accountResponse.Token) + assert.Equal(t, account1.Repository, accountResponse.Repository) + assert.Equal(t, model.StatusSynced, accountResponse.Domain.Status) + assert.Equal(t, "Updated successfully", accountResponse.Domain.Message) + assert.Equal(t, "1m", accountResponse.Settings.Window) + assert.True(t, accountResponse.Settings.Active) + }) + t.Run("Should update account token only", func(t *testing.T) { // Create an account account1 := accountV1 diff --git a/src/controller/controller_test.go b/src/controller/controller_test.go index 89efa5a..fd5da9c 100644 --- a/src/controller/controller_test.go +++ b/src/controller/controller_test.go @@ -101,7 +101,7 @@ var accountV1 = model.Account{ Status: model.StatusSynced, Message: "Synced successfully", }, - Settings: model.Settings{ + Settings: &model.Settings{ Active: true, Window: "10m", ForcePrune: false, diff --git a/src/core/core_test.go b/src/core/core_test.go index dc90871..0e2c0c5 100644 --- a/src/core/core_test.go +++ b/src/core/core_test.go @@ -64,7 +64,7 @@ func givenAccount() model.Account { Status: model.StatusOutSync, Message: "", }, - Settings: model.Settings{ + Settings: &model.Settings{ Active: true, Window: "5s", ForcePrune: false, diff --git a/src/model/account.go b/src/model/account.go index a232c0c..a5accde 100644 --- a/src/model/account.go +++ b/src/model/account.go @@ -26,7 +26,7 @@ type Account struct { Token string `json:"token"` Environment string `json:"environment"` Domain DomainDetails `json:"domain"` - Settings Settings `json:"settings"` + Settings *Settings `json:"settings"` } type DomainDetails struct { diff --git a/src/repository/account.go b/src/repository/account.go index ea88e55..6bc369d 100644 --- a/src/repository/account.go +++ b/src/repository/account.go @@ -182,10 +182,11 @@ func getUpdateFields(account *model.Account) bson.M { setIfNotEmpty(setMap, "domain.status", account.Domain.Status) setIfNotEmpty(setMap, "domain.message", account.Domain.Message) - setIfNotEmpty(setMap, "settings.window", account.Settings.Window) - - setMap["settings.active"] = account.Settings.Active - setMap["settings.forcePrune"] = account.Settings.ForcePrune + if account.Settings != nil { + setIfNotEmpty(setMap, "settings.window", account.Settings.Window) + setMap["settings.active"] = account.Settings.Active + setMap["settings.forcePrune"] = account.Settings.ForcePrune + } update := bson.M{"$set": setMap} return update diff --git a/src/repository/repository_test.go b/src/repository/repository_test.go index 3027ed2..95840d7 100644 --- a/src/repository/repository_test.go +++ b/src/repository/repository_test.go @@ -51,7 +51,7 @@ func givenAccount(active bool) model.Account { Status: model.StatusSynced, Message: "Synced successfully", }, - Settings: model.Settings{ + Settings: &model.Settings{ Active: active, Window: "10m", ForcePrune: false, diff --git a/src/utils/util_test.go b/src/utils/util_test.go index 8ed6453..1d6e15e 100644 --- a/src/utils/util_test.go +++ b/src/utils/util_test.go @@ -127,7 +127,7 @@ func givenAccount(active bool) model.Account { Status: model.StatusSynced, Message: "Synced successfully", }, - Settings: model.Settings{ + Settings: &model.Settings{ Active: active, Window: "10m", ForcePrune: false,