初始化提交:go比特版本精简

This commit is contained in:
2026-09-20 17:02:11 +08:00
commit f41a979462
213 changed files with 58288 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
const assert = require('assert');
const fs = require('fs');
const os = require('os');
const path = require('path');
const express = require('express');
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'batch-account-delete-'));
const Config = require('../src/core/config');
Config.DATA_DIR = tempDir;
Config.DB_PATH = path.join(tempDir, 'accounts.db');
const database = require('../src/core/database');
const bitApi = require('../src/core/bit_api');
const originalGetApi = bitApi.getApi;
const originalDeleteBrowsersBatch = bitApi.deleteBrowsersBatch;
(async () => {
let server = null;
try {
database.initDB();
database.upsertAccount({ email: 'first@example.com', browser_id: 'browser-1' });
database.upsertAccount({ email: 'second@example.com', browser_id: 'browser-2' });
database.upsertAccount({ email: 'without-browser@example.com' });
let deletedBrowserIds = [];
bitApi.getApi = () => ({
request: async () => ({ success: true, data: { remark: '' } }),
});
bitApi.deleteBrowsersBatch = async browserIds => {
deletedBrowserIds = [...browserIds];
return { successCount: browserIds.length, failCount: 0, results: [] };
};
delete require.cache[require.resolve('../src/routes/accounts')];
const accountsRouter = require('../src/routes/accounts');
const app = express();
app.use(express.json());
app.use('/api/accounts', accountsRouter);
await new Promise(resolve => {
server = app.listen(0, '127.0.0.1', resolve);
});
const address = server.address();
const response = await fetch(`http://127.0.0.1:${address.port}/api/accounts`, {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
emails: ['first@example.com', 'second@example.com', 'without-browser@example.com'],
}),
});
const result = await response.json();
assert.strictEqual(response.ok, true);
assert.strictEqual(result.count, 3, '应批量删除所选账号及其浏览器编号');
assert.strictEqual(result.browsersFound, 2);
assert.strictEqual(result.browsersDeleted, 2, '应返回实际删除的比特浏览器窗口数');
assert.strictEqual(result.browserDeleteFailed, 0);
assert.deepStrictEqual(deletedBrowserIds.sort(), ['browser-1', 'browser-2']);
assert.strictEqual(database.getAccount('first@example.com'), null);
assert.strictEqual(database.getAccount('second@example.com'), null);
assert.strictEqual(database.getAccount('without-browser@example.com'), null);
console.log('batch_account_delete.test.js: PASS');
} finally {
if (server) await new Promise(resolve => server.close(resolve));
bitApi.getApi = originalGetApi;
bitApi.deleteBrowsersBatch = originalDeleteBrowsersBatch;
try { database.getDb().close(); } catch (_) {}
fs.rmSync(tempDir, { recursive: true, force: true });
}
})().catch(error => {
console.error(error);
process.exitCode = 1;
});