| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 'use strict';
- const assert = require('node:assert/strict');
- const fs = require('node:fs');
- const os = require('node:os');
- const path = require('node:path');
- const ROOT = path.resolve(__dirname, '..');
- function envValue(filePath, key) {
- const match = fs.readFileSync(filePath, 'utf8').match(new RegExp(`^${key}=(.*)$`, 'm'));
- return match ? match[1].trim() : undefined;
- }
- async function main() {
- const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-account-remove-'));
- const previous = { cwd: process.cwd(), env: { ...process.env }, fetch: global.fetch };
- try {
- process.env.QIWEI_PACKAGE_ROOT = tempRoot;
- process.env.QIWEI_WORKSPACE_ROOT = tempRoot;
- process.env.QIWEI_OUTPUTS_DIR = path.join(tempRoot, 'outputs');
- delete process.env.QIWEI_AUTH_TOKEN;
- process.chdir(tempRoot);
- fs.writeFileSync(path.join(tempRoot, '.env.local'), [
- 'QIWEI_AUTH_TOKEN=test-remove-token',
- 'QIWEI_API_BASE=http://gateway.test/api/qiwei',
- 'QIWEI_UID=uid-remove-a',
- 'QIWEI_GUID=guid-remove-a',
- 'OTHER_SETTING=keep-me',
- '',
- ].join('\n'), 'utf8');
- const requests = [];
- global.fetch = async (url, options = {}) => {
- const body = options.body ? JSON.parse(options.body) : {};
- requests.push({ path: new URL(String(url)).pathname, body });
- return new Response(JSON.stringify({ code: 0, data: { released: true } }), {
- status: 200,
- headers: { 'Content-Type': 'application/json' },
- });
- };
- const login = require(path.join(ROOT, 'mcp/src/tools/qiwei-login-run.js'));
- const first = await login.qiweiUserLogout({ uid: 'uid-remove-a', guid: 'guid-remove-a', apiBase: 'http://gateway.test/api/qiwei' });
- assert.equal(first.status, 'ok');
- assert.deepEqual(requests.map(item => item.body.method), ['/user/logout', '/client/stopClient']);
- assert.deepEqual(requests.map(item => item.body.uid), ['uid-remove-a', 'uid-remove-a']);
- assert.deepEqual(requests.map(item => item.body.params.guid), ['guid-remove-a', 'guid-remove-a']);
- assert.equal(envValue(path.join(tempRoot, '.env.local'), 'QIWEI_UID'), '');
- assert.equal(envValue(path.join(tempRoot, '.env.local'), 'QIWEI_GUID'), '');
- assert.equal(envValue(path.join(tempRoot, '.env.local'), 'QIWEI_AUTH_TOKEN'), 'test-remove-token');
- assert.equal(envValue(path.join(tempRoot, '.env.local'), 'OTHER_SETTING'), 'keep-me');
- const second = await login.qiweiUserLogout({ uid: 'uid-remove-a', guid: 'guid-remove-a', apiBase: 'http://gateway.test/api/qiwei' });
- assert.equal(second.status, 'ok');
- assert.equal(second.summary.credentialsCleared, true);
- process.stdout.write(`${JSON.stringify({
- status: 'ok',
- checks: 9,
- coverage: [
- 'logout_then_stop_client_order',
- 'guid_forwarded_to_both_upstream_calls',
- 'local_uid_guid_cleared',
- 'auth_token_preserved',
- 'unrelated_env_preserved',
- 'repeat_remove_is_idempotent',
- ],
- }, null, 2)}\n`);
- } finally {
- global.fetch = previous.fetch;
- process.chdir(previous.cwd);
- for (const key of Object.keys(process.env)) {
- if (!(key in previous.env)) delete process.env[key];
- }
- for (const [key, value] of Object.entries(previous.env)) process.env[key] = value;
- fs.rmSync(tempRoot, { recursive: true, force: true });
- }
- }
- main().catch(error => {
- process.stderr.write(`${error.stack || error.message}\n`);
- process.exitCode = 1;
- });
|