2019-04-30 08:27:42 +08:00
# frozen_string_literal: true
2022-07-28 10:27:38 +08:00
RSpec . describe Emoji do
2016-07-06 01:55:21 +08:00
it " returns the correct codepoints " do
expect ( Emoji . replacement_code ( " 1f47d " ) . codepoints ) . to eq ( [ 128_125 ] )
end
it " handles multiple codepoints " do
expect ( Emoji . replacement_code ( " 1f1e9-1f1ea " ) . codepoints ) . to eq ( [ 127_465 , 127_466 ] )
end
2017-05-05 14:53:38 +08:00
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
2019-01-02 15:29:17 +08:00
CustomEmoji . create! ( name : " test " , upload_id : 9999 )
2017-05-05 14:53:38 +08:00
emoji = Emoji . load_custom . first
expect ( emoji . name ) . to eq ( " test " )
expect ( emoji . url ) . to eq ( nil )
end
end
end
2017-06-14 02:03:59 +08:00
describe " .lookup_unicode " do
2023-04-13 15:38:54 +08:00
before do
SiteSetting . emoji_deny_list = " peach "
Emoji . clear_cache
end
2017-06-14 02:03:59 +08:00
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
2023-04-13 15:38:54 +08:00
it " should not return a fu emoji when emoji is in emoji deny list site setting " do
expect ( Emoji . lookup_unicode ( " peach " ) ) . not_to eq ( " 🍑 " )
end
2017-06-14 02:03:59 +08:00
end
2019-06-26 21:11:04 +08:00
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
2023-03-22 00:48:55 +08:00
it " finds a custom emoji with a name with :t1 in the middle " do
CustomEmoji . create! ( name : " test:t1:foo " , upload_id : 9999 )
Emoji . clear_cache
expect ( Emoji . exists? ( " :test:t1:foo: " ) ) . to be ( true )
expect ( Emoji . exists? ( " test:t1:foo " ) ) . to be ( true )
end
2019-06-26 21:11:04 +08:00
it " doesn’ t 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
2021-06-26 01:48:36 +08:00
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 )
2022-02-09 19:18:59 +08:00
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 \" > " ,
)
2021-06-26 01:48:36 +08:00
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 )
2022-02-09 19:18:59 +08:00
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: " ,
)
2021-06-26 01:48:36 +08:00
end
end
2022-09-14 19:10:48 +08:00
describe " .groups " do
it " returns an optimized emoji name -> group name datastructure " do
expect ( Emoji . groups [ " scotland " ] ) . to eq ( " flags " )
end
end
2022-10-19 15:53:56 +08:00
describe " .load_standard " do
it " removes nil emojis " do
expect ( Emoji . load_standard . any? { | element | element . nil? } ) . to be false
end
end
2022-09-14 19:10:48 +08:00
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
2022-10-15 20:09:00 +08:00
2022-10-19 15:53:56 +08:00
it " doesn’ t create emoji when group is unknown " do
emoji = Emoji . create_from_db_item ( " name " = > " white_hair " )
expect ( emoji ) . to be_nil
2022-10-15 20:09:00 +08:00
end
2022-09-14 19:10:48 +08:00
end
2016-07-06 01:55:21 +08:00
end