2019-04-29 20:27:42 -04:00
# frozen_string_literal: true
2022-07-27 22:27:38 -04:00
RSpec . describe Emoji do
2016-07-05 13:55:21 -04: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 02:53:38 -04: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 02:29:17 -05:00
CustomEmoji . create! ( name : 'test' , upload_id : 9999 )
2017-05-05 02:53:38 -04:00
emoji = Emoji . load_custom . first
expect ( emoji . name ) . to eq ( 'test' )
expect ( emoji . url ) . to eq ( nil )
end
end
end
2017-06-13 14:03:59 -04: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 09:11:04 -04: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 20:46:17 -05: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 13:48:36 -04: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 06:18:59 -05: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 13:48:36 -04: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 06:18:59 -05: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 13:48:36 -04:00
end
end
2022-09-14 07:10:48 -04: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 03:53:56 -04: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 07:10:48 -04: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 08:09:00 -04:00
2022-10-19 03:53:56 -04:00
it " sets the group of the emoji " do
emoji = Emoji . create_from_db_item ( " name " = > " scotland " )
expect ( emoji . group ) . to eq ( " flags " )
end
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 08:09:00 -04:00
end
2022-09-14 07:10:48 -04:00
end
2016-07-05 13:55:21 -04:00
end