95 lines
3.6 KiB
JavaScript
95 lines
3.6 KiB
JavaScript
|
/* @odoo-module */
|
||
|
|
||
|
import { patch } from "@web/core/utils/patch";
|
||
|
import { MockServer } from "@web/../tests/helpers/mock_server";
|
||
|
|
||
|
patch(MockServer.prototype, {
|
||
|
async _performRPC(route, args) {
|
||
|
if (args.model === "res.users.settings" && args.method === "_find_or_create_for_user") {
|
||
|
const user_id = args.args[0][0];
|
||
|
return this._mockResUsersSettings_FindOrCreateForUser(user_id);
|
||
|
}
|
||
|
if (args.model === "res.users.settings" && args.method === "set_res_users_settings") {
|
||
|
const id = args.args[0][0];
|
||
|
const newSettings = args.kwargs.new_settings;
|
||
|
return this._mockResUsersSettingsSetResUsersSettings(id, newSettings);
|
||
|
}
|
||
|
return super._performRPC(route, args);
|
||
|
},
|
||
|
/**
|
||
|
* Simulates `_find_or_create_for_user` on `res.users.settings`.
|
||
|
*
|
||
|
* @param {Object} user
|
||
|
* @returns {Object}
|
||
|
*/
|
||
|
_mockResUsersSettings_FindOrCreateForUser(user_id) {
|
||
|
let settings = this.getRecords("res.users.settings", [["user_id", "=", user_id]])[0];
|
||
|
if (!settings) {
|
||
|
const settingsId = this.pyEnv["res.users.settings"].create({ user_id: user_id });
|
||
|
settings = this.getRecords("res.users.settings", [["id", "=", settingsId]])[0];
|
||
|
}
|
||
|
return settings;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Simulates `res_users_settings_format` on `res.users.settings`.
|
||
|
*
|
||
|
* @param {integer} id
|
||
|
* @param {string[]} [fieldsToFormat]
|
||
|
* @returns {Object}
|
||
|
*/
|
||
|
_mockResUsersSettings_ResUsersSettingsFormat(id, fieldsToFormat) {
|
||
|
const [settings] = this.getRecords("res.users.settings", [["id", "=", id]]);
|
||
|
const ormAutomaticFields = new Set([
|
||
|
"create_date",
|
||
|
"create_uid",
|
||
|
"display_name",
|
||
|
"name",
|
||
|
"write_date",
|
||
|
"write_uid",
|
||
|
]);
|
||
|
const filterPredicate = fieldsToFormat
|
||
|
? ([fieldName]) => fieldsToFormat.includes(fieldName)
|
||
|
: ([fieldName]) => !ormAutomaticFields.has(fieldName);
|
||
|
const res = Object.fromEntries(Object.entries(settings).filter(filterPredicate));
|
||
|
if (Object.prototype.hasOwnProperty.call(res, "user_id")) {
|
||
|
res.user_id = { id: settings.user_id };
|
||
|
}
|
||
|
if (Object.prototype.hasOwnProperty.call(res, "volume_settings_ids")) {
|
||
|
const volumeSettings =
|
||
|
this._mockResUsersSettingsVolumes_DiscussUsersSettingsVolumeFormat(
|
||
|
settings.volume_settings_ids
|
||
|
);
|
||
|
res.volume_settings_ids = [["ADD", volumeSettings]];
|
||
|
}
|
||
|
return res;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Simulates `set_res_users_settings` on `res.users.settings`.
|
||
|
*
|
||
|
* @param {integer} id
|
||
|
* @param {Object} newSettings
|
||
|
*/
|
||
|
_mockResUsersSettingsSetResUsersSettings(id, newSettings) {
|
||
|
const oldSettings = this.getRecords("res.users.settings", [["id", "=", id]])[0];
|
||
|
const changedSettings = {};
|
||
|
for (const setting in newSettings) {
|
||
|
if (setting in oldSettings && newSettings[setting] !== oldSettings[setting]) {
|
||
|
changedSettings[setting] = newSettings[setting];
|
||
|
}
|
||
|
}
|
||
|
this.pyEnv["res.users.settings"].write([id], changedSettings);
|
||
|
const [relatedUser] = this.pyEnv["res.users"].searchRead([
|
||
|
["id", "=", oldSettings.user_id],
|
||
|
]);
|
||
|
const [relatedPartner] = this.pyEnv["res.partner"].searchRead([
|
||
|
["id", "=", relatedUser.partner_id[0]],
|
||
|
]);
|
||
|
this.pyEnv["bus.bus"]._sendone(relatedPartner, "res.users.settings", {
|
||
|
...changedSettings,
|
||
|
id,
|
||
|
});
|
||
|
},
|
||
|
});
|