2022-12-05 14:15:26 +08:00
|
|
|
import React, { useState } from 'react';
|
2023-11-30 15:02:32 +08:00
|
|
|
|
2022-12-05 14:15:26 +08:00
|
|
|
import QRCode from '..';
|
|
|
|
import mountTest from '../../../tests/shared/mountTest';
|
|
|
|
import rtlTest from '../../../tests/shared/rtlTest';
|
|
|
|
import { fireEvent, render } from '../../../tests/utils';
|
|
|
|
import type { QRCodeProps } from '../interface';
|
|
|
|
|
|
|
|
describe('QRCode test', () => {
|
2024-04-01 15:49:45 +08:00
|
|
|
mountTest(QRCode as any);
|
|
|
|
rtlTest(QRCode as any);
|
2022-12-05 14:15:26 +08:00
|
|
|
|
|
|
|
it('should correct render', () => {
|
|
|
|
const { container } = render(<QRCode value="test" />);
|
|
|
|
expect(
|
|
|
|
container
|
|
|
|
?.querySelector<HTMLDivElement>('.ant-qrcode')
|
|
|
|
?.querySelector<HTMLCanvasElement>('canvas'),
|
|
|
|
).toBeTruthy();
|
|
|
|
expect(container).toMatchSnapshot();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should render `null` and console Error when value not exist', () => {
|
2023-06-07 21:59:21 +08:00
|
|
|
const errSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
2022-12-05 14:15:26 +08:00
|
|
|
const { container } = render(<QRCode value={undefined as unknown as string} />);
|
|
|
|
expect(container.firstChild).toBe(null);
|
|
|
|
expect(container.firstChild).toMatchSnapshot();
|
|
|
|
expect(errSpy).toHaveBeenCalledWith('Warning: [antd: QRCode] need to receive `value` props');
|
|
|
|
errSpy.mockRestore();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('support custom icon', () => {
|
|
|
|
const { container } = render(<QRCode value="test" icon="test" />);
|
|
|
|
expect(
|
|
|
|
container
|
|
|
|
?.querySelector<HTMLDivElement>('.ant-qrcode')
|
|
|
|
?.querySelector<HTMLImageElement>('img'),
|
|
|
|
).toBeTruthy();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('support custom size', () => {
|
|
|
|
const { container } = render(<QRCode value="test" size={100} />);
|
2024-04-30 17:03:00 +08:00
|
|
|
const canvas = container.querySelector<HTMLCanvasElement>('.ant-qrcode > canvas')!;
|
|
|
|
expect(canvas.width).toBe(100);
|
|
|
|
expect(canvas.height).toBe(100);
|
2022-12-05 14:15:26 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
it('support refresh', () => {
|
2023-06-07 21:59:21 +08:00
|
|
|
const refresh = jest.fn();
|
2022-12-05 14:15:26 +08:00
|
|
|
const { container } = render(<QRCode value="test" status="expired" onRefresh={refresh} />);
|
|
|
|
fireEvent.click(
|
|
|
|
container
|
|
|
|
?.querySelector<HTMLDivElement>('.ant-qrcode')
|
|
|
|
?.querySelector<HTMLButtonElement>('button.ant-btn-link')!,
|
|
|
|
);
|
|
|
|
expect(refresh).toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('support loading', () => {
|
|
|
|
const Demo: React.FC = () => {
|
|
|
|
const [status, setStatus] = useState<QRCodeProps['status']>('active');
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<QRCode value="test" status={status} />
|
|
|
|
<button type="button" onClick={() => setStatus('loading')}>
|
|
|
|
set loading
|
|
|
|
</button>
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
const { container } = render(<Demo />);
|
|
|
|
expect(container.querySelector<HTMLDivElement>('.ant-spin-spinning')).toBeFalsy();
|
|
|
|
fireEvent.click(container?.querySelector<HTMLButtonElement>('button')!);
|
|
|
|
expect(container.querySelector<HTMLDivElement>('.ant-spin-spinning')).toBeTruthy();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('support bordered', () => {
|
|
|
|
const { container } = render(<QRCode value="test" bordered={false} />);
|
|
|
|
expect(container?.querySelector<HTMLDivElement>('.ant-qrcode')).toHaveClass(
|
|
|
|
'ant-qrcode-borderless',
|
|
|
|
);
|
|
|
|
});
|
2022-12-07 23:32:04 +08:00
|
|
|
|
|
|
|
it('should console Error when icon exist && errorLevel is `L`', () => {
|
2023-06-07 21:59:21 +08:00
|
|
|
const errSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
2022-12-07 23:32:04 +08:00
|
|
|
render(<QRCode value="test" icon="test" errorLevel="L" />);
|
|
|
|
expect(errSpy).toHaveBeenCalledWith(
|
|
|
|
'Warning: [antd: QRCode] ErrorLevel `L` is not recommended to be used with `icon`, for scanning result would be affected by low level.',
|
|
|
|
);
|
|
|
|
errSpy.mockRestore();
|
|
|
|
});
|
2024-03-25 10:59:44 +08:00
|
|
|
|
2024-04-30 17:03:00 +08:00
|
|
|
it('correct style order for canvas', () => {
|
|
|
|
const { container } = render(<QRCode value="test" size={80} style={{ width: '100%' }} />);
|
|
|
|
expect(container.querySelector<HTMLCanvasElement>('.ant-qrcode > canvas')).toHaveStyle(
|
|
|
|
'width: 100%',
|
2024-03-25 10:59:44 +08:00
|
|
|
);
|
|
|
|
});
|
2022-12-05 14:15:26 +08:00
|
|
|
});
|