shlink-web-client/test/servers/services/ServersImporter.test.ts

44 lines
1.6 KiB
TypeScript
Raw Normal View History

import { Mock } from 'ts-mockery';
2020-11-14 01:06:03 +03:00
import { CsvJson } from 'csvjson';
import ServersImporter from '../../../src/servers/services/ServersImporter';
import { RegularServer } from '../../../src/servers/data';
describe('ServersImporter', () => {
const servers: RegularServer[] = [ Mock.all<RegularServer>(), Mock.all<RegularServer>() ];
2020-11-14 01:06:03 +03:00
const toObject = jest.fn().mockReturnValue(servers);
const csvjsonMock = Mock.of<CsvJson>({ toObject });
const readAsText = jest.fn();
const fileReaderMock = Mock.of<FileReader>({
readAsText,
addEventListener: (_eventName: string, listener: Function) => listener({ target: { result: '' } }),
});
const importer = new ServersImporter(csvjsonMock, () => fileReaderMock);
beforeEach(jest.clearAllMocks);
describe('importServersFromFile', () => {
it('rejects with error if no file was provided', async () => {
await expect(importer.importServersFromFile()).rejects.toEqual(
new Error('No file provided or file is not a CSV'),
);
});
it('rejects with error if provided file is not a CSV', async () => {
await expect(importer.importServersFromFile(Mock.of<File>({ type: 'text/html' }))).rejects.toEqual(
new Error('No file provided or file is not a CSV'),
);
});
it.each([
[ 'text/csv' ],
[ 'text/comma-separated-values' ],
[ 'application/csv' ],
])('reads file when a CSV is provided', async (type) => {
await importer.importServersFromFile(Mock.of<File>({ type }));
expect(readAsText).toHaveBeenCalledTimes(1);
2020-11-14 01:06:03 +03:00
expect(toObject).toHaveBeenCalledTimes(1);
});
});
});