index.test.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import assert from 'node:assert/strict';
  2. import { describe, it, before, after } from 'node:test';
  3. import { AstroTelemetry } from '../dist/index.js';
  4. function setup() {
  5. const config = new Map();
  6. const telemetry = new AstroTelemetry({ version: '0.0.0-test.1' });
  7. const logs = [];
  8. // Stub isCI to false so we can test user-facing behavior
  9. telemetry.isCI = false;
  10. // Stub process.env to properly test in Astro's own CI
  11. telemetry.env = {};
  12. // Override config so we can inspect it
  13. telemetry.config = config;
  14. // Override debug so we can inspect it
  15. telemetry.debug.enabled = true;
  16. telemetry.debug.log = (...args) => logs.push(args);
  17. return { telemetry, config, logs };
  18. }
  19. describe('AstroTelemetry', () => {
  20. let oldCI;
  21. before(() => {
  22. oldCI = process.env.CI;
  23. // Stub process.env.CI to `false`
  24. process.env.CI = 'false';
  25. });
  26. after(() => {
  27. process.env.CI = oldCI;
  28. });
  29. it('initializes when expected arguments are given', () => {
  30. const { telemetry } = setup();
  31. assert(telemetry instanceof AstroTelemetry);
  32. });
  33. it('does not record event if disabled', async () => {
  34. const { telemetry, config, logs } = setup();
  35. telemetry.setEnabled(false);
  36. const [key] = Array.from(config.keys());
  37. assert.notEqual(key, undefined);
  38. assert.equal(config.get(key), false);
  39. assert.equal(telemetry.enabled, false);
  40. assert.equal(telemetry.isDisabled, true);
  41. const result = await telemetry.record(['TEST']);
  42. assert.equal(result, undefined);
  43. const [log] = logs;
  44. assert.notEqual(log, undefined);
  45. assert.match(logs.join(''), /disabled/);
  46. });
  47. it('records event if enabled', async () => {
  48. const { telemetry, config, logs } = setup();
  49. telemetry.setEnabled(true);
  50. const [key] = Array.from(config.keys());
  51. assert.notEqual(key, undefined);
  52. assert.equal(config.get(key), true);
  53. assert.equal(telemetry.enabled, true);
  54. assert.equal(telemetry.isDisabled, false);
  55. await telemetry.record(['TEST']);
  56. assert.equal(logs.length, 2);
  57. });
  58. it('respects disable from notify', async () => {
  59. const { telemetry, config, logs } = setup();
  60. await telemetry.notify(() => false);
  61. const [key] = Array.from(config.keys());
  62. assert.notEqual(key, undefined);
  63. assert.equal(config.get(key), false);
  64. assert.equal(telemetry.enabled, false);
  65. assert.equal(telemetry.isDisabled, true);
  66. const [log] = logs;
  67. assert.notEqual(log, undefined);
  68. assert.match(logs.join(''), /disabled/);
  69. });
  70. it('respects enable from notify', async () => {
  71. const { telemetry, config, logs } = setup();
  72. await telemetry.notify(() => true);
  73. const [key] = Array.from(config.keys());
  74. assert.notEqual(key, undefined);
  75. assert.equal(config.get(key), true);
  76. assert.equal(telemetry.enabled, true);
  77. assert.equal(telemetry.isDisabled, false);
  78. const [log] = logs;
  79. assert.notEqual(log, undefined);
  80. assert.match(logs.join(''), /enabled/);
  81. });
  82. });