63 lines
1.7 KiB
JavaScript
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' },
|
|
]);
|
|
});
|