Created ImageDownloader test

This commit is contained in:
Alejandro Celaya 2021-09-19 10:57:36 +02:00
parent 3a8c7a7bf4
commit 9518a5e442
7 changed files with 50 additions and 32 deletions

View file

@ -1,19 +1,18 @@
module.exports = { module.exports = {
coverageDirectory: '<rootDir>/coverage', coverageDirectory: '<rootDir>/coverage',
collectCoverageFrom: [ collectCoverageFrom: [
'src/**/*.{js,ts,tsx}', 'src/**/*.{ts,tsx}',
'!src/registerServiceWorker.js', '!src/*.{ts,tsx}',
'!src/index.ts',
'!src/reducers/index.ts', '!src/reducers/index.ts',
'!src/**/provideServices.ts', '!src/**/provideServices.ts',
'!src/container/*.ts', '!src/container/*.ts',
], ],
coverageThreshold: { coverageThreshold: {
global: { global: {
statements: 80,
branches: 80, branches: 80,
functions: 80, functions: 80,
lines: 80, lines: 80,
statements: 80,
}, },
}, },
resolver: 'jest-pnp-resolver', resolver: 'jest-pnp-resolver',

View file

@ -0,0 +1,25 @@
import { Mock } from 'ts-mockery';
import { AxiosInstance } from 'axios';
import { ImageDownloader } from '../../../src/common/services/ImageDownloader';
import { windowMock } from '../../mocks/WindowMock';
describe('ImageDownloader', () => {
const get = jest.fn();
const axios = Mock.of<AxiosInstance>({ get });
let imageDownloader: ImageDownloader;
beforeEach(() => {
jest.clearAllMocks();
(global as any).URL = { createObjectURL: () => '' };
imageDownloader = new ImageDownloader(axios, windowMock);
});
test('calls URL with response type blob', async () => {
get.mockResolvedValue({ data: {} });
await imageDownloader.saveImage('/foo/bar.png', 'my-image.png');
expect(get).toHaveBeenCalledWith('/foo/bar.png', { responseType: 'blob' });
});
});

18
test/mocks/WindowMock.ts Normal file
View file

@ -0,0 +1,18 @@
import { Mock } from 'ts-mockery';
const createLinkMock = () => ({
setAttribute: jest.fn(),
click: jest.fn(),
style: {},
});
export const appendChild = jest.fn();
export const removeChild = jest.fn();
export const windowMock = Mock.of<Window>({
document: {
createElement: jest.fn(createLinkMock),
body: { appendChild, removeChild },
},
});

View file

@ -2,21 +2,9 @@ import { Mock } from 'ts-mockery';
import { CsvJson } from 'csvjson'; import { CsvJson } from 'csvjson';
import ServersExporter from '../../../src/servers/services/ServersExporter'; import ServersExporter from '../../../src/servers/services/ServersExporter';
import LocalStorage from '../../../src/utils/services/LocalStorage'; import LocalStorage from '../../../src/utils/services/LocalStorage';
import { appendChild, removeChild, windowMock } from '../../mocks/WindowMock';
describe('ServersExporter', () => { describe('ServersExporter', () => {
const createLinkMock = () => ({
setAttribute: jest.fn(),
click: jest.fn(),
style: {},
});
const appendChild = jest.fn();
const removeChild = jest.fn();
const windowMock = Mock.of<Window>({
document: {
createElement: jest.fn(createLinkMock),
body: { appendChild, removeChild },
},
});
const storageMock = Mock.of<LocalStorage>({ const storageMock = Mock.of<LocalStorage>({
get: jest.fn(() => ({ get: jest.fn(() => ({
abc123: { abc123: {

View file

@ -3,7 +3,7 @@ import { Doughnut } from 'react-chartjs-2';
import { keys, values } from 'ramda'; import { keys, values } from 'ramda';
import { DoughnutChart } from '../../../src/visits/charts/DoughnutChart'; import { DoughnutChart } from '../../../src/visits/charts/DoughnutChart';
describe.skip('<DoughnutChart />', () => { describe('<DoughnutChart />', () => {
let wrapper: ShallowWrapper; let wrapper: ShallowWrapper;
const stats = { const stats = {
foo: 123, foo: 123,

View file

@ -4,7 +4,7 @@ import { prettify } from '../../../src/utils/helpers/numbers';
import { MAIN_COLOR, MAIN_COLOR_ALPHA } from '../../../src/utils/theme'; import { MAIN_COLOR, MAIN_COLOR_ALPHA } from '../../../src/utils/theme';
import { HorizontalBarChart } from '../../../src/visits/charts/HorizontalBarChart'; import { HorizontalBarChart } from '../../../src/visits/charts/HorizontalBarChart';
describe.skip('<HorizontalBarChart />', () => { describe('<HorizontalBarChart />', () => {
let wrapper: ShallowWrapper; let wrapper: ShallowWrapper;
const stats = { const stats = {
foo: 123, foo: 123,
@ -16,7 +16,6 @@ describe.skip('<HorizontalBarChart />', () => {
it('renders Bar with expected properties', () => { it('renders Bar with expected properties', () => {
wrapper = shallow(<HorizontalBarChart stats={stats} />); wrapper = shallow(<HorizontalBarChart stats={stats} />);
const horizontal = wrapper.find(Bar); const horizontal = wrapper.find(Bar);
const cols = wrapper.find('.col-sm-12');
expect(horizontal).toHaveLength(1); expect(horizontal).toHaveLength(1);
@ -37,7 +36,6 @@ describe.skip('<HorizontalBarChart />', () => {
}, },
y: { stacked: true }, y: { stacked: true },
}); });
expect(cols).toHaveLength(1);
}); });
it.each([ it.each([

View file

@ -2,19 +2,9 @@ import { Mock } from 'ts-mockery';
import { CsvJson } from 'csvjson'; import { CsvJson } from 'csvjson';
import { VisitsExporter } from '../../../src/visits/services/VisitsExporter'; import { VisitsExporter } from '../../../src/visits/services/VisitsExporter';
import { NormalizedVisit } from '../../../src/visits/types'; import { NormalizedVisit } from '../../../src/visits/types';
import { windowMock } from '../../mocks/WindowMock';
describe('VisitsExporter', () => { describe('VisitsExporter', () => {
const createLinkMock = () => ({
setAttribute: jest.fn(),
click: jest.fn(),
style: {},
});
const windowMock = Mock.of<Window>({
document: {
createElement: jest.fn(createLinkMock),
body: { appendChild: jest.fn(), removeChild: jest.fn() },
},
});
const toCSV = jest.fn(); const toCSV = jest.fn();
const csvToJsonMock = Mock.of<CsvJson>({ toCSV }); const csvToJsonMock = Mock.of<CsvJson>({ toCSV });
let exporter: VisitsExporter; let exporter: VisitsExporter;