Files
2026-08-22 11:09:05 -05:00

54 lines
1.8 KiB
JavaScript

'use strict';
const test = require('node:test');
const assert = require('node:assert');
const { AuthStateMachine } = require('../src/bot/auth');
test('AuthStateMachine: register success via translate', () => {
const sm = new AuthStateMachine({});
sm.markRegisterSent();
sm.markAwaitRegister();
const r = sm.consume({ text: '', translate: 'commands.register.success' });
assert.strictEqual(r, 'auth_done');
assert.strictEqual(sm.isDone(), true);
});
test('AuthStateMachine: register success via phrase', () => {
const sm = new AuthStateMachine({ register_success: ['successfully registered'] });
sm.markRegisterSent();
sm.markAwaitRegister();
const r = sm.consume({ text: 'You have been successfully registered' });
assert.strictEqual(r, 'auth_done');
});
test('AuthStateMachine: already registered → login', () => {
const sm = new AuthStateMachine({});
const r = sm.consume({ text: 'You are already registered' });
assert.strictEqual(r, 'login_sent');
});
test('AuthStateMachine: login success', () => {
const sm = new AuthStateMachine({});
sm.markLoginSent();
sm.markAwaitLogin();
const r = sm.consume({ text: 'You have been logged in' });
assert.strictEqual(r, 'auth_done');
});
test('AuthStateMachine: out-of-order consume is no-op', () => {
const sm = new AuthStateMachine({});
sm.markRegisterSent();
sm.markAwaitRegister();
sm.consume({ text: 'You have been logged in' });
assert.strictEqual(sm.state, 'AWAIT_REGISTER');
});
test('AuthStateMachine: done consumes nothing', () => {
const sm = new AuthStateMachine({});
sm.markRegisterSent();
sm.markAwaitRegister();
sm.consume({ translate: 'commands.register.success' });
const r = sm.consume({ translate: 'commands.register.success' });
assert.strictEqual(r, null);
});