frontend-admin-model.test.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import assert from 'node:assert/strict';
  2. import { test } from 'node:test';
  3. import {
  4. adminUserStatusMeta,
  5. buildMergeConfirmationText,
  6. mergePreviewSummary,
  7. serializeAuditFilters,
  8. serializeSystemEmailPayload
  9. } from '../src/pages/Admin/admin-model.js';
  10. test('maps admin user statuses to labels and colors', () => {
  11. assert.deepEqual(adminUserStatusMeta('pending_email'), { label: '待验证邮箱', color: 'gold' });
  12. assert.deepEqual(adminUserStatusMeta('pending_review'), { label: '待管理员审核', color: 'blue' });
  13. assert.deepEqual(adminUserStatusMeta('active'), { label: '正常', color: 'green' });
  14. assert.deepEqual(adminUserStatusMeta('disabled'), { label: '已禁用', color: 'red' });
  15. });
  16. test('summarizes merge preview counts and confirmation text', () => {
  17. const preview = {
  18. sourceUser: { username: 'admin' },
  19. targetUser: { username: 'chendeben' },
  20. confirmationText: 'MERGE admin INTO chendeben',
  21. selectedCounts: {
  22. domains: 3,
  23. dnsCredentials: 2,
  24. apiTokens: 1,
  25. inboundMailboxes: 4,
  26. inboundMessages: 5,
  27. sendEvents: 9,
  28. smtpCredential: 0
  29. }
  30. };
  31. assert.equal(buildMergeConfirmationText(preview.sourceUser, preview.targetUser), preview.confirmationText);
  32. assert.deepEqual(mergePreviewSummary(preview), [
  33. { key: 'domains', label: '域名', count: 3 },
  34. { key: 'dnsCredentials', label: 'DNS 凭据', count: 2 },
  35. { key: 'apiTokens', label: 'API Token', count: 1 },
  36. { key: 'inboundMailboxes', label: '收信邮箱', count: 4 },
  37. { key: 'inboundMessages', label: '入站邮件', count: 5 },
  38. { key: 'sendEvents', label: '发送记录', count: 9 },
  39. { key: 'smtpCredential', label: 'SMTP 凭据', count: 0 }
  40. ]);
  41. });
  42. test('serializes system email payload without blank password', () => {
  43. assert.deepEqual(serializeSystemEmailPayload({
  44. host: 'smtp.example.com',
  45. port: '587',
  46. secure: true,
  47. username: 'mailer',
  48. password: ' ',
  49. fromEmail: 'notify@example.com'
  50. }), {
  51. host: 'smtp.example.com',
  52. port: 587,
  53. secure: true,
  54. username: 'mailer',
  55. fromEmail: 'notify@example.com'
  56. });
  57. });
  58. test('serializes audit filters to query params', () => {
  59. assert.equal(serializeAuditFilters({
  60. actorUserId: 1,
  61. targetUserId: '',
  62. action: 'admin.user_merge',
  63. from: '2026-07-08',
  64. to: undefined
  65. }), 'actorUserId=1&action=admin.user_merge&from=2026-07-08');
  66. });