mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-23 09:20:20 +08:00
- 新增 JVM 持续监控仪表盘、图表、状态卡和详情面板 - 统一概览、资源浏览、审计页面的 JVM 工作台布局 - Sidebar 和 TabManager 支持监控入口、诊断入口兜底和上下文切换 - 补充前端状态模型、展示文案和组件回归测试
119 lines
3.4 KiB
TypeScript
119 lines
3.4 KiB
TypeScript
import React from 'react';
|
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
import JVMResourceBrowser from './JVMResourceBrowser';
|
|
|
|
vi.mock('@monaco-editor/react', () => ({
|
|
default: ({ language, value }: { language?: string; value?: string }) => (
|
|
<div data-monaco-editor-mock="true" data-language={language}>
|
|
{value}
|
|
</div>
|
|
),
|
|
}));
|
|
|
|
vi.mock('../store', () => ({
|
|
useStore: (selector: (state: any) => any) => selector({
|
|
connections: [
|
|
{
|
|
id: 'conn-jvm-1',
|
|
name: 'localhost',
|
|
config: {
|
|
host: 'localhost',
|
|
jvm: {
|
|
preferredMode: 'jmx',
|
|
readOnly: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
id: 'conn-jvm-2',
|
|
name: 'writable-jvm',
|
|
config: {
|
|
host: 'localhost',
|
|
jvm: {
|
|
preferredMode: 'jmx',
|
|
readOnly: false,
|
|
},
|
|
},
|
|
},
|
|
],
|
|
addTab: vi.fn(),
|
|
aiPanelVisible: false,
|
|
setAIPanelVisible: vi.fn(),
|
|
}),
|
|
}));
|
|
|
|
vi.mock('./jvm/JVMModeBadge', () => ({
|
|
default: ({ mode }: { mode: string }) => <span>{mode}</span>,
|
|
}));
|
|
|
|
vi.mock('./jvm/JVMChangePreviewModal', () => ({
|
|
default: () => null,
|
|
}));
|
|
|
|
describe('JVMResourceBrowser layout', () => {
|
|
it('renders a dedicated vertical scroll shell for tall snapshot content', () => {
|
|
const markup = renderToStaticMarkup(
|
|
<JVMResourceBrowser
|
|
tab={{
|
|
id: 'tab-jvm-resource-1',
|
|
type: 'jvm-resource',
|
|
title: '[localhost] JVM 资源',
|
|
connectionId: 'conn-jvm-1',
|
|
providerMode: 'jmx',
|
|
resourcePath: 'jmx:/mbean/com.alibaba.druid:type=DruidDriver',
|
|
resourceKind: 'mbean',
|
|
} as any}
|
|
/>,
|
|
);
|
|
|
|
expect(markup).toContain('data-jvm-resource-browser-scroll-shell="true"');
|
|
expect(markup).toContain('data-jvm-workspace-shell="true"');
|
|
expect(markup).toContain('data-jvm-workspace-hero="true"');
|
|
expect(markup).toContain('data-jvm-resource-workbench="true"');
|
|
expect(markup).toContain('height:100%');
|
|
expect(markup).toContain('overflow-y:auto');
|
|
expect(markup).toContain('grid-template-columns:minmax(0, 1fr) minmax(360px, 440px)');
|
|
});
|
|
|
|
it('shows the draft action field with a Chinese label', () => {
|
|
const markup = renderToStaticMarkup(
|
|
<JVMResourceBrowser
|
|
tab={{
|
|
id: 'tab-jvm-resource-2',
|
|
type: 'jvm-resource',
|
|
title: '[localhost] JVM 资源',
|
|
connectionId: 'conn-jvm-2',
|
|
providerMode: 'jmx',
|
|
resourcePath: 'jmx:/mbean/com.alibaba.druid:type=DruidDriver',
|
|
resourceKind: 'mbean',
|
|
} as any}
|
|
/>,
|
|
);
|
|
|
|
expect(markup).toContain('动作');
|
|
expect(markup).not.toContain('>Action<');
|
|
});
|
|
|
|
it('hides the change draft form entirely for read-only JVM connections', () => {
|
|
const markup = renderToStaticMarkup(
|
|
<JVMResourceBrowser
|
|
tab={{
|
|
id: 'tab-jvm-resource-3',
|
|
type: 'jvm-resource',
|
|
title: '[localhost] JVM 资源',
|
|
connectionId: 'conn-jvm-1',
|
|
providerMode: 'jmx',
|
|
resourcePath: 'jmx:/mbean/com.alibaba.druid:type=DruidDriver',
|
|
resourceKind: 'mbean',
|
|
} as any}
|
|
/>,
|
|
);
|
|
|
|
expect(markup).not.toContain('变更草稿');
|
|
expect(markup).not.toContain('预览变更');
|
|
expect(markup).not.toContain('Payload(JSON)');
|
|
});
|
|
});
|