Files
FlowPilot/tests/mail2925-utils.test.js
2026-04-20 18:56:08 +08:00

63 lines
1.7 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const utils = require('../mail2925-utils.js');
test('normalizeMail2925Account normalizes key fields', () => {
const account = utils.normalizeMail2925Account({
id: 'a-1',
email: ' Demo@2925.com ',
password: 'secret',
enabled: 0,
lastUsedAt: '123',
disabledUntil: '456',
});
assert.deepStrictEqual(account, {
id: 'a-1',
email: 'demo@2925.com',
password: 'secret',
enabled: false,
lastUsedAt: 123,
lastLoginAt: 0,
lastLimitAt: 0,
disabledUntil: 456,
lastError: '',
});
});
test('pickMail2925AccountForRun skips cooldown and picks the least recently used account', () => {
const now = 1000;
const picked = utils.pickMail2925AccountForRun([
{ id: 'cooldown', email: 'cool@2925.com', password: 'x', disabledUntil: now + 10, lastUsedAt: 1 },
{ id: 'b', email: 'b@2925.com', password: 'x', lastUsedAt: 50 },
{ id: 'a', email: 'a@2925.com', password: 'x', lastUsedAt: 10 },
], { now });
assert.equal(picked.id, 'a');
});
test('getMail2925AccountStatus reports cooldown before error', () => {
const status = utils.getMail2925AccountStatus({
email: 'demo@2925.com',
password: 'secret',
enabled: true,
disabledUntil: Date.now() + 60_000,
lastError: '子邮箱已达上限邮箱',
});
assert.equal(status, 'cooldown');
});
test('parseMail2925ImportText parses 邮箱----密码 rows', () => {
const parsed = utils.parseMail2925ImportText(`
邮箱----密码
demo1@2925.com----pass1
demo2@2925.com----pass2
`);
assert.deepStrictEqual(parsed, [
{ email: 'demo1@2925.com', password: 'pass1' },
{ email: 'demo2@2925.com', password: 'pass2' },
]);
});