112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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);
 | 
						|
  });
 | 
						|
});
 |