54 lines
1.8 KiB
JavaScript
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);
|
|
});
|