sidepanel-luckmail-manager.test.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const test = require('node:test');
  2. const assert = require('node:assert/strict');
  3. const fs = require('node:fs');
  4. test('sidepanel loads luckmail manager before sidepanel bootstrap', () => {
  5. const html = fs.readFileSync('sidepanel/sidepanel.html', 'utf8');
  6. const luckmailManagerIndex = html.indexOf('<script src="luckmail-manager.js"></script>');
  7. const sidepanelIndex = html.indexOf('<script src="sidepanel.js"></script>');
  8. assert.notEqual(luckmailManagerIndex, -1);
  9. assert.notEqual(sidepanelIndex, -1);
  10. assert.ok(luckmailManagerIndex < sidepanelIndex);
  11. });
  12. test('luckmail manager exposes a factory and renders empty state', () => {
  13. const source = fs.readFileSync('sidepanel/luckmail-manager.js', 'utf8');
  14. const windowObject = {};
  15. const api = new Function('window', `${source}; return window.SidepanelLuckmailManager;`)(windowObject);
  16. assert.equal(typeof api?.createLuckmailManager, 'function');
  17. const manager = api.createLuckmailManager({
  18. dom: {
  19. btnLuckmailBulkDisable: { disabled: false },
  20. btnLuckmailBulkEnable: { disabled: false },
  21. btnLuckmailBulkPreserve: { disabled: false },
  22. btnLuckmailBulkUnpreserve: { disabled: false },
  23. btnLuckmailBulkUnused: { disabled: false },
  24. btnLuckmailBulkUsed: { disabled: false },
  25. btnLuckmailDisableUsed: { disabled: false, textContent: '' },
  26. btnLuckmailRefresh: { disabled: false },
  27. checkboxLuckmailSelectAll: { checked: false, indeterminate: false, disabled: false },
  28. inputEmail: { value: '' },
  29. inputLuckmailSearch: { value: '', disabled: false },
  30. luckmailList: { innerHTML: '' },
  31. luckmailSection: { style: { display: '' } },
  32. luckmailSelectionSummary: { textContent: '' },
  33. luckmailSummary: { textContent: '' },
  34. selectLuckmailFilter: { value: 'all', disabled: false },
  35. },
  36. helpers: {
  37. copyTextToClipboard: async () => {},
  38. escapeHtml: (value) => String(value || ''),
  39. formatLuckmailDateTime: (value) => String(value || ''),
  40. getLuckmailPreserveTagName: () => '保留',
  41. normalizeLuckmailProjectName: (value) => String(value || '').trim().toLowerCase(),
  42. openConfirmModal: async () => true,
  43. showToast() {},
  44. },
  45. runtime: {
  46. sendMessage: async () => ({ purchases: [] }),
  47. },
  48. constants: {
  49. copyIcon: '',
  50. },
  51. });
  52. assert.equal(typeof manager.renderLuckmailPurchases, 'function');
  53. assert.equal(typeof manager.refreshLuckmailPurchases, 'function');
  54. assert.equal(typeof manager.queueLuckmailPurchaseRefresh, 'function');
  55. assert.equal(typeof manager.reset, 'function');
  56. manager.renderLuckmailPurchases([]);
  57. manager.reset();
  58. });