2019-04-29 19:27:42 -05:00
# frozen_string_literal: true
2022-07-27 21:27:38 -05:00
RSpec . describe Emoji do
2016-07-05 12:55:21 -05:00
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
2017-05-05 01:53:38 -05: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 01:29:17 -06:00
CustomEmoji . create! ( name : 'test' , upload_id : 9999 )
2017-05-05 01:53:38 -05:00
emoji = Emoji . load_custom . first
expect ( emoji . name ) . to eq ( 'test' )
expect ( emoji . url ) . to eq ( nil )
end
end
end
2017-06-13 13:03:59 -05:00
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
2019-06-26 08:11:04 -05: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
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
2022-02-15 19:46:17 -06:00
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
2021-06-25 12:48:36 -05: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 05:18:59 -06: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-25 12:48:36 -05: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 05:18:59 -06: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-25 12:48:36 -05:00
end
end
2022-09-14 06:10:48 -05:00
describe " .groups " do
it " returns an optimized emoji name -> group name datastructure " do
expect ( Emoji . groups [ " scotland " ] ) . to eq ( " flags " )
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
2022-10-15 07:09:00 -05:00
it " sets the search aliases of the emoji " do
emoji = Emoji . create_from_db_item ( " name " = > " sad " )
expect ( emoji . search_aliases ) . to contain_exactly ( " frowning_face " , " slightly_frowning_face " , " sob " , " crying_cat_face " , " cry " , " face_holding_back_tears " )
end
2022-09-14 06:10:48 -05:00
end
2016-07-05 12:55:21 -05:00
end