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,