product-mode-smoke-test.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict';
  2. const assert = require('assert/strict');
  3. const fs = require('fs');
  4. const os = require('os');
  5. const path = require('path');
  6. const {
  7. normalizeProductMode,
  8. resolveProductMode,
  9. setProductMode,
  10. } = require('../mcp/src/core/product-mode');
  11. const { buildStartupSummary } = require('../mcp/src/core/startup-summary');
  12. function main() {
  13. assert.equal(normalizeProductMode('个人版'), 'personal');
  14. assert.equal(normalizeProductMode('enterprise'), 'enterprise');
  15. const personal = resolveProductMode({ productMode: 'personal' }, { relayEnabled: true });
  16. assert.equal(personal.mode, 'personal');
  17. assert.equal(personal.collectionMode, 'local_polling');
  18. assert.equal(personal.multiDeviceManagement, false);
  19. const enterprise = resolveProductMode({ productMode: 'enterprise' }, { relayEnabled: false });
  20. assert.equal(enterprise.mode, 'enterprise');
  21. assert.equal(enterprise.relayReady, false);
  22. assert.equal(enterprise.enterpriseUpgrade.amount, 0);
  23. assert.equal(enterprise.enterpriseUpgrade.pricingStatus, 'placeholder');
  24. const startup = buildStartupSummary(
  25. { summary: { authConfigured: true, subscribed: true } },
  26. { data: {
  27. product: enterprise,
  28. account: { configured: true, online: true },
  29. listener: { running: true },
  30. config: { allowedSenderCount: 1 },
  31. } },
  32. );
  33. assert.equal(startup.ready, false);
  34. assert.equal(startup.checks.some(item => item.key === 'relay' && !item.ready), true);
  35. const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-product-mode-'));
  36. const envPath = path.join(tempRoot, '.env.local');
  37. const previous = process.env.QIWEI_PRODUCT_MODE;
  38. try {
  39. const saved = setProductMode('personal', { envPath });
  40. assert.equal(saved.product.mode, 'personal');
  41. assert.match(fs.readFileSync(envPath, 'utf8'), /^QIWEI_PRODUCT_MODE=personal$/m);
  42. } finally {
  43. if (previous === undefined) delete process.env.QIWEI_PRODUCT_MODE;
  44. else process.env.QIWEI_PRODUCT_MODE = previous;
  45. fs.rmSync(tempRoot, { recursive: true, force: true });
  46. }
  47. process.stdout.write(`${JSON.stringify({ status: 'ok', checks: 12 }, null, 2)}\n`);
  48. }
  49. try { main(); }
  50. catch (error) {
  51. process.stderr.write(`${error.stack || error.message}\n`);
  52. process.exit(1);
  53. }