74 lines
2.9 KiB
JavaScript
74 lines
2.9 KiB
JavaScript
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;
|
|
});
|