about summary refs log tree commit diff
path: root/spec/javascript/components/emoji_index.test.js
blob: 4bff7926500a1c65ec98257cbd2c44d4e6797f3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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);
  });
});