diff --git a/app/assets/javascripts/discourse/app/controllers/preferences/users.js b/app/assets/javascripts/discourse/app/controllers/preferences/users.js index f4b1173c02f..c7311d5630c 100644 --- a/app/assets/javascripts/discourse/app/controllers/preferences/users.js +++ b/app/assets/javascripts/discourse/app/controllers/preferences/users.js @@ -1,5 +1,5 @@ import { makeArray } from "discourse-common/lib/helpers"; -import { alias, gte, or, and } from "@ember/object/computed"; +import { alias, or, and } from "@ember/object/computed"; import { action, computed } from "@ember/object"; import Controller from "@ember/controller"; import { popupAjaxError } from "discourse/lib/ajax-error"; @@ -7,8 +7,14 @@ import discourseComputed from "discourse-common/utils/decorators"; export default Controller.extend({ ignoredUsernames: alias("model.ignored_usernames"), - userIsMemberOrAbove: gte("model.trust_level", 2), - ignoredEnabled: or("userIsMemberOrAbove", "model.staff"), + + @discourseComputed("model.trust_level") + userCanIgnore(trustLevel) { + return trustLevel >= this.siteSettings.min_trust_level_to_allow_ignore; + }, + + ignoredEnabled: or("userCanIgnore", "model.staff"), + allowPmUsersEnabled: and( "model.user_option.enable_allowed_pm_users", "model.user_option.allow_private_messages" diff --git a/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js b/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js index 5b3cc7cb4ec..2a3ca2dcc2d 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js @@ -479,3 +479,30 @@ acceptance( }); } ); + +acceptance("Ignored users", function (needs) { + needs.user(); + needs.settings({ min_trust_level_to_allow_ignore: 1 }); + + test("when trust level < min level to ignore", async function (assert) { + await visit(`/u/eviltrout/preferences/users`); + await updateCurrentUser({ trust_level: 0, moderator: false, admin: false }); + + assert.ok( + !exists(".user-ignore"), + "it does not show the list of ignored users" + ); + }); + + test("when trust level >= min level to ignore", async function (assert) { + await visit(`/u/eviltrout/preferences/users`); + await updateCurrentUser({ trust_level: 1 }); + assert.ok(exists(".user-ignore"), "it shows the list of ignored users"); + }); + + test("staff can always see ignored users", async function (assert) { + await visit(`/u/eviltrout/preferences/users`); + await updateCurrentUser({ moderator: true }); + assert.ok(exists(".user-ignore"), "it shows the list of ignored users"); + }); +}); diff --git a/app/assets/javascripts/discourse/tests/helpers/qunit-helpers.js b/app/assets/javascripts/discourse/tests/helpers/qunit-helpers.js index d84e32a5eb4..6ac05479492 100644 --- a/app/assets/javascripts/discourse/tests/helpers/qunit-helpers.js +++ b/app/assets/javascripts/discourse/tests/helpers/qunit-helpers.js @@ -1,6 +1,6 @@ import { Promise } from "rsvp"; import { isEmpty } from "@ember/utils"; -import { later } from "@ember/runloop"; +import { run, later } from "@ember/runloop"; import sessionFixtures from "discourse/tests/fixtures/session-fixtures"; import HeaderComponent from "discourse/components/site-header"; import { forceMobile, resetMobile } from "discourse/lib/mobile"; @@ -44,7 +44,9 @@ export function currentUser() { } export function updateCurrentUser(properties) { - User.current().setProperties(properties); + run(() => { + User.current().setProperties(properties); + }); } // Note: do not use this in acceptance tests. Use `loggedIn: true` instead diff --git a/config/site_settings.yml b/config/site_settings.yml index 192200d10fd..4bea11f1b53 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -1422,6 +1422,7 @@ trust: min_trust_level_to_allow_ignore: default: 2 enum: "TrustLevelSetting" + client: true allow_flagging_staff: true send_tl1_welcome_message: true send_tl2_promotion_message: true