FEATURE - Add username column to custom emoji table (#29522)

* Adds emoji column for creator username
This commit is contained in:
benj 2024-11-01 10:32:59 -05:00 committed by GitHub
parent 68c7c8e25d
commit cfc23c43e9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 41 additions and 3 deletions

View File

@ -25,6 +25,8 @@
<tr>
<th>{{i18n "admin.emoji.image"}}</th>
<th>{{i18n "admin.emoji.name"}}</th>
<th>{{i18n "admin.emoji.group"}}</th>
<th>{{i18n "admin.emoji.created_by"}}</th>
<th colspan="2">
<ComboBox
@value={{this.filter}}
@ -47,6 +49,7 @@
/></td>
<td>:{{e.name}}:</td>
<td>{{e.group}}</td>
<td>{{e.created_by}}</td>
<td class="action">
<DButton
@action={{fn this.destroyEmoji e}}

View File

@ -24,6 +24,7 @@ module("Integration | Component | emoji-uploader", function (hooks) {
return response({
group: "cool-emojis",
name: "okay",
created_by: "benji",
url: "//upload.s3.dualstack.us-east-2.amazonaws.com/original/1X/123.png",
});
} else if (requestNumber === 2) {
@ -125,4 +126,27 @@ module("Integration | Component | emoji-uploader", function (hooks) {
.lookup("service:app-events")
.trigger("upload-mixin:emoji-uploader:add-files", [image, image2]);
});
test("sets the created_by field with username", async function (assert) {
await render(hbs`
<EmojiUploader
@id="emoji-uploader"
@emojiGroups={{this.emojiGroups}}
@createdBy={{this.createdBy}}
@done={{this.doneUpload}}
/>
`);
const done = assert.async();
this.set("doneUpload", (upload) => {
assert.strictEqual(upload.created_by, "benji");
done();
});
const image = createFile("avatar.png");
await this.container
.lookup("service:app-events")
.trigger("upload-mixin:emoji-uploader:add-files", [image]);
});
});

View File

@ -10,7 +10,7 @@ class Emoji
include ActiveModel::SerializerSupport
attr_accessor :name, :url, :tonable, :group, :search_aliases
attr_accessor :name, :url, :tonable, :group, :search_aliases, :created_by
def self.global_emoji_cache
@global_emoji_cache ||= DistributedCache.new("global_emoji_cache", namespace: false)
@ -190,6 +190,7 @@ class Emoji
e.name = emoji.name
e.url = emoji.upload&.url
e.group = emoji.group || DEFAULT_GROUP
e.created_by = User.where(id: emoji.user_id).pick(:username)
end
end
end

View File

@ -1,7 +1,11 @@
# frozen_string_literal: true
class EmojiSerializer < ApplicationSerializer
attributes :name, :url, :group
attributes :name, :url, :group, :created_by
def created_by
object.created_by
end
def url
return nil if object.url.blank?

View File

@ -7201,6 +7201,7 @@ en:
uploading: "Uploading…"
name: "Name"
group: "Group"
created_by: "Created By"
image: "Image"
alt: "custom emoji preview"
delete_confirm: "Are you sure you want to delete the :%{name}: emoji?"

View File

@ -11,7 +11,7 @@ RSpec.describe Admin::EmojisController do
before { sign_in(admin) }
it "returns a list of custom emojis" do
CustomEmoji.create!(name: "osama-test-emoji", upload: upload)
CustomEmoji.create!(name: "osama-test-emoji", upload: upload, user: admin)
Emoji.clear_cache
get "/admin/customize/emojis.json"
@ -20,6 +20,7 @@ RSpec.describe Admin::EmojisController do
json = response.parsed_body
expect(json[0]["name"]).to eq("osama-test-emoji")
expect(json[0]["url"]).to eq(upload.url)
expect(json[0]["created_by"]).to eq(admin.username)
end
end

View File

@ -12,6 +12,10 @@ RSpec.describe EmojiSerializer do
expect(serializer.url).to start_with("/uploads/")
end
it "returns the creator's username" do
expect(serializer.created_by).to eq(emoji.created_by)
end
it "works with a CDN" do
set_cdn_url("https://cdn.com")
expect(serializer.url).to start_with("https://cdn.com")