/*
* Wire
* Copyright (C) 2018 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/
import React from 'react';
import {fireEvent, render, screen, act} from '@testing-library/react';
import {EntropyCanvas} from './EntropyCanvas';
import {EntropyData} from '../../util/Entropy';
import {withIntl, withTheme} from '../util/test/TestUtil';
require('jest-canvas-mock');
describe('EntropyCanvas', () => {
afterEach(() => {
jest.clearAllMocks();
});
const setStateMock = jest.fn();
const useStateMock: any = (useState: any) => [useState, setStateMock];
jest.spyOn(React, 'useState').mockImplementation(useStateMock);
const setErrorMock = jest.fn();
const useErrorMock: any = (useState: any) => [useState, setErrorMock];
jest.spyOn(React, 'useState').mockImplementation(useErrorMock);
const [, setEntropy] = useStateMock([]);
const [, setError] = useErrorMock(null);
const mockOnProgress = jest.fn((entropyData: EntropyData, percent: number, pause: boolean) => {
setEntropy(entropyData);
setError(pause);
});
it('reacts to drawing', async () => {
render(
withTheme(
withIntl(
,
),
),
);
const canvas = screen.getByTestId('element-entropy-canvas');
await act(async () => {
fireEvent.mouseEnter(canvas);
fireEvent.mouseMove(canvas);
fireEvent.mouseLeave(canvas);
});
expect(setEntropy).toHaveBeenCalledTimes(1);
expect(setError).toHaveBeenCalledTimes(7);
});
it('starts drawing again after leaving canvas', async () => {
render(
withTheme(
withIntl(
,
),
),
);
const canvas = screen.getByTestId('element-entropy-canvas');
await act(async () => {
fireEvent.mouseEnter(canvas);
fireEvent.mouseMove(canvas);
fireEvent.mouseLeave(canvas);
fireEvent.mouseEnter(canvas);
fireEvent.mouseMove(canvas);
fireEvent.mouseLeave(canvas);
});
expect(setEntropy).toHaveBeenCalledTimes(2);
expect(setError).toHaveBeenCalledTimes(14);
});
});