mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
118 lines
3 KiB
TypeScript
118 lines
3 KiB
TypeScript
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
import { useDebugInfo } from './useDebugInfo';
|
|
import type { RootState } from '@/Interface';
|
|
import type { useSettingsStore as useSettingsStoreType } from '@/stores/settings.store';
|
|
import type { RecursivePartial } from '@/type-utils';
|
|
|
|
vi.mock('@/stores/root.store', () => ({
|
|
useRootStore: (): Partial<RootState> => ({
|
|
versionCli: '0.123.0',
|
|
}),
|
|
}));
|
|
|
|
const MOCK_BASE_SETTINGS: RecursivePartial<ReturnType<typeof useSettingsStoreType>> = {
|
|
isDocker: true,
|
|
deploymentType: 'cloud',
|
|
nodeJsVersion: '14.17.0',
|
|
databaseType: 'postgresdb',
|
|
isQueueModeEnabled: false,
|
|
settings: {
|
|
concurrency: 10,
|
|
license: {
|
|
consumerId: 'consumer-id',
|
|
environment: 'production',
|
|
},
|
|
},
|
|
isCommunityPlan: true,
|
|
consumerId: 'consumer-123',
|
|
saveDataSuccessExecution: 'all',
|
|
saveDataErrorExecution: 'none',
|
|
saveDataProgressExecution: true,
|
|
saveManualExecutions: true,
|
|
binaryDataMode: 'default',
|
|
pruning: {
|
|
isEnabled: true,
|
|
maxAge: 24,
|
|
maxCount: 100,
|
|
},
|
|
security: {
|
|
blockFileAccessToN8nFiles: false,
|
|
secureCookie: false,
|
|
},
|
|
};
|
|
|
|
const { useSettingsStore } = vi.hoisted(() => ({
|
|
useSettingsStore: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('@/stores/settings.store', () => ({
|
|
useSettingsStore,
|
|
}));
|
|
|
|
vi.mock('n8n-design-system', () => ({
|
|
useDeviceSupport: () => ({
|
|
isTouchDevice: false,
|
|
userAgent: 'Mozilla/5.0',
|
|
}),
|
|
}));
|
|
|
|
const NOW = 1717602004819;
|
|
|
|
vi.useFakeTimers({
|
|
now: NOW,
|
|
});
|
|
|
|
describe('useDebugInfo', () => {
|
|
beforeEach(() => {
|
|
useSettingsStore.mockReturnValue(MOCK_BASE_SETTINGS);
|
|
});
|
|
|
|
it('should generate debug info', () => {
|
|
const { generateDebugInfo } = useDebugInfo();
|
|
const debugInfo = generateDebugInfo();
|
|
|
|
expect(debugInfo).toMatchSnapshot();
|
|
});
|
|
|
|
it('should generate debug info without sensitive data', () => {
|
|
const { generateDebugInfo } = useDebugInfo();
|
|
const debugInfo = generateDebugInfo({ skipSensitive: true });
|
|
|
|
expect(debugInfo).not.toContain('consumerId');
|
|
expect(debugInfo).toContain('Generated at:');
|
|
});
|
|
|
|
it('should include security info if insecure settings are found', () => {
|
|
const { generateDebugInfo } = useDebugInfo();
|
|
const debugInfo = generateDebugInfo();
|
|
|
|
expect(debugInfo).toContain('blockFileAccessToN8nFiles: false');
|
|
expect(debugInfo).toContain('secureCookie: false');
|
|
});
|
|
|
|
it('should not include security info if all settings are secure', () => {
|
|
useSettingsStore.mockReturnValue({
|
|
...MOCK_BASE_SETTINGS,
|
|
security: {
|
|
...MOCK_BASE_SETTINGS.security,
|
|
blockFileAccessToN8nFiles: true,
|
|
secureCookie: true,
|
|
},
|
|
});
|
|
|
|
const { generateDebugInfo } = useDebugInfo();
|
|
const debugInfo = generateDebugInfo();
|
|
|
|
expect(debugInfo).not.toContain('blockFileAccessToN8nFiles');
|
|
expect(debugInfo).not.toContain('secureCookie');
|
|
});
|
|
|
|
it('should generate markdown with secondary headers', () => {
|
|
const { generateDebugInfo } = useDebugInfo();
|
|
const debugInfo = generateDebugInfo({ secondaryHeader: true });
|
|
|
|
expect(debugInfo).toContain('### core');
|
|
expect(debugInfo).toContain('## Debug info');
|
|
});
|
|
});
|