diff options
Diffstat (limited to 'spec/javascript/components/emoji_index.test.js')
-rw-r--r-- | spec/javascript/components/emoji_index.test.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/spec/javascript/components/emoji_index.test.js b/spec/javascript/components/emoji_index.test.js new file mode 100644 index 000000000..cdb50cb8c --- /dev/null +++ b/spec/javascript/components/emoji_index.test.js @@ -0,0 +1,111 @@ +import { expect } from 'chai'; +import { search } from '../../../app/javascript/mastodon/features/emoji/emoji_mart_search_light'; +import { emojiIndex } from 'emoji-mart'; +import { pick } from 'lodash'; + +const trimEmojis = emoji => pick(emoji, ['id', 'unified', 'native', 'custom']); + +// hack to fix https://github.com/chaijs/type-detect/issues/98 +// see: https://github.com/chaijs/type-detect/issues/98#issuecomment-325010785 +import jsdom from 'jsdom'; +global.window = new jsdom.JSDOM().window; +global.document = window.document; +global.HTMLElement = window.HTMLElement; + +describe('emoji_index', () => { + + it('should give same result for emoji_index_light and emoji-mart', () => { + let expected = [{ + id: 'pineapple', + unified: '1f34d', + native: '🍍', + }]; + expect(search('pineapple').map(trimEmojis)).to.deep.equal(expected); + expect(emojiIndex.search('pineapple').map(trimEmojis)).to.deep.equal(expected); + }); + + it('orders search results correctly', () => { + let expected = [{ + id: 'apple', + unified: '1f34e', + native: '🍎', + }, { + id: 'pineapple', + unified: '1f34d', + native: '🍍', + }, { + id: 'green_apple', + unified: '1f34f', + native: '🍏', + }, { + id: 'iphone', + unified: '1f4f1', + native: '📱', + }]; + expect(search('apple').map(trimEmojis)).to.deep.equal(expected); + expect(emojiIndex.search('apple').map(trimEmojis)).to.deep.equal(expected); + }); + + it('handles custom emoji', () => { + let custom = [{ + id: 'mastodon', + name: 'mastodon', + short_names: ['mastodon'], + text: '', + emoticons: [], + keywords: ['mastodon'], + imageUrl: 'http://example.com', + custom: true, + }]; + search('', { custom }); + emojiIndex.search('', { custom }); + let expected = [ { id: 'mastodon', custom: true } ]; + expect(search('masto').map(trimEmojis)).to.deep.equal(expected); + expect(emojiIndex.search('masto').map(trimEmojis)).to.deep.equal(expected); + }); + + it('should filter only emojis we care about, exclude pineapple', () => { + let emojisToShowFilter = (unified) => unified !== '1F34D'; + expect(search('apple', { emojisToShowFilter }).map((obj) => obj.id)) + .not.to.contain('pineapple'); + expect(emojiIndex.search('apple', { emojisToShowFilter }).map((obj) => obj.id)) + .not.to.contain('pineapple'); + }); + + it('can include/exclude categories', () => { + expect(search('flag', { include: ['people'] })) + .to.deep.equal([]); + expect(emojiIndex.search('flag', { include: ['people'] })) + .to.deep.equal([]); + }); + + it('does an emoji whose unified name is irregular', () => { + let expected = [{ + 'id': 'water_polo', + 'unified': '1f93d', + 'native': '🤽', + }, { + 'id': 'man-playing-water-polo', + 'unified': '1f93d-200d-2642-fe0f', + 'native': '🤽♂️', + }, { + 'id': 'woman-playing-water-polo', + 'unified': '1f93d-200d-2640-fe0f', + 'native': '🤽♀️', + }]; + expect(search('polo').map(trimEmojis)).to.deep.equal(expected); + expect(emojiIndex.search('polo').map(trimEmojis)).to.deep.equal(expected); + }); + + it('can search for thinking_face', () => { + let expected = [ { id: 'thinking_face', unified: '1f914', native: '🤔' } ]; + expect(search('thinking_fac').map(trimEmojis)).to.deep.equal(expected); + expect(emojiIndex.search('thinking_fac').map(trimEmojis)).to.deep.equal(expected); + }); + + it('can search for woman-facepalming', () => { + let expected = [ { id: 'woman-facepalming', unified: '1f926-200d-2640-fe0f', native: '🤦♀️' } ]; + expect(search('woman-facep').map(trimEmojis)).to.deep.equal(expected); + expect(emojiIndex.search('woman-facep').map(trimEmojis)).deep.equal(expected); + }); +}); |