From c03f83bbea558caee8090dfc43fb4c817028c464 Mon Sep 17 00:00:00 2001 From: Jan Cernik <66427541+jancernik@users.noreply.github.com> Date: Mon, 24 Apr 2023 16:04:26 -0300 Subject: [PATCH] FIX: Show auto-group flair according to user preferences (#21221) --- .../app/components/user-avatar-flair.js | 2 +- .../discourse/app/lib/transform-post.js | 1 + .../javascripts/discourse/app/widgets/post.js | 14 +++++++------ .../discourse/app/widgets/topic-map.js | 14 +++++++------ .../components/user-avatar-flair-test.js | 21 +++++++++++++++++++ .../widgets/topic-participant-test.js | 1 + app/serializers/post_serializer.rb | 5 +++++ .../topic_post_count_serializer.rb | 5 +++++ spec/requests/api/posts_spec.rb | 3 +++ .../api/schemas/json/admin_user_response.json | 3 +++ .../schemas/json/post_replies_response.json | 6 ++++++ .../api/schemas/json/post_show_response.json | 6 ++++++ .../schemas/json/post_update_response.json | 6 ++++++ .../schemas/json/topic_create_response.json | 6 ++++++ .../api/schemas/json/topic_show_response.json | 6 ++++++ .../web_hook_post_serializer_spec.rb | 1 + 16 files changed, 87 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/discourse/app/components/user-avatar-flair.js b/app/assets/javascripts/discourse/app/components/user-avatar-flair.js index 079de882165..bc32bc424fc 100644 --- a/app/assets/javascripts/discourse/app/components/user-avatar-flair.js +++ b/app/assets/javascripts/discourse/app/components/user-avatar-flair.js @@ -7,7 +7,7 @@ export default Component.extend({ @discourseComputed("user") flair(user) { - if (!user) { + if (!user || !user.flair_group_id) { return; } diff --git a/app/assets/javascripts/discourse/app/lib/transform-post.js b/app/assets/javascripts/discourse/app/lib/transform-post.js index 24d0a0d3392..89ec81ecbf5 100644 --- a/app/assets/javascripts/discourse/app/lib/transform-post.js +++ b/app/assets/javascripts/discourse/app/lib/transform-post.js @@ -26,6 +26,7 @@ export function transformBasicPost(post) { flair_url: post.flair_url, flair_bg_color: post.flair_bg_color, flair_color: post.flair_color, + flair_group_id: post.flair_group_id, wiki: post.wiki, lastWikiEdit: post.last_wiki_edit, firstPost: post.post_number === 1, diff --git a/app/assets/javascripts/discourse/app/widgets/post.js b/app/assets/javascripts/discourse/app/widgets/post.js index 496cad2123f..56a01a922b7 100644 --- a/app/assets/javascripts/discourse/app/widgets/post.js +++ b/app/assets/javascripts/discourse/app/widgets/post.js @@ -226,13 +226,15 @@ createWidget("post-avatar", { const postAvatarBody = [body]; - if (attrs.flair_url || attrs.flair_bg_color) { - postAvatarBody.push(this.attach("avatar-flair", attrs)); - } else { - const autoFlairAttrs = autoGroupFlairForUser(this.site, attrs); + if (attrs.flair_group_id) { + if (attrs.flair_url || attrs.flair_bg_color) { + postAvatarBody.push(this.attach("avatar-flair", attrs)); + } else { + const autoFlairAttrs = autoGroupFlairForUser(this.site, attrs); - if (autoFlairAttrs) { - postAvatarBody.push(this.attach("avatar-flair", autoFlairAttrs)); + if (autoFlairAttrs) { + postAvatarBody.push(this.attach("avatar-flair", autoFlairAttrs)); + } } } diff --git a/app/assets/javascripts/discourse/app/widgets/topic-map.js b/app/assets/javascripts/discourse/app/widgets/topic-map.js index 3cdce4732dd..4fe51192c19 100644 --- a/app/assets/javascripts/discourse/app/widgets/topic-map.js +++ b/app/assets/javascripts/discourse/app/widgets/topic-map.js @@ -80,12 +80,14 @@ createWidget("topic-participant", { linkContents.push(h("span.post-count", attrs.post_count.toString())); } - if (attrs.flair_url || attrs.flair_bg_color) { - linkContents.push(this.attach("avatar-flair", attrs)); - } else { - const autoFlairAttrs = autoGroupFlairForUser(this.site, attrs); - if (autoFlairAttrs) { - linkContents.push(this.attach("avatar-flair", autoFlairAttrs)); + if (attrs.flair_group_id) { + if (attrs.flair_url || attrs.flair_bg_color) { + linkContents.push(this.attach("avatar-flair", attrs)); + } else { + const autoFlairAttrs = autoGroupFlairForUser(this.site, attrs); + if (autoFlairAttrs) { + linkContents.push(this.attach("avatar-flair", autoFlairAttrs)); + } } } return h( diff --git a/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js b/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js index 06114f47f1c..735b7e5e58a 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js +++ b/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js @@ -54,6 +54,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) { admin: true, moderator: false, trust_level: 2, + flair_group_id: 12, }); setupSiteGroups(this); @@ -73,6 +74,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) { admin: false, moderator: true, trust_level: 2, + flair_group_id: 12, }); setupSiteGroups(this); @@ -92,6 +94,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) { admin: false, moderator: false, trust_level: 2, + flair_group_id: 12, }); setupSiteGroups(this); @@ -106,11 +109,26 @@ module("Integration | Component | user-avatar-flair", function (hooks) { ); }); + test("avatar flair for trust level when set to none", async function (assert) { + this.set("args", { + admin: false, + moderator: false, + trust_level: 2, + flair_group_id: null, + }); + setupSiteGroups(this); + + await render(hbs``); + + assert.ok(!exists(".avatar-flair"), "it does not render a flair"); + }); + test("avatar flair for trust level with fallback", async function (assert) { this.set("args", { admin: false, moderator: false, trust_level: 3, + flair_group_id: 13, }); setupSiteGroups(this); @@ -130,6 +148,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) { admin: false, moderator: false, trust_level: 3, + flair_group_id: 13, }); // Groups not serialized for anon on login_required this.site.groups = undefined; @@ -148,6 +167,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) { flair_url: "fa-times", flair_bg_color: "123456", flair_color: "B0B0B0", + flair_group_id: 41, primary_group_name: "Band Geeks", }); setupSiteGroups(this); @@ -168,6 +188,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) { admin: false, moderator: false, trust_level: 1, + flair_group_id: 11, }); await render(hbs``); diff --git a/app/assets/javascripts/discourse/tests/integration/components/widgets/topic-participant-test.js b/app/assets/javascripts/discourse/tests/integration/components/widgets/topic-participant-test.js index b49ea9f2267..c52b9f454c9 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/widgets/topic-participant-test.js +++ b/app/assets/javascripts/discourse/tests/integration/components/widgets/topic-participant-test.js @@ -34,6 +34,7 @@ module( flair_name: "devs", flair_url: "/images/d-logo-sketch-small.png", flair_bg_color: "222", + flair_group_id: "41", }); await render( diff --git a/app/serializers/post_serializer.rb b/app/serializers/post_serializer.rb index 0b359742413..aae1685cf14 100644 --- a/app/serializers/post_serializer.rb +++ b/app/serializers/post_serializer.rb @@ -37,6 +37,7 @@ class PostSerializer < BasicPostSerializer :flair_url, :flair_bg_color, :flair_color, + :flair_group_id, :version, :can_edit, :can_delete, @@ -213,6 +214,10 @@ class PostSerializer < BasicPostSerializer object.user&.flair_group&.flair_color end + def flair_group_id + object.user&.flair_group_id + end + def link_counts return @single_post_link_counts if @single_post_link_counts.present? diff --git a/app/serializers/topic_post_count_serializer.rb b/app/serializers/topic_post_count_serializer.rb index 5283910f168..02736f18605 100644 --- a/app/serializers/topic_post_count_serializer.rb +++ b/app/serializers/topic_post_count_serializer.rb @@ -7,6 +7,7 @@ class TopicPostCountSerializer < BasicUserSerializer :flair_url, :flair_color, :flair_bg_color, + :flair_group_id, :admin, :moderator, :trust_level @@ -44,6 +45,10 @@ class TopicPostCountSerializer < BasicUserSerializer object[:user]&.flair_group&.flair_color end + def flair_group_id + object[:user]&.flair_group_id + end + def include_admin? object[:user].admin end diff --git a/spec/requests/api/posts_spec.rb b/spec/requests/api/posts_spec.rb index 0657ac3a5e0..d5a2e5dd303 100644 --- a/spec/requests/api/posts_spec.rb +++ b/spec/requests/api/posts_spec.rb @@ -116,6 +116,9 @@ RSpec.describe "posts" do flair_color: { type: %i[string null], }, + flair_group_id: { + type: %i[string null], + }, version: { type: :integer, }, diff --git a/spec/requests/api/schemas/json/admin_user_response.json b/spec/requests/api/schemas/json/admin_user_response.json index 9cd73458205..49bfee28274 100644 --- a/spec/requests/api/schemas/json/admin_user_response.json +++ b/spec/requests/api/schemas/json/admin_user_response.json @@ -413,6 +413,9 @@ "flair_color": { "type": ["string", "null"] }, + "flair_group_id": { + "type": ["string", "null"] + }, "bio_raw": { "type": ["string", "null"] }, diff --git a/spec/requests/api/schemas/json/post_replies_response.json b/spec/requests/api/schemas/json/post_replies_response.json index 25e17cea7ae..2527616f79a 100644 --- a/spec/requests/api/schemas/json/post_replies_response.json +++ b/spec/requests/api/schemas/json/post_replies_response.json @@ -101,6 +101,12 @@ "null" ] }, + "flair_group_id": { + "type": [ + "string", + "null" + ] + }, "version": { "type": "integer" }, diff --git a/spec/requests/api/schemas/json/post_show_response.json b/spec/requests/api/schemas/json/post_show_response.json index 4487377b190..67a1dcb21e8 100644 --- a/spec/requests/api/schemas/json/post_show_response.json +++ b/spec/requests/api/schemas/json/post_show_response.json @@ -88,6 +88,12 @@ "null" ] }, + "flair_group_id": { + "type": [ + "string", + "null" + ] + }, "version": { "type": "integer" }, diff --git a/spec/requests/api/schemas/json/post_update_response.json b/spec/requests/api/schemas/json/post_update_response.json index 71ab4a32da2..7c21daa521e 100644 --- a/spec/requests/api/schemas/json/post_update_response.json +++ b/spec/requests/api/schemas/json/post_update_response.json @@ -92,6 +92,12 @@ "null" ] }, + "flair_group_id": { + "type": [ + "string", + "null" + ] + }, "version": { "type": "integer" }, diff --git a/spec/requests/api/schemas/json/topic_create_response.json b/spec/requests/api/schemas/json/topic_create_response.json index c933497183e..e3bb4d5932b 100644 --- a/spec/requests/api/schemas/json/topic_create_response.json +++ b/spec/requests/api/schemas/json/topic_create_response.json @@ -103,6 +103,12 @@ "null" ] }, + "flair_group_id": { + "type": [ + "string", + "null" + ] + }, "version": { "type": "integer" }, diff --git a/spec/requests/api/schemas/json/topic_show_response.json b/spec/requests/api/schemas/json/topic_show_response.json index 22b0c46233f..d26043cf153 100644 --- a/spec/requests/api/schemas/json/topic_show_response.json +++ b/spec/requests/api/schemas/json/topic_show_response.json @@ -828,6 +828,12 @@ "null" ] }, + "flair_group_id": { + "type": [ + "string", + "null" + ] + }, "admin": { "type": "boolean" }, diff --git a/spec/serializers/web_hook_post_serializer_spec.rb b/spec/serializers/web_hook_post_serializer_spec.rb index 5e2774451ce..a8c7aa1ea9b 100644 --- a/spec/serializers/web_hook_post_serializer_spec.rb +++ b/spec/serializers/web_hook_post_serializer_spec.rb @@ -32,6 +32,7 @@ RSpec.describe WebHookPostSerializer do :display_username, :primary_group_name, :flair_name, + :flair_group_id, :version, :user_title, :bookmarked,