frontend-auth-model.test.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import assert from 'node:assert/strict';
  2. import { test } from 'node:test';
  3. import { authModeFromLocation, nextAuthSuccessState } from '../src/frontend/auth/auth-model.js';
  4. test('registration success returns to login without navigating to the protected app', () => {
  5. assert.deepEqual(
  6. nextAuthSuccessState('/api/register', {
  7. user: { status: 'pending_email' },
  8. message: '注册成功,请先验证邮箱,验证后等待管理员审核。'
  9. }),
  10. {
  11. mode: 'login',
  12. path: '/login',
  13. message: '注册成功,请先验证邮箱,验证后等待管理员审核。',
  14. redirectTo: ''
  15. }
  16. );
  17. });
  18. test('login success still redirects to the protected app', () => {
  19. assert.deepEqual(
  20. nextAuthSuccessState('/api/login', {
  21. user: { status: 'active' }
  22. }),
  23. {
  24. mode: 'login',
  25. path: '/login',
  26. message: '',
  27. redirectTo: '/'
  28. }
  29. );
  30. });
  31. test('detects account recovery modes from auth routes', () => {
  32. assert.deepEqual(authModeFromLocation('/forgot-password'), { mode: 'forgot', token: '' });
  33. assert.deepEqual(authModeFromLocation('/resend-verification'), { mode: 'resend', token: '' });
  34. assert.deepEqual(authModeFromLocation('/reset-password', '?token=abc123'), { mode: 'reset', token: 'abc123' });
  35. assert.deepEqual(authModeFromLocation('/login'), { mode: 'login', token: '' });
  36. assert.deepEqual(authModeFromLocation('/register'), { mode: 'register', token: '' });
  37. });