DEV: Fix a `userFields` computed property override (#14988)

in `preferences/profile` controller

Co-authored-by: Penar Musaraj <pmusaraj@gmail.com>
This commit is contained in:
Jarek Radosz 2021-11-17 15:02:15 +01:00 committed by GitHub
parent 439cd68e0d
commit bf34d3524b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 37 deletions

View File

@ -34,21 +34,20 @@ export default Controller.extend({
@discourseComputed("model.user_fields.@each.value")
userFields() {
let siteUserFields = this.site.get("user_fields");
if (!isEmpty(siteUserFields)) {
const userFields = this.get("model.user_fields");
// Staff can edit fields that are not `editable`
if (!this.get("currentUser.staff")) {
siteUserFields = siteUserFields.filterBy("editable", true);
}
return siteUserFields.sortBy("position").map(function (field) {
const value = userFields
? userFields[field.get("id").toString()]
: null;
return EmberObject.create({ value, field });
});
let siteUserFields = this.site.user_fields;
if (isEmpty(siteUserFields)) {
return;
}
// Staff can edit fields that are not `editable`
if (!this.currentUser.staff) {
siteUserFields = siteUserFields.filterBy("editable", true);
}
return siteUserFields.sortBy("position").map((field) => {
const value = this.model.user_fields?.[field.id.toString()];
return EmberObject.create({ field, value });
});
},
@discourseComputed("model.default_calendar")

View File

@ -1,7 +1,7 @@
import { discourseModule } from "discourse/tests/helpers/qunit-helpers";
import { test } from "qunit";
import EmberObject from "@ember/object";
import User from "discourse/models/user";
import Site from "discourse/models/site";
discourseModule("Unit | Controller | preferences/profile", function () {
test("prepare custom field data", function (assert) {
@ -11,35 +11,30 @@ discourseModule("Unit | Controller | preferences/profile", function () {
second_factor_enabled: true,
is_anonymous: true,
user_fields: {
field_1: "1",
field_2: "2",
field_3: "3",
1: "2",
2: null,
3: [],
},
}),
currentUser: {
id: 1234,
},
});
controller.set("userFields", [
EmberObject.create({ value: "2", field: { id: "field_1" } }),
EmberObject.create({ value: null, field: { id: "field_2" } }),
EmberObject.create({ value: [], field: { id: "field_3" } }),
Site.currentProp("user_fields", [
{ position: 1, id: 1, editable: true },
{ position: 2, id: 2, editable: true },
{ position: 3, id: 3, editable: true },
]);
// Since there are no injections in unit tests
controller.set("site", Site.current());
controller.send("_updateUserFields");
assert.strictEqual(
controller.model.user_fields.field_1,
"2",
"updates string value"
);
assert.strictEqual(
controller.model.user_fields.field_2,
null,
"updates null"
);
assert.strictEqual(
controller.model.user_fields.field_3,
null,
"updates empty array as null"
);
const fields = controller.model.user_fields;
assert.strictEqual(fields[1], "2", "updates string value");
assert.strictEqual(fields[2], null, "updates null");
assert.strictEqual(fields[3], null, "updates empty array as null");
});
});