icloud-utils.test.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. const test = require('node:test');
  2. const assert = require('node:assert/strict');
  3. const {
  4. findIcloudAliasArray,
  5. findIcloudAliasByEmail,
  6. getConfiguredIcloudHostPreference,
  7. getIcloudHostHintFromMessage,
  8. getIcloudLoginUrlForHost,
  9. getIcloudSetupUrlForHost,
  10. normalizeBooleanMap,
  11. normalizeIcloudAliasList,
  12. normalizeIcloudAliasRecord,
  13. normalizeIcloudHost,
  14. pickReusableIcloudAlias,
  15. toNormalizedEmailSet,
  16. } = require('../icloud-utils.js');
  17. test('normalizeIcloudHost and host preference helpers resolve supported hosts', () => {
  18. assert.equal(normalizeIcloudHost('www.icloud.com'), 'icloud.com');
  19. assert.equal(normalizeIcloudHost('setup.icloud.com.cn'), 'icloud.com.cn');
  20. assert.equal(normalizeIcloudHost('example.com'), '');
  21. assert.equal(getConfiguredIcloudHostPreference({ icloudHostPreference: 'icloud.com' }), 'icloud.com');
  22. assert.equal(getConfiguredIcloudHostPreference({ icloudHostPreference: 'auto' }), '');
  23. assert.equal(getIcloudLoginUrlForHost('icloud.com.cn'), 'https://www.icloud.com.cn/');
  24. assert.equal(getIcloudSetupUrlForHost('icloud.com'), 'https://setup.icloud.com/setup/ws/1');
  25. });
  26. test('getIcloudHostHintFromMessage can infer host from error text', () => {
  27. assert.equal(getIcloudHostHintFromMessage('status 401 from setup.icloud.com.cn/setup/ws/1'), 'icloud.com.cn');
  28. assert.equal(getIcloudHostHintFromMessage('request failed at https://www.icloud.com/'), 'icloud.com');
  29. assert.equal(getIcloudHostHintFromMessage('unknown host'), '');
  30. });
  31. test('findIcloudAliasArray finds nested alias collections', () => {
  32. const payload = {
  33. result: {
  34. data: {
  35. items: [
  36. { hme: 'first@icloud.com', anonymousId: 'a1' },
  37. { hme: 'second@icloud.com', anonymousId: 'a2' },
  38. ],
  39. },
  40. },
  41. };
  42. assert.deepEqual(findIcloudAliasArray(payload), payload.result.data.items);
  43. });
  44. test('normalizeIcloudAliasRecord merges used and preserved state', () => {
  45. const alias = normalizeIcloudAliasRecord({
  46. anonymousId: 'alias-1',
  47. hme: 'Demo@iCloud.com',
  48. label: 'Test',
  49. note: 'Created by test',
  50. state: 'active',
  51. }, {
  52. usedEmails: ['demo@icloud.com'],
  53. preservedEmails: ['demo@icloud.com'],
  54. });
  55. assert.deepEqual(alias, {
  56. anonymousId: 'alias-1',
  57. email: 'demo@icloud.com',
  58. label: 'Test',
  59. note: 'Created by test',
  60. state: 'active',
  61. active: true,
  62. used: true,
  63. preserved: true,
  64. createdAt: null,
  65. });
  66. });
  67. test('normalizeIcloudAliasList orders active unused aliases before used aliases', () => {
  68. const aliases = normalizeIcloudAliasList({
  69. hmeEmails: [
  70. { hme: 'used@icloud.com', anonymousId: 'u1', active: true },
  71. { hme: 'fresh@icloud.com', anonymousId: 'f1', active: true },
  72. { hme: 'inactive@icloud.com', anonymousId: 'i1', active: false },
  73. ],
  74. }, {
  75. usedEmails: ['used@icloud.com'],
  76. preservedEmails: ['inactive@icloud.com'],
  77. });
  78. assert.deepEqual(aliases.map((alias) => alias.email), [
  79. 'fresh@icloud.com',
  80. 'used@icloud.com',
  81. 'inactive@icloud.com',
  82. ]);
  83. assert.equal(aliases[2].preserved, true);
  84. });
  85. test('pickReusableIcloudAlias and findIcloudAliasByEmail select expected aliases', () => {
  86. const aliases = normalizeIcloudAliasList({
  87. hmeEmails: [
  88. { hme: 'used@icloud.com', anonymousId: 'u1', active: true },
  89. { hme: 'fresh@icloud.com', anonymousId: 'f1', active: true },
  90. ],
  91. }, {
  92. usedEmails: ['used@icloud.com'],
  93. });
  94. assert.equal(pickReusableIcloudAlias(aliases)?.email, 'fresh@icloud.com');
  95. assert.equal(findIcloudAliasByEmail(aliases, 'FRESH@ICLOUD.COM')?.anonymousId, 'f1');
  96. });
  97. test('normalizeBooleanMap and toNormalizedEmailSet normalize keys and truthy entries', () => {
  98. const normalized = normalizeBooleanMap({
  99. ' Demo@icloud.com ': 1,
  100. 'skip@icloud.com': 0,
  101. });
  102. assert.deepEqual(normalized, {
  103. 'demo@icloud.com': true,
  104. 'skip@icloud.com': false,
  105. });
  106. assert.deepEqual([...toNormalizedEmailSet(normalized)], ['demo@icloud.com']);
  107. });