discourse/spec/models/emoji_spec.rb

169 lines
5.4 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
RSpec.describe Emoji do
it "returns the correct codepoints" do
expect(Emoji.replacement_code('1f47d').codepoints).to eq([128125])
end
it "handles multiple codepoints" do
expect(Emoji.replacement_code('1f1e9-1f1ea').codepoints).to eq([127465, 127466])
end
describe '.load_custom' do
describe 'when a custom emoji has an invalid upload_id' do
it 'should return the custom emoji without a URL' do
CustomEmoji.create!(name: 'test', upload_id: 9999)
emoji = Emoji.load_custom.first
expect(emoji.name).to eq('test')
expect(emoji.url).to eq(nil)
end
end
end
describe '.lookup_unicode' do
it 'should return the emoji' do
expect(Emoji.lookup_unicode("blonde_man")).to eq("👱")
end
it 'should return an aliased emoji' do
expect(Emoji.lookup_unicode("anger_right")).to eq("🗯")
end
it 'should return a skin toned emoji' do
expect(Emoji.lookup_unicode("blonde_woman:t6")).to eq("👱🏿‍♀️")
end
end
describe '.url_for' do
expected_url = "/images/emoji/twitter/blonde_woman.png?v=#{Emoji::EMOJI_VERSION}"
expected_toned_url = "/images/emoji/twitter/blonde_woman/6.png?v=#{Emoji::EMOJI_VERSION}"
it 'should return url with filename' do
expect(Emoji.url_for("blonde_woman")).to eq(expected_url)
end
it 'should return url with skin toned filename' do
expect(Emoji.url_for("blonde_woman/6")).to eq(expected_toned_url)
end
it 'should return url with code' do
expect(Emoji.url_for(":blonde_woman:")).to eq(expected_url)
end
it 'should return url with skin toned code' do
expect(Emoji.url_for(":blonde_woman:t6:")).to eq(expected_toned_url)
expect(Emoji.url_for("blonde_woman:t6")).to eq(expected_toned_url)
end
end
describe '.exists?' do
it 'finds existing emoji' do
expect(Emoji.exists?(":blonde_woman:")).to be(true)
expect(Emoji.exists?("blonde_woman")).to be(true)
end
it 'finds existing skin toned emoji' do
expect(Emoji.exists?(":blonde_woman:t1:")).to be(true)
expect(Emoji.exists?("blonde_woman:t6")).to be(true)
end
it 'finds existing custom emoji' do
CustomEmoji.create!(name: 'test', upload_id: 9999)
Emoji.clear_cache
expect(Emoji.exists?(":test:")).to be(true)
expect(Emoji.exists?("test")).to be(true)
end
it 'doesnt find non-existing emoji' do
expect(Emoji.exists?(":foo-bar:")).to be(false)
expect(Emoji.exists?(":blonde_woman:t7:")).to be(false)
expect(Emoji.exists?("blonde_woman:t0")).to be(false)
expect(Emoji.exists?("blonde_woman:t")).to be(false)
end
end
describe 'version updates' do
it 'should correct cache when global emojis cache is stale' do
Emoji.global_emoji_cache["blonde_man"] = [
"invalid",
Emoji.new
]
emoji = Emoji[":blonde_man:t3"]
expect(emoji.name).to eq('blonde_man')
expect(emoji.tonable).to eq(true)
end
it 'should correct cache when site emojis cache is stale' do
CustomEmoji.create!(name: 'test123', upload_id: 9999)
Emoji.clear_cache
Emoji.site_emoji_cache["test123"] = [
"invalid",
Emoji.new
]
emoji = Emoji[":test123:"]
expect(emoji.name).to eq('test123')
expect(emoji.tonable).to be_falsey
Emoji.clear_cache
end
end
describe '.codes_to_img' do
before { Plugin::CustomEmoji.clear_cache }
after { Plugin::CustomEmoji.clear_cache }
it "replaces emoji codes by images" do
Plugin::CustomEmoji.register("xxxxxx", "/public/xxxxxx.png")
str = "This is a good day :xxxxxx: :woman: :man:t4:"
replaced_str = described_class.codes_to_img(str)
expect(replaced_str).to eq("This is a good day <img src=\"/public/xxxxxx.png\" title=\"xxxxxx\" class=\"emoji\" alt=\"xxxxxx\" loading=\"lazy\" width=\"20\" height=\"20\"> <img src=\"/images/emoji/twitter/woman.png?v=#{Emoji::EMOJI_VERSION}\" title=\"woman\" class=\"emoji\" alt=\"woman\" loading=\"lazy\" width=\"20\" height=\"20\"> <img src=\"/images/emoji/twitter/man/4.png?v=#{Emoji::EMOJI_VERSION}\" title=\"man:t4\" class=\"emoji\" alt=\"man:t4\" loading=\"lazy\" width=\"20\" height=\"20\">")
end
it "doesn't replace if code doesn't exist" do
str = "This is a good day :woman: :foo: :bar:t4: :man:t8:"
replaced_str = described_class.codes_to_img(str)
expect(replaced_str).to eq("This is a good day <img src=\"/images/emoji/twitter/woman.png?v=#{Emoji::EMOJI_VERSION}\" title=\"woman\" class=\"emoji\" alt=\"woman\" loading=\"lazy\" width=\"20\" height=\"20\"> :foo: :bar:t4: :man:t8:")
end
end
describe ".groups" do
it "returns an optimized emoji name -> group name datastructure" do
expect(Emoji.groups["scotland"]).to eq("flags")
end
end
describe ".load_standard" do
it "removes nil emojis" do
expect(Emoji.load_standard.any? { |element| element.nil? }).to be false
end
end
describe "#create_from_db_item" do
it "sets the group of the emoji" do
emoji = Emoji.create_from_db_item("name" => "scotland")
expect(emoji.group).to eq("flags")
end
it "sets the group of the emoji" do
emoji = Emoji.create_from_db_item("name" => "scotland")
expect(emoji.group).to eq("flags")
end
it "doesnt create emoji when group is unknown" do
emoji = Emoji.create_from_db_item("name" => "white_hair")
expect(emoji).to be_nil
end
end
end