frontend-admin-model.test.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. sendEvents: 9,
  26. smtpCredential: 0
  27. }
  28. };
  29. assert.equal(buildMergeConfirmationText(preview.sourceUser, preview.targetUser), preview.confirmationText);
  30. assert.deepEqual(mergePreviewSummary(preview), [
  31. { key: 'domains', label: '域名', count: 3 },
  32. { key: 'dnsCredentials', label: 'DNS 凭据', count: 2 },
  33. { key: 'apiTokens', label: 'API Token', count: 1 },
  34. { key: 'sendEvents', label: '发送记录', count: 9 },
  35. { key: 'smtpCredential', label: 'SMTP 凭据', count: 0 }
  36. ]);
  37. });
  38. test('serializes system email payload without blank password', () => {
  39. assert.deepEqual(serializeSystemEmailPayload({
  40. host: 'smtp.example.com',
  41. port: '587',
  42. secure: true,
  43. username: 'mailer',
  44. password: ' ',
  45. fromEmail: 'notify@example.com'
  46. }), {
  47. host: 'smtp.example.com',
  48. port: 587,
  49. secure: true,
  50. username: 'mailer',
  51. fromEmail: 'notify@example.com'
  52. });
  53. });
  54. test('serializes audit filters to query params', () => {
  55. assert.equal(serializeAuditFilters({
  56. actorUserId: 1,
  57. targetUserId: '',
  58. action: 'admin.user_merge',
  59. from: '2026-07-08',
  60. to: undefined
  61. }), 'actorUserId=1&action=admin.user_merge&from=2026-07-08');
  62. });