103 lines
3.9 KiB
TypeScript
103 lines
3.9 KiB
TypeScript
import { existsSync, readFileSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
import { cwd } from 'node:process';
|
|
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
const accountRoot = resolve(
|
|
cwd(),
|
|
'apps/web-antdv-next/src/views/qqbot/account',
|
|
);
|
|
|
|
const readAccountSource = (relativePath: string) =>
|
|
readFileSync(resolve(accountRoot, relativePath), 'utf8');
|
|
|
|
const readRepoSource = (relativePath: string) =>
|
|
readFileSync(resolve(cwd(), relativePath), 'utf8');
|
|
|
|
const readRouteSource = (relativePath: string) =>
|
|
readFileSync(
|
|
resolve(
|
|
cwd(),
|
|
'apps/web-antdv-next/src/router/routes/modules',
|
|
relativePath,
|
|
),
|
|
'utf8',
|
|
);
|
|
|
|
describe('qqbot account NapCat login view boundary', () => {
|
|
it('keeps login session state out of account/list.tsx', () => {
|
|
const source = readAccountSource('list.tsx');
|
|
|
|
expect(source).toContain('NapcatLoginModal');
|
|
expect(source).not.toContain('EventSource');
|
|
expect(source).not.toContain('TencentCaptcha');
|
|
expect(source).not.toContain('useQRCode');
|
|
expect(source).not.toContain('/qqbot/account/scan');
|
|
expect(source).not.toContain('startQqbotAccountScan');
|
|
expect(source).not.toContain('submitQqbotAccountScanCaptcha');
|
|
});
|
|
|
|
it('keeps NapCat login modal and session helpers in the napcat package', () => {
|
|
expect(
|
|
existsSync(resolve(accountRoot, 'napcat/NapcatLoginModal.tsx')),
|
|
).toBe(true);
|
|
expect(
|
|
existsSync(resolve(accountRoot, 'napcat/useNapcatLoginSession.ts')),
|
|
).toBe(true);
|
|
expect(existsSync(resolve(accountRoot, 'napcat/tencentCaptcha.ts'))).toBe(
|
|
true,
|
|
);
|
|
expect(existsSync(resolve(accountRoot, 'napcat/qrcode.ts'))).toBe(true);
|
|
});
|
|
|
|
it('keeps WebUI gateway lifecycle logic out of account/list.tsx', () => {
|
|
const source = readAccountSource('list.tsx');
|
|
|
|
expect(source).toContain('QqBotAccountNapcatWebui');
|
|
expect(source).toContain('QqBot:Account:WebUI');
|
|
expect(source).not.toContain('createQqbotNapcatWebuiSession');
|
|
expect(source).not.toContain('heartbeatQqbotNapcatWebuiSession');
|
|
expect(source).not.toContain('revokeQqbotNapcatWebuiSession');
|
|
expect(source).not.toContain('<iframe');
|
|
expect(source).not.toContain('iframe');
|
|
});
|
|
|
|
it('registers the hidden NapCat WebUI page route under QQBot account', () => {
|
|
const source = readRouteSource('qqbot.ts');
|
|
|
|
expect(source).toContain('QqBotAccountNapcatWebui');
|
|
expect(source).toContain('/qqbot/account/:accountId/napcat-webui');
|
|
expect(source).toContain('hideInMenu: true');
|
|
expect(source).toContain("activePath: '/qqbot/account'");
|
|
});
|
|
|
|
it('exposes the NapCat WebUI gateway through the Admin same-origin dev and nginx routes', () => {
|
|
const viteSource = readRepoSource('apps/web-antdv-next/vite.config.mts');
|
|
const nginxSource = readRepoSource('deploy/nginx-admin.conf');
|
|
|
|
expect(viteSource).toContain("'/napcat-webui'");
|
|
expect(viteSource).toContain('http://localhost:48086');
|
|
expect(nginxSource).toContain('location ^~ /napcat-webui/');
|
|
expect(nginxSource).toContain('k3d-kt-nas-server-0:30086');
|
|
expect(nginxSource).toContain('proxy_http_version 1.1');
|
|
expect(nginxSource).toContain('location ^~ /kt-k8s-dashboard/');
|
|
});
|
|
|
|
it('publishes the Admin nginx route file during main-branch deployment', () => {
|
|
const jenkinsSource = readRepoSource('Jenkinsfile');
|
|
|
|
expect(jenkinsSource).toContain("booleanParam(name: 'DEPLOY_NGINX_CONFIG'");
|
|
expect(jenkinsSource).toContain("string(name: 'NGINX_CONFIG_VOLUME_DIR'");
|
|
expect(jenkinsSource).toContain(
|
|
"string(name: 'NGINX_UPSTREAM_DOCKER_NETWORK'",
|
|
);
|
|
expect(jenkinsSource).toContain("stage('Deploy Nginx Config')");
|
|
expect(jenkinsSource).toContain('docker network connect');
|
|
expect(jenkinsSource).toContain('docker run --rm -i');
|
|
expect(jenkinsSource).toContain('NGINX_CONFIG_SOURCE');
|
|
expect(jenkinsSource).toContain('nginx -t');
|
|
expect(jenkinsSource).toContain('nginx -s reload');
|
|
});
|
|
});
|