Skip to content

Commit 2b7cee6

Browse files
committed
[test]: Update unit tests
1 parent 161f470 commit 2b7cee6

File tree

10 files changed

+472
-56
lines changed

10 files changed

+472
-56
lines changed

packages/shared/lib/features/usePermission/__tests__/__snapshots__/index.test.ts.snap

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ exports[`usePermission should match snapshot 1`] = `
218218
"DELETE": "action:delete_sql_management_exception",
219219
"EDIT": "action:edit_sql_management_exception",
220220
},
221+
"SQL_OPTIMIZATION": {
222+
"CREATE": "action:create_sql_optimization",
223+
},
221224
"VERSION_MANAGEMENT": {
222225
"ADD": "action:version_management_add_operator",
223226
"DELETE": "action:version_management_delete_operator",
@@ -631,6 +634,19 @@ exports[`usePermission should match snapshot 2`] = `
631634
],
632635
"type": "action",
633636
},
637+
"action:create_sql_optimization": {
638+
"dbServicePermission": {
639+
"opType": "create_optimization",
640+
},
641+
"id": "action:create_sql_optimization",
642+
"projectArchived": false,
643+
"projectManager": true,
644+
"role": [
645+
"admin",
646+
"systemAdministrator",
647+
],
648+
"type": "action",
649+
},
634650
"action:create_workflow": {
635651
"dbServicePermission": {
636652
"opType": "create_workflow",

packages/sqle/src/page/SqlAnalyze/Drawer/__tests__/SqlOptimizationResultDrawer.test.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,36 @@ describe('SqlOptimizationResultDrawer', () => {
144144

145145
expect(getOptimizationResultSpy).not.toHaveBeenCalled();
146146
});
147+
148+
it('should not call getOptimizationResult when optimization is failed', () => {
149+
const getOptimizationResultSpy = jest.fn();
150+
mockUseOptimizationResult.mockReturnValue({
151+
...defaultOptimizationResult,
152+
getOptimizationResult: getOptimizationResultSpy,
153+
optimizationResult: {
154+
status: OptimizationSQLDetailStatusEnum.failed
155+
}
156+
});
157+
158+
superRender(<SqlOptimizationResultDrawer />);
159+
160+
expect(getOptimizationResultSpy).not.toHaveBeenCalled();
161+
});
162+
163+
it('should call getOptimizationResult when optimization is optimizing', () => {
164+
const getOptimizationResultSpy = jest.fn();
165+
mockUseOptimizationResult.mockReturnValue({
166+
...defaultOptimizationResult,
167+
getOptimizationResult: getOptimizationResultSpy,
168+
optimizationResult: {
169+
status: OptimizationSQLDetailStatusEnum.optimizing
170+
}
171+
});
172+
173+
superRender(<SqlOptimizationResultDrawer />);
174+
175+
expect(getOptimizationResultSpy).toHaveBeenCalledWith(
176+
'test-optimization-id'
177+
);
178+
});
147179
});

packages/sqle/src/page/SqlAnalyze/SqlAnalyze/test/__snapshots__/useSQLExecPlan.test.tsx.snap

