diff --git a/addons/web/static/src/core/user_service.js b/addons/web/static/src/core/user_service.js index 5feade2beac..4e040d4504a 100644 --- a/addons/web/static/src/core/user_service.js +++ b/addons/web/static/src/core/user_service.js @@ -57,7 +57,7 @@ export const userService = { return settings; }, async setUserSettings(key, value) { - settings = await env.services.orm.call( + const changedSettings = await env.services.orm.call( "res.users.settings", "set_res_users_settings", [[this.settings.id]], @@ -67,6 +67,7 @@ export const userService = { }, } ); + Object.assign(settings, changedSettings); }, name: session.name, userName: session.username, diff --git a/addons/web/static/tests/core/user_service_tests.js b/addons/web/static/tests/core/user_service_tests.js index 02a5728663b..72fbbb29d36 100644 --- a/addons/web/static/tests/core/user_service_tests.js +++ b/addons/web/static/tests/core/user_service_tests.js @@ -3,6 +3,8 @@ import { registry } from "@web/core/registry"; import { userService } from "@web/core/user_service"; import { makeTestEnv } from "../helpers/mock_env"; +import { session } from "@web/session"; +import { patchWithCleanup } from "@web/../tests/helpers/utils"; const serviceRegistry = registry.category("services"); @@ -25,3 +27,22 @@ QUnit.test("successive calls to hasGroup", async (assert) => { assert.verifySteps(["res.users/has_group/x", "res.users/has_group/y"]); }); + +QUnit.test("set user settings do not override old valid keys", async (assert) => { + patchWithCleanup(session, { + ...session, + user_settings: { a: 1, b: 2 }, + }); + serviceRegistry.add("user", userService); + + const mockRPC = (route, args) => { + assert.step(JSON.stringify(args.kwargs.new_settings)); + return { a: 3, c: 4 }; + }; + const env = await makeTestEnv({ mockRPC }); + assert.deepEqual(env.services.user.settings, { a: 1, b: 2 }); + + await env.services.user.setUserSettings("a", 3); + assert.verifySteps(['{"a":3}']); + assert.deepEqual(env.services.user.settings, { a: 3, b: 2, c: 4 }); +});