From e9715b47f09e643c11854442850a3101a65bf5d8 Mon Sep 17 00:00:00 2001
From: zzyangh <799463087@qq.com>
Date: Tue, 25 Feb 2025 15:31:13 +0800
Subject: [PATCH 1/2] [chore]: Optimization code
---
packages/base/src/page/Account/PersonalSMS/index.tsx | 5 +----
.../page/System/GlobalSetting/SMSSetting/index.tsx | 12 +++---------
2 files changed, 4 insertions(+), 13 deletions(-)
diff --git a/packages/base/src/page/Account/PersonalSMS/index.tsx b/packages/base/src/page/Account/PersonalSMS/index.tsx
index 3026e4698..06dc61503 100644
--- a/packages/base/src/page/Account/PersonalSMS/index.tsx
+++ b/packages/base/src/page/Account/PersonalSMS/index.tsx
@@ -2,7 +2,6 @@ import { useTranslation } from 'react-i18next';
import { useBoolean } from 'ahooks';
import { useMemo, useEffect } from 'react';
import { Spin, message } from 'antd';
-import { CustomLabelContent } from '@actiontech/shared/lib/components/CustomForm';
import ConfigField from './components/ConfigField';
import { ResponseCode } from '@actiontech/shared/lib/enum';
import { FormFields } from './index.type';
@@ -37,9 +36,7 @@ const PersonalSMS: React.FC = ({
enabled
} = useConfigRender({
switchFieldName,
- switchFieldLabel: (
-
- )
+ switchFieldLabel: t('dmsAccount.sms.title')
});
useEffect(() => {
diff --git a/packages/base/src/page/System/GlobalSetting/SMSSetting/index.tsx b/packages/base/src/page/System/GlobalSetting/SMSSetting/index.tsx
index 9d9fa0fe2..9d3204bbb 100644
--- a/packages/base/src/page/System/GlobalSetting/SMSSetting/index.tsx
+++ b/packages/base/src/page/System/GlobalSetting/SMSSetting/index.tsx
@@ -2,7 +2,6 @@ import { useTranslation } from 'react-i18next';
import { useBoolean, useRequest } from 'ahooks';
import { useCallback, useMemo } from 'react';
import { Spin, Typography } from 'antd';
-import { CustomLabelContent } from '@actiontech/shared/lib/components/CustomForm';
import ConfigExtraButtons from './components/ConfigExtraButtons';
import ConfigField from './components/ConfigField';
import { ConfigurationService } from '@actiontech/shared/lib/api';
@@ -22,7 +21,7 @@ import {
PermissionControl
} from '@actiontech/shared/lib/features';
-const CodingSetting: React.FC = () => {
+const SMSSetting: React.FC = () => {
const { t } = useTranslation();
const [submitLoading, { setTrue: startSubmit, setFalse: submitFinish }] =
@@ -38,12 +37,7 @@ const CodingSetting: React.FC = () => {
enabled
} = useConfigRender({
switchFieldName,
- switchFieldLabel: (
-
- )
+ switchFieldLabel: t('dmsSystem.global.smsSetting.title')
});
const {
@@ -208,4 +202,4 @@ const CodingSetting: React.FC = () => {
);
};
-export default CodingSetting;
+export default SMSSetting;
From 9d1e224e060f05e94e9dd0f9f91614b2894fa3d9 Mon Sep 17 00:00:00 2001
From: zzyangh <799463087@qq.com>
Date: Tue, 25 Feb 2025 15:31:52 +0800
Subject: [PATCH 2/2] [test]: Update unit testing
---
.../__snapshots__/index.test.tsx.snap | 264 ++++
.../PersonalSMS/__tests__/index.test.tsx | 165 ++
.../__snapshots__/index.ce.test.tsx.snap | 370 +++++
.../Account/__snapshots__/index.test.tsx.snap | 48 +-
.../base/src/page/Account/index.ce.test.tsx | 35 +
.../Login/__snapshots__/index.test.tsx.snap | 399 +++++
packages/base/src/page/Login/index.test.tsx | 91 +-
.../__snapshots__/index.test.tsx.snap | 1321 +++++++++++++++++
.../SMSSetting/__tests__/index.test.tsx | 241 +++
.../__snapshots__/index.ce.test.tsx.snap | 411 +++++
.../__snapshots__/index.test.tsx.snap | 48 +-
.../System/GlobalSetting/index.ce.test.tsx | 33 +
.../base/src/testUtils/mockApi/global/data.ts | 3 +-
.../base/src/testUtils/mockApi/sms/data.ts | 8 +
.../base/src/testUtils/mockApi/sms/index.ts | 35 +
.../__tests__/VerificationCodeInput.test.tsx | 81 +
.../VerificationCodeInput.test.tsx.snap | 35 +
.../shared/lib/utils/__tests__/Common.test.ts | 8 +-
18 files changed, 3511 insertions(+), 85 deletions(-)
create mode 100644 packages/base/src/page/Account/PersonalSMS/__tests__/__snapshots__/index.test.tsx.snap
create mode 100644 packages/base/src/page/Account/PersonalSMS/__tests__/index.test.tsx
create mode 100644 packages/base/src/page/Account/__snapshots__/index.ce.test.tsx.snap
create mode 100644 packages/base/src/page/Account/index.ce.test.tsx
create mode 100644 packages/base/src/page/System/GlobalSetting/SMSSetting/__tests__/__snapshots__/index.test.tsx.snap
create mode 100644 packages/base/src/page/System/GlobalSetting/SMSSetting/__tests__/index.test.tsx
create mode 100644 packages/base/src/page/System/GlobalSetting/__snapshots__/index.ce.test.tsx.snap
create mode 100644 packages/base/src/page/System/GlobalSetting/index.ce.test.tsx
create mode 100644 packages/base/src/testUtils/mockApi/sms/data.ts
create mode 100644 packages/base/src/testUtils/mockApi/sms/index.ts
create mode 100644 packages/shared/lib/components/VerificationCodeInput/__tests__/VerificationCodeInput.test.tsx
create mode 100644 packages/shared/lib/components/VerificationCodeInput/__tests__/__snapshots__/VerificationCodeInput.test.tsx.snap
diff --git a/packages/base/src/page/Account/PersonalSMS/__tests__/__snapshots__/index.test.tsx.snap b/packages/base/src/page/Account/PersonalSMS/__tests__/__snapshots__/index.test.tsx.snap
new file mode 100644
index 000000000..a726ec93a
--- /dev/null
+++ b/packages/base/src/page/Account/PersonalSMS/__tests__/__snapshots__/index.test.tsx.snap
@@ -0,0 +1,264 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`base/System/GlobalSetting/PersonalSMS render init snap 1`] = `
+
+
+
+`;
diff --git a/packages/base/src/page/Account/PersonalSMS/__tests__/index.test.tsx b/packages/base/src/page/Account/PersonalSMS/__tests__/index.test.tsx
new file mode 100644
index 000000000..39141118e
--- /dev/null
+++ b/packages/base/src/page/Account/PersonalSMS/__tests__/index.test.tsx
@@ -0,0 +1,165 @@
+import sms from '../../../../testUtils/mockApi/sms';
+import { cleanup, fireEvent, act, screen } from '@testing-library/react';
+import { superRender } from '@actiontech/shared/lib/testUtil/customRender';
+import { getBySelector } from '@actiontech/shared/lib/testUtil/customQuery';
+import PersonalSMS from '..';
+import { createSpySuccessResponse } from '@actiontech/shared/lib/testUtil/mockApi';
+import { mockUseCurrentUser } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentUser';
+import { mockUserInfo } from '@actiontech/shared/lib/testUtil/mockHook/data';
+import account from '../../../../testUtils/mockApi/account';
+
+describe('base/System/GlobalSetting/PersonalSMS', () => {
+ let updateCurrentUserSpy: jest.SpyInstance;
+ let sendSmsCodeSpy: jest.SpyInstance;
+ let verifySmsCodeSpy: jest.SpyInstance;
+ let getUserInfoSpy = jest.fn();
+ const customRender = ({
+ phone = mockUserInfo.userInfo.phone,
+ enabled = true
+ }) => {
+ return superRender(
+
+ );
+ };
+
+ beforeEach(() => {
+ mockUseCurrentUser();
+ jest.useFakeTimers();
+ updateCurrentUserSpy = account.updateCurrentUser();
+ sendSmsCodeSpy = sms.sendSmsCode();
+ verifySmsCodeSpy = sms.verifySmsCode();
+ });
+
+ afterEach(() => {
+ jest.useRealTimers();
+ jest.clearAllMocks();
+ cleanup();
+ });
+
+ it('render init snap', async () => {
+ const { baseElement } = customRender({});
+ await act(async () => jest.advanceTimersByTime(0));
+ expect(baseElement).toMatchSnapshot();
+ expect(getBySelector('#enabled')).toBeChecked();
+ });
+
+ it('render close personal sms', async () => {
+ customRender({});
+ await act(async () => jest.advanceTimersByTime(3300));
+ fireEvent.click(getBySelector('#enabled'));
+ await act(async () => jest.advanceTimersByTime(500));
+ expect(screen.getByText('是否确认关闭当前配置?')).toBeInTheDocument();
+
+ fireEvent.click(screen.getByText('确 认'));
+ await act(async () => jest.advanceTimersByTime(0));
+ expect(updateCurrentUserSpy).toHaveBeenCalledTimes(1);
+ expect(updateCurrentUserSpy).toHaveBeenCalledWith({
+ current_user: {
+ two_factor_enabled: false
+ }
+ });
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(getUserInfoSpy).toHaveBeenCalledTimes(1);
+ });
+
+ it('render open personal sms', async () => {
+ customRender({ enabled: false });
+ await act(async () => jest.advanceTimersByTime(3000));
+ const switchEle = getBySelector('#enabled');
+ expect(switchEle).not.toBeChecked();
+
+ fireEvent.click(switchEle);
+ await act(async () => jest.advanceTimersByTime(300));
+
+ fireEvent.click(screen.getByText('发送验证码'));
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(sendSmsCodeSpy).toHaveBeenCalledTimes(1);
+
+ fireEvent.change(getBySelector('#code'), {
+ target: {
+ value: '1234'
+ }
+ });
+ await act(async () => jest.advanceTimersByTime(0));
+
+ fireEvent.click(screen.getByText('提 交'));
+ await act(async () => jest.advanceTimersByTime(0));
+ expect(verifySmsCodeSpy).toHaveBeenCalledTimes(1);
+ expect(verifySmsCodeSpy).toHaveBeenNthCalledWith(1, {
+ code: '1234',
+ username: mockUserInfo.userInfo.name
+ });
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(updateCurrentUserSpy).toHaveBeenCalledTimes(1);
+ expect(updateCurrentUserSpy).toHaveBeenCalledWith({
+ current_user: {
+ two_factor_enabled: true
+ }
+ });
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(getUserInfoSpy).toHaveBeenCalledTimes(1);
+ });
+
+ it('render open personal sms when user phone is empty string', async () => {
+ customRender({ enabled: false, phone: '' });
+ await act(async () => jest.advanceTimersByTime(3000));
+ const switchEle = getBySelector('#enabled');
+ expect(switchEle).not.toBeChecked();
+
+ fireEvent.click(switchEle);
+ await act(async () => jest.advanceTimersByTime(0));
+
+ expect(
+ screen.getByText('请先完成手机号绑定后开启双因素认证')
+ ).toBeInTheDocument();
+ });
+
+ it('render open personal sms when verify sms code fail', async () => {
+ verifySmsCodeSpy.mockImplementation(() =>
+ createSpySuccessResponse({
+ data: {
+ is_verify_sent_normally: false,
+ verify_error_message: '验证码错误'
+ }
+ })
+ );
+ customRender({ enabled: false });
+ await act(async () => jest.advanceTimersByTime(3000));
+ const switchEle = getBySelector('#enabled');
+ expect(switchEle).not.toBeChecked();
+
+ fireEvent.click(switchEle);
+ await act(async () => jest.advanceTimersByTime(300));
+
+ fireEvent.click(screen.getByText('发送验证码'));
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(sendSmsCodeSpy).toHaveBeenCalledTimes(1);
+
+ fireEvent.change(getBySelector('#code'), {
+ target: {
+ value: '1234'
+ }
+ });
+ await act(async () => jest.advanceTimersByTime(0));
+
+ fireEvent.click(screen.getByText('提 交'));
+ await act(async () => jest.advanceTimersByTime(0));
+ expect(verifySmsCodeSpy).toHaveBeenCalledTimes(1);
+ expect(verifySmsCodeSpy).toHaveBeenNthCalledWith(1, {
+ code: '1234',
+ username: mockUserInfo.userInfo.name
+ });
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(screen.getByText('验证码错误')).toBeInTheDocument();
+ await act(async () => jest.advanceTimersByTime(3000));
+ expect(updateCurrentUserSpy).not.toHaveBeenCalled();
+ });
+});
diff --git a/packages/base/src/page/Account/__snapshots__/index.ce.test.tsx.snap b/packages/base/src/page/Account/__snapshots__/index.ce.test.tsx.snap
new file mode 100644
index 000000000..a023ae61f
--- /dev/null
+++ b/packages/base/src/page/Account/__snapshots__/index.ce.test.tsx.snap
@@ -0,0 +1,370 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`test base/page/Account ce should match snapshot 1`] = `
+
+
+
+
+
+
+ 账户基本信息
+
+
+
+
+
+
+
+
+
+ admin@gmail.com
+
+
+
+
+
+
+
+
+
+
+ 访问令牌
+
+
+ 您可以在IDE工具上使用访问令牌,进行用户认证
+
+
+
+
+
+
+
+ Token
+
+
+
+
+
+
+
+
+
+
+ 过期时间
+
+
+ 2024-03-31 10:25:10
+
+
+
+
+
+
+
+
+
+
+`;
diff --git a/packages/base/src/page/Account/__snapshots__/index.test.tsx.snap b/packages/base/src/page/Account/__snapshots__/index.test.tsx.snap
index 392f9743c..0013677c0 100644
--- a/packages/base/src/page/Account/__snapshots__/index.test.tsx.snap
+++ b/packages/base/src/page/Account/__snapshots__/index.test.tsx.snap
@@ -378,7 +378,7 @@ exports[`test base/page/Account should match snapshot 1`] = `
class="switch-field-wrapper"
>
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+