2
0
mirror of https://github.com/iconify/iconify.git synced 2024-11-14 08:44:05 +00:00
iconify/packages/browser-tests/tests/10-fake-api-test.ts
2021-09-27 18:53:31 +03:00

202 lines
4.0 KiB
TypeScript

import mocha from 'mocha';
import chai from 'chai';
import { FakeData, setFakeData, prepareQuery, sendQuery } from './fake-api';
import { setAPIModule } from '@iconify/core/lib/api/modules';
import { addAPIProvider } from '@iconify/core/lib/api/config';
import { loadIcons } from '@iconify/core/lib/api/icons';
const expect = chai.expect;
let prefixCounter = 0;
function nextPrefix(): string {
return 'fake-api-' + prefixCounter++;
}
describe('Testing fake API', () => {
before(() => {
setAPIModule('', {
prepare: prepareQuery,
send: sendQuery,
});
});
it('Loading results', (done) => {
const provider = nextPrefix();
const prefix = nextPrefix();
const data: FakeData = {
icons: ['icon1', 'icon2'],
data: {
prefix,
icons: {
icon1: {
body: '<path d="M10 20v-6h4v6h5v-8h3L12 3L2 12h3v8h5z" fill="currentColor"/>',
},
icon2: {
body: '<path d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4z" fill="currentColor"/>',
},
},
width: 24,
height: 24,
},
};
addAPIProvider(provider, {
resources: ['https://api1.local', 'https://api2.local'],
});
setFakeData(provider, prefix, data);
// Attempt to load icons
loadIcons(
[
provider + ':' + prefix + ':icon1',
provider + ':' + prefix + ':icon2',
],
(loaded, missing, pending) => {
expect(loaded).to.be.eql([
{
provider,
prefix,
name: 'icon1',
},
{
provider,
prefix,
name: 'icon2',
},
]);
done();
}
);
});
it('Loading results with delay', (done) => {
const provider = nextPrefix();
const prefix = nextPrefix();
const data: FakeData = {
icons: ['icon1', 'icon2'],
delay: 100,
data: {
prefix,
icons: {
icon1: {
body: '<path d="M10 20v-6h4v6h5v-8h3L12 3L2 12h3v8h5z" fill="currentColor"/>',
},
icon2: {
body: '<path d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4z" fill="currentColor"/>',
},
},
width: 24,
height: 24,
},
};
addAPIProvider(provider, {
resources: ['https://api1.local', 'https://api2.local'],
});
setFakeData(provider, prefix, data);
// Attempt to load icons
const start = Date.now();
loadIcons(
[
{
provider,
prefix,
name: 'icon1',
},
{
provider,
prefix,
name: 'icon2',
},
],
(loaded, missing, pending) => {
expect(loaded).to.be.eql([
{
provider,
prefix,
name: 'icon1',
},
{
provider,
prefix,
name: 'icon2',
},
]);
const end = Date.now();
expect(end - start).to.be.at.least(50);
expect(end - start).to.be.at.most(150);
done();
}
);
});
it('Loading partial results', (done) => {
const provider = nextPrefix();
const prefix = nextPrefix();
const data: FakeData = {
icons: ['icon1'],
delay: 20,
data: {
prefix,
icons: {
icon1: {
body: '<path d="M10 20v-6h4v6h5v-8h3L12 3L2 12h3v8h5z" fill="currentColor"/>',
},
},
width: 24,
height: 24,
},
};
addAPIProvider(provider, {
resources: ['https://api1.local', 'https://api2.local'],
rotate: 20,
timeout: 100,
});
setFakeData(provider, prefix, data);
// Attempt to load icons
let counter = 0;
loadIcons(
[
provider + ':' + prefix + ':icon1',
provider + ':' + prefix + ':icon2',
],
(loaded, missing, pending) => {
try {
counter++;
switch (counter) {
case 1:
// Loaded icon1
expect(loaded).to.be.eql([
{
provider,
prefix,
name: 'icon1',
},
]);
expect(pending).to.be.eql([
{
provider,
prefix,
name: 'icon2',
},
]);
expect(missing).to.be.eql([]);
done();
break;
case 2:
done(
'Callback should not be called ' +
counter +
' times.'
);
}
} catch (err) {
done(err);
}
}
);
});
});