frontend-api-token-model.test.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import assert from 'node:assert/strict';
  2. import { test } from 'node:test';
  3. import {
  4. buildApiUsageExamples,
  5. buildMailboxApiUsageExamples,
  6. canCopyFullApiToken,
  7. formatApiTokenPrefix,
  8. getCopyableApiToken,
  9. getCreatedApiTokenSecret
  10. } from '../src/frontend/api-token-model.js';
  11. test('only exposes full API token when the create response includes the secret', () => {
  12. const created = { tokenPrefix: 'mh_123456789', token: 'mh_123456789.full-secret' };
  13. const listed = { tokenPrefix: 'mh_987654321' };
  14. assert.equal(canCopyFullApiToken(created), true);
  15. assert.equal(getCreatedApiTokenSecret(created), 'mh_123456789.full-secret');
  16. assert.equal(getCopyableApiToken(created), 'mh_123456789.full-secret');
  17. assert.equal(canCopyFullApiToken(listed), false);
  18. assert.equal(getCreatedApiTokenSecret(listed), '');
  19. assert.equal(getCopyableApiToken(listed), '');
  20. });
  21. test('formats token prefixes without pretending the full secret is available', () => {
  22. assert.equal(formatApiTokenPrefix({ tokenPrefix: 'mh_abcdef1234' }), 'mh_abcdef1234...');
  23. assert.equal(formatApiTokenPrefix({}), '-');
  24. });
  25. test('builds API usage examples with endpoint, bearer token, and message body', () => {
  26. const examples = buildApiUsageExamples({
  27. endpoint: 'https://mailhub.example.com/api/send',
  28. token: 'mh_example_token',
  29. from: 'noreply@example.com',
  30. to: 'user@example.com'
  31. });
  32. assert.match(examples.curl, /Authorization: Bearer mh_example_token/);
  33. assert.match(examples.curl, /https:\/\/mailhub\.example\.com\/api\/send/);
  34. assert.match(examples.nodeFetch, /fetch\('https:\/\/mailhub\.example\.com\/api\/send'/);
  35. assert.match(examples.nodeFetch, /from: 'noreply@example.com'/);
  36. assert.match(examples.requestBody, /"to": "user@example.com"/);
  37. assert.match(examples.successResponse, /"queued": true/);
  38. });
  39. test('builds persistent and temporary mailbox API examples', () => {
  40. const examples = buildMailboxApiUsageExamples({
  41. endpoint: 'https://mailhub.example.com/api/mailboxes',
  42. token: 'mh_mailbox_token',
  43. domain: 'example.com'
  44. });
  45. assert.match(examples.permanentCurl, /"mode": "permanent"/);
  46. assert.match(examples.temporaryCurl, /Authorization: Bearer mh_mailbox_token/);
  47. assert.match(examples.temporary, /"expiresInMinutes": 60/);
  48. assert.match(examples.successResponse, /"temporary": true/);
  49. });