mirror of
https://github.com/mastodon/mastodon.git
synced 2025-09-06 01:41:08 +00:00

Some checks failed
Check i18n / check-i18n (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Check formatting / lint (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.2) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Chromatic / Run Chromatic (push) Has been cancelled
CSS Linting / lint (push) Has been cancelled
JavaScript Linting / lint (push) Has been cancelled
JavaScript Testing / test (push) Has been cancelled
140 lines
4.3 KiB
TypeScript
140 lines
4.3 KiB
TypeScript
import { IDBFactory } from 'fake-indexeddb';
|
|
|
|
import { unicodeEmojiFactory } from '@/testing/factories';
|
|
|
|
import {
|
|
putEmojiData,
|
|
loadEmojiByHexcode,
|
|
searchEmojisByHexcodes,
|
|
searchEmojisByTag,
|
|
testClear,
|
|
testGet,
|
|
} from './database';
|
|
|
|
describe('emoji database', () => {
|
|
afterEach(() => {
|
|
testClear();
|
|
indexedDB = new IDBFactory();
|
|
});
|
|
describe('putEmojiData', () => {
|
|
test('adds to loaded locales', async () => {
|
|
const { loadedLocales } = await testGet();
|
|
expect(loadedLocales).toHaveLength(0);
|
|
await putEmojiData([], 'en');
|
|
expect(loadedLocales).toContain('en');
|
|
});
|
|
|
|
test('loads emoji into indexedDB', async () => {
|
|
await putEmojiData([unicodeEmojiFactory()], 'en');
|
|
const { db } = await testGet();
|
|
await expect(db.get('en', 'test')).resolves.toEqual(
|
|
unicodeEmojiFactory(),
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('loadEmojiByHexcode', () => {
|
|
test('throws if the locale is not loaded', async () => {
|
|
await expect(loadEmojiByHexcode('en', 'test')).rejects.toThrowError(
|
|
'Locale en',
|
|
);
|
|
});
|
|
|
|
test('retrieves the emoji', async () => {
|
|
await putEmojiData([unicodeEmojiFactory()], 'en');
|
|
await expect(loadEmojiByHexcode('test', 'en')).resolves.toEqual(
|
|
unicodeEmojiFactory(),
|
|
);
|
|
});
|
|
|
|
test('returns undefined if not found', async () => {
|
|
await putEmojiData([], 'en');
|
|
await expect(loadEmojiByHexcode('test', 'en')).resolves.toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe('searchEmojisByHexcodes', () => {
|
|
const data = [
|
|
unicodeEmojiFactory({ hexcode: 'not a number' }),
|
|
unicodeEmojiFactory({ hexcode: '1' }),
|
|
unicodeEmojiFactory({ hexcode: '2' }),
|
|
unicodeEmojiFactory({ hexcode: '3' }),
|
|
unicodeEmojiFactory({ hexcode: 'another not a number' }),
|
|
];
|
|
beforeEach(async () => {
|
|
await putEmojiData(data, 'en');
|
|
});
|
|
test('finds emoji in consecutive range', async () => {
|
|
const actual = await searchEmojisByHexcodes(['1', '2', '3'], 'en');
|
|
expect(actual).toHaveLength(3);
|
|
});
|
|
|
|
test('finds emoji in split range', async () => {
|
|
const actual = await searchEmojisByHexcodes(['1', '3'], 'en');
|
|
expect(actual).toHaveLength(2);
|
|
expect(actual).toContainEqual(data.at(1));
|
|
expect(actual).toContainEqual(data.at(3));
|
|
});
|
|
|
|
test('finds emoji with non-numeric range', async () => {
|
|
const actual = await searchEmojisByHexcodes(
|
|
['3', 'not a number', '1'],
|
|
'en',
|
|
);
|
|
expect(actual).toHaveLength(3);
|
|
expect(actual).toContainEqual(data.at(0));
|
|
expect(actual).toContainEqual(data.at(1));
|
|
expect(actual).toContainEqual(data.at(3));
|
|
});
|
|
|
|
test('not found emoji are not returned', async () => {
|
|
const actual = await searchEmojisByHexcodes(['not found'], 'en');
|
|
expect(actual).toHaveLength(0);
|
|
});
|
|
|
|
test('only found emojis are returned', async () => {
|
|
const actual = await searchEmojisByHexcodes(
|
|
['another not a number', 'not found'],
|
|
'en',
|
|
);
|
|
expect(actual).toHaveLength(1);
|
|
expect(actual).toContainEqual(data.at(4));
|
|
});
|
|
});
|
|
|
|
describe('searchEmojisByTag', () => {
|
|
const data = [
|
|
unicodeEmojiFactory({ hexcode: 'test1', tags: ['test 1'] }),
|
|
unicodeEmojiFactory({
|
|
hexcode: 'test2',
|
|
tags: ['test 2', 'something else'],
|
|
}),
|
|
unicodeEmojiFactory({ hexcode: 'test3', tags: ['completely different'] }),
|
|
];
|
|
beforeEach(async () => {
|
|
await putEmojiData(data, 'en');
|
|
});
|
|
test('finds emojis with tag', async () => {
|
|
const actual = await searchEmojisByTag('test 1', 'en');
|
|
expect(actual).toHaveLength(1);
|
|
expect(actual).toContainEqual(data.at(0));
|
|
});
|
|
|
|
test('finds emojis starting with tag', async () => {
|
|
const actual = await searchEmojisByTag('test', 'en');
|
|
expect(actual).toHaveLength(2);
|
|
expect(actual).not.toContainEqual(data.at(2));
|
|
});
|
|
|
|
test('does not find emojis ending with tag', async () => {
|
|
const actual = await searchEmojisByTag('else', 'en');
|
|
expect(actual).toHaveLength(0);
|
|
});
|
|
|
|
test('finds nothing with invalid tag', async () => {
|
|
const actual = await searchEmojisByTag('not found', 'en');
|
|
expect(actual).toHaveLength(0);
|
|
});
|
|
});
|
|
});
|