1- import { describe , it , expect , mock , beforeAll , afterAll , beforeEach , afterEach } from 'bun:test' ;
1+ import { describe , it , expect , beforeAll , afterAll , beforeEach , afterEach } from 'bun:test' ;
22import { mkdtempSync , rmSync } from 'fs' ;
33import { tmpdir } from 'os' ;
44import { join } from 'path' ;
5+ import { postHogConstructorCalls , postHogCaptureCalls } from '../preload' ;
56
67/**
78 * Guards the PostHog client construction options. The posthog-node SDK stamps
@@ -10,25 +11,9 @@ import { join } from 'path';
1011 * mocked so no real client (and no network) is ever created.
1112 */
1213
13- type ConstructorCall = { apiKey : string ; options : Record < string , unknown > } ;
14- const constructorCalls : ConstructorCall [ ] = [ ] ;
15- const captureCalls : Array < Record < string , unknown > > = [ ] ;
16-
17- mock . module ( 'posthog-node' , ( ) => ( {
18- PostHog : class {
19- constructor ( apiKey : string , options : Record < string , unknown > ) {
20- constructorCalls . push ( { apiKey, options } ) ;
21- }
22- capture ( payload : Record < string , unknown > ) : void {
23- captureCalls . push ( payload ) ;
24- }
25- async shutdown ( ) : Promise < void > { }
26- } ,
27- } ) ) ;
28-
2914const {
3015 captureEvent,
31- __resetTelemetryStateForTesting ,
16+ __resetTelemetryForTests ,
3217} = await import ( '../../src/services/telemetry/telemetry' ) ;
3318
3419let tempDir : string ;
@@ -52,15 +37,15 @@ beforeAll(() => {
5237} ) ;
5338
5439beforeEach ( ( ) => {
55- constructorCalls . length = 0 ;
56- captureCalls . length = 0 ;
57- __resetTelemetryStateForTesting ( ) ;
40+ postHogConstructorCalls . length = 0 ;
41+ postHogCaptureCalls . length = 0 ;
42+ __resetTelemetryForTests ( ) ;
5843 process . env . CLAUDE_MEM_TELEMETRY = '1' ;
5944 delete process . env . DO_NOT_TRACK ;
6045} ) ;
6146
6247afterEach ( ( ) => {
63- __resetTelemetryStateForTesting ( ) ;
48+ __resetTelemetryForTests ( ) ;
6449} ) ;
6550
6651afterAll ( ( ) => {
@@ -75,29 +60,29 @@ describe('PostHog client construction', () => {
7560 it ( 'constructs the client with disableGeoip: false so ingest-side geolocation works' , ( ) => {
7661 captureEvent ( 'test_event' ) ;
7762
78- expect ( constructorCalls . length ) . toBe ( 1 ) ;
79- expect ( constructorCalls [ 0 ] . options . disableGeoip ) . toBe ( false ) ;
63+ expect ( postHogConstructorCalls . length ) . toBe ( 1 ) ;
64+ expect ( postHogConstructorCalls [ 0 ] . options . disableGeoip ) . toBe ( false ) ;
8065 } ) ;
8166
8267 it ( 'reuses the client and queues the capture' , ( ) => {
8368 captureEvent ( 'test_event_2' ) ;
8469
85- expect ( constructorCalls . length ) . toBe ( 1 ) ;
86- expect ( captureCalls . length ) . toBe ( 1 ) ;
87- expect ( captureCalls [ 0 ] . event ) . toBe ( 'test_event_2' ) ;
70+ expect ( postHogConstructorCalls . length ) . toBe ( 1 ) ;
71+ expect ( postHogCaptureCalls . length ) . toBe ( 1 ) ;
72+ expect ( postHogCaptureCalls [ 0 ] . event ) . toBe ( 'test_event_2' ) ;
8873 } ) ;
8974
9075 it ( 're-resolves consent when the env override flips within the cache ttl window' , ( ) => {
9176 process . env . CLAUDE_MEM_TELEMETRY = '0' ;
9277 captureEvent ( 'opted_out_event' ) ;
93- expect ( constructorCalls . length ) . toBe ( 0 ) ;
94- expect ( captureCalls . length ) . toBe ( 0 ) ;
78+ expect ( postHogConstructorCalls . length ) . toBe ( 0 ) ;
79+ expect ( postHogCaptureCalls . length ) . toBe ( 0 ) ;
9580
9681 process . env . CLAUDE_MEM_TELEMETRY = '1' ;
9782 captureEvent ( 'opted_in_event' ) ;
9883
99- expect ( constructorCalls . length ) . toBe ( 1 ) ;
100- expect ( captureCalls . length ) . toBe ( 1 ) ;
101- expect ( captureCalls [ 0 ] . event ) . toBe ( 'opted_in_event' ) ;
84+ expect ( postHogConstructorCalls . length ) . toBe ( 1 ) ;
85+ expect ( postHogCaptureCalls . length ) . toBe ( 1 ) ;
86+ expect ( postHogCaptureCalls [ 0 ] . event ) . toBe ( 'opted_in_event' ) ;
10287 } ) ;
10388} ) ;
0 commit comments