Lines changed: 144 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -468,11 +468,31 @@ exports[`SqlAnalyze/useSQLExecPlan render generateSQLExecPlanContent when have d
468468
<EmptyBox
469469
if={false}
470470
>
471-
<BasicButton
472-
type="primary"
471+
<EmptyBox
472+
defaultNode={
473+
<BasicButton
474+
type="primary"
475+
>
476+
SQL优化
477+
</BasicButton>
478+
}
479+
if={true}
473480
>
474-
SQL优化
475-
</BasicButton>
481+
<Popconfirm
482+
cancelText="否,使用常规推荐"
483+
description="高精度索引推荐将统计SQL中列的区分度,提供更准确的索引优化建议,但可能会产生较大的数据库性能开销。"
484+
okText="是,启用高精度推荐"
485+
onCancel={[Function]}
486+
onConfirm={[Function]}
487+
title="是否启用高精度索引推荐?"
488+
>
489+
<BasicButton
490+
type="primary"
491+
>
492+
SQL优化
493+
</BasicButton>
494+
</Popconfirm>
495+
</EmptyBox>
476496
</EmptyBox>
477497
</div>
478498
<section
@@ -601,11 +621,31 @@ exports[`SqlAnalyze/useSQLExecPlan render generateSQLExecPlanContent when have d
601621
SQL语句
602622
</h3>
603623
<EmptyBox>
604-
<BasicButton
605-
type="primary"
624+
<EmptyBox
625+
defaultNode={
626+
<BasicButton
627+
type="primary"
628+
>
629+
SQL优化
630+
</BasicButton>
631+
}
632+
if={true}
606633
>
607-
SQL优化
608-
</BasicButton>
634+
<Popconfirm
635+
cancelText="否,使用常规推荐"
636+
description="高精度索引推荐将统计SQL中列的区分度,提供更准确的索引优化建议,但可能会产生较大的数据库性能开销。"
637+
okText="是,启用高精度推荐"
638+
onCancel={[Function]}
639+
onConfirm={[Function]}
640+
title="是否启用高精度索引推荐?"
641+
>
642+
<BasicButton
643+
type="primary"
644+
>
645+
SQL优化
646+
</BasicButton>
647+
</Popconfirm>
648+
</EmptyBox>
609649
</EmptyBox>
610650
</div>
611651
<section
@@ -816,11 +856,31 @@ exports[`SqlAnalyze/useSQLExecPlan render generateSQLExecPlanContent when have d
816856
<EmptyBox
817857
if={false}
818858
>
819-
<BasicButton
820-
type="primary"
859+
<EmptyBox
860+
defaultNode={
861+
<BasicButton
862+
type="primary"
863+
>
864+
SQL优化
865+
</BasicButton>
866+
}
867+
if={true}
821868
>
822-
SQL优化
823-
</BasicButton>
869+
<Popconfirm
870+
cancelText="否,使用常规推荐"
871+
description="高精度索引推荐将统计SQL中列的区分度,提供更准确的索引优化建议,但可能会产生较大的数据库性能开销。"
872+
okText="是,启用高精度推荐"
873+
onCancel={[Function]}
874+
onConfirm={[Function]}
875+
title="是否启用高精度索引推荐?"
876+
>
877+
<BasicButton
878+
type="primary"
879+
>
880+
SQL优化
881+
</BasicButton>
882+
</Popconfirm>
883+
</EmptyBox>
824884
</EmptyBox>
825885
</div>
826886
<section
@@ -951,11 +1011,31 @@ exports[`SqlAnalyze/useSQLExecPlan render generateSQLExecPlanContent when have d
9511011
<EmptyBox
9521012
if={false}
9531013
>
954-
<BasicButton
955-
type="primary"
1014+
<EmptyBox
1015+
defaultNode={
1016+
<BasicButton
1017+
type="primary"
1018+
>
1019+
SQL优化
1020+
</BasicButton>
1021+
}
1022+
if={true}
9561023
>
957-
SQL优化
958-
</BasicButton>
1024+
<Popconfirm
1025+
cancelText="否,使用常规推荐"
1026+
description="高精度索引推荐将统计SQL中列的区分度,提供更准确的索引优化建议,但可能会产生较大的数据库性能开销。"
1027+
okText="是,启用高精度推荐"
1028+
onCancel={[Function]}
1029+
onConfirm={[Function]}
1030+
title="是否启用高精度索引推荐?"
1031+
>
1032+
<BasicButton
1033+
type="primary"
1034+
>
1035+
SQL优化
1036+
</BasicButton>
1037+
</Popconfirm>
1038+
</EmptyBox>
9591039
</EmptyBox>
9601040
</div>
9611041
<section
@@ -1086,11 +1166,31 @@ exports[`SqlAnalyze/useSQLExecPlan render generateSQLExecPlanContent when have e
10861166
<EmptyBox
10871167
if={false}
10881168
>
1089-
<BasicButton
1090-
type="primary"
1169+
<EmptyBox
1170+
defaultNode={
1171+
<BasicButton
1172+
type="primary"
1173+
>
1174+
SQL优化
1175+
</BasicButton>
1176+
}
1177+
if={true}
10911178
>
1092-
SQL优化
1093-
</BasicButton>
1179+
<Popconfirm
1180+
cancelText="否,使用常规推荐"
1181+
description="高精度索引推荐将统计SQL中列的区分度,提供更准确的索引优化建议,但可能会产生较大的数据库性能开销。"
1182+
okText="是,启用高精度推荐"
1183+
onCancel={[Function]}
1184+
onConfirm={[Function]}
1185+
title="是否启用高精度索引推荐?"
1186+
>
1187+
<BasicButton
1188+
type="primary"
1189+
>
1190+
SQL优化
1191+
</BasicButton>
1192+
</Popconfirm>
1193+
</EmptyBox>
10941194
</EmptyBox>
10951195
</div>
10961196
<section
@@ -1221,11 +1321,31 @@ exports[`SqlAnalyze/useSQLExecPlan render generateSQLExecPlanContent when have e
12211321
<EmptyBox
12221322
if={false}
12231323
>
1224-
<BasicButton
1225-
type="primary"
1324+
<EmptyBox
1325+
defaultNode={
1326+
<BasicButton
1327+
type="primary"
1328+
>
1329+
SQL优化
1330+
</BasicButton>
1331+
}
1332+
if={true}
12261333
>
1227-
SQL优化
1228-
</BasicButton>
1334+
<Popconfirm
1335+
cancelText="否,使用常规推荐"
1336+
description="高精度索引推荐将统计SQL中列的区分度,提供更准确的索引优化建议,但可能会产生较大的数据库性能开销。"
1337+
okText="是,启用高精度推荐"
1338+
onCancel={[Function]}
1339+
onConfirm={[Function]}
1340+
title="是否启用高精度索引推荐?"
1341+
>
1342+
<BasicButton
1343+
type="primary"
1344+
>
1345+
SQL优化
1346+
</BasicButton>
1347+
</Popconfirm>
1348+
</EmptyBox>
12291349
</EmptyBox>
12301350
</div>
12311351
<section

packages/sqle/src/page/SqlAnalyze/SqlAnalyze/test/useSQLExecPlan.test.tsx

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,12 @@ describe('SqlAnalyze/useSQLExecPlan', () => {
220220
expect(getPerformanceStatisticsSpy).toHaveBeenCalledTimes(1);
221221
});
222222

223-
it('should render sql optimization button', async () => {
223+
it('should render sql optimization button with popconfirm when optimizationRecordId is not exist', async () => {
224+
const onCreateSqlOptimizationSpy = jest.fn();
224225
const { result } = sqleSuperRenderHook(() =>
225226
useSQLExecPlan({
226227
allowSqlOptimization: true,
227-
onCreateSqlOptimizationOrview: jest.fn(),
228+
onCreateSqlOptimization: onCreateSqlOptimizationSpy,
228229
createSqlOptimizationLoading: false
229230
})
230231
);
@@ -243,13 +244,22 @@ describe('SqlAnalyze/useSQLExecPlan', () => {
243244
);
244245

245246
expect(screen.getByText('SQL优化')).toBeInTheDocument();
247+
248+
fireEvent.click(screen.getByText('SQL优化'));
249+
await act(async () => jest.advanceTimersByTime(0));
250+
251+
expect(screen.getByText('是,启用高精度推荐')).toBeInTheDocument();
252+
expect(screen.getByText('否,使用常规推荐')).toBeInTheDocument();
253+
254+
fireEvent.click(screen.getByText('是,启用高精度推荐'));
255+
expect(onCreateSqlOptimizationSpy).toHaveBeenCalledWith(true);
246256
});
247257

248258
it('should hide sql optimization button when execution plan is not exist', async () => {
249259
const { result } = sqleSuperRenderHook(() =>
250260
useSQLExecPlan({
251261
allowSqlOptimization: true,
252-
onCreateSqlOptimizationOrview: jest.fn(),
262+
onCreateSqlOptimization: jest.fn(),
253263
createSqlOptimizationLoading: false
254264
})
255265
);
@@ -269,4 +279,64 @@ describe('SqlAnalyze/useSQLExecPlan', () => {
269279

270280
expect(screen.queryByText('SQL优化')).not.toBeInTheDocument();
271281
});
282+
283+
it('should render view optimization result button when optimizationRecordId exists', async () => {
284+
const onViewOptimizationResultSpy = jest.fn();
285+
const { result } = sqleSuperRenderHook(() =>
286+
useSQLExecPlan({
287+
allowSqlOptimization: true,
288+
onViewOptimizationResult: onViewOptimizationResultSpy,
289+
optimizationRecordId: 'test-record-id',
290+
createSqlOptimizationLoading: false
291+
})
292+
);
293+
294+
superRender(
295+
<>
296+
{result.current.generateSQLExecPlanContent({
297+
sql: 'SELECT * FROM users;',
298+
classic_result: sqlExecPlans[1].classic_result,
299+
affect_rows: {
300+
count: 0,
301+
err_message: ''
302+
}
303+
})}
304+
</>
305+
);
306+
307+
expect(screen.getByText('SQL优化')).toBeInTheDocument();
308+
309+
fireEvent.click(screen.getByText('SQL优化'));
310+
expect(onViewOptimizationResultSpy).toHaveBeenCalledTimes(1);
311+
});
312+
313+
it('should call onCreateSqlOptimization with false', async () => {
314+
const onCreateSqlOptimizationOrViewSpy = jest.fn();
315+
const { result } = sqleSuperRenderHook(() =>
316+
useSQLExecPlan({
317+
allowSqlOptimization: true,
318+
onCreateSqlOptimization: onCreateSqlOptimizationOrViewSpy,
319+
createSqlOptimizationLoading: false
320+
})
321+
);
322+
323+
superRender(
324+
<>
325+
{result.current.generateSQLExecPlanContent({
326+
sql: 'SELECT * FROM users;',
327+
classic_result: sqlExecPlans[1].classic_result,
328+
affect_rows: {
329+
count: 0,
330+
err_message: ''
331+
}
332+
})}
333+
</>
334+
);
335+
336+
fireEvent.click(screen.getByText('SQL优化'));
337+
await act(async () => jest.advanceTimersByTime(0));
338+
339+
fireEvent.click(screen.getByText('否,使用常规推荐'));
340+
expect(onCreateSqlOptimizationOrViewSpy).toHaveBeenCalledWith(false);
341+
});
272342
});

0 commit comments

Comments
 (0)