n8cn / packages /cli /src /posthog /__tests__ /posthog.test.ts
gallyga's picture
Add n8n Chinese version
aec3094
import type { GlobalConfig } from '@n8n/config';
import { mock } from 'jest-mock-extended';
import { InstanceSettings } from 'n8n-core';
import { PostHog } from 'posthog-node';
import { PostHogClient } from '@/posthog';
import { mockInstance } from '@test/mocking';
jest.mock('posthog-node');
describe('PostHog', () => {
const instanceId = 'test-id';
const userId = 'distinct-id';
const apiKey = 'api-key';
const apiHost = 'api-host';
const instanceSettings = mockInstance(InstanceSettings, { instanceId });
const globalConfig = mock<GlobalConfig>({ logging: { level: 'debug' } });
beforeAll(() => {
globalConfig.diagnostics.posthogConfig = { apiKey, apiHost };
});
beforeEach(() => {
globalConfig.diagnostics.enabled = true;
jest.resetAllMocks();
});
it('inits PostHog correctly', async () => {
const ph = new PostHogClient(instanceSettings, globalConfig);
await ph.init();
expect(PostHog.prototype.constructor).toHaveBeenCalledWith(apiKey, { host: apiHost });
});
it('does not initialize or track if diagnostics are not enabled', async () => {
globalConfig.diagnostics.enabled = false;
const ph = new PostHogClient(instanceSettings, globalConfig);
await ph.init();
ph.track({
userId: 'test',
event: 'test',
properties: {},
});
expect(PostHog.prototype.constructor).not.toHaveBeenCalled();
expect(PostHog.prototype.capture).not.toHaveBeenCalled();
});
it('captures PostHog events', async () => {
const event = 'test event';
const properties = {
user_id: 'test',
test: true,
};
const ph = new PostHogClient(instanceSettings, globalConfig);
await ph.init();
ph.track({
userId,
event,
properties,
});
expect(PostHog.prototype.capture).toHaveBeenCalledWith({
distinctId: userId,
event,
userId,
properties,
sendFeatureFlags: true,
});
});
it('gets feature flags', async () => {
const createdAt = new Date();
const ph = new PostHogClient(instanceSettings, globalConfig);
await ph.init();
await ph.getFeatureFlags({
id: userId,
createdAt,
});
expect(PostHog.prototype.getAllFlags).toHaveBeenCalledWith(`${instanceId}#${userId}`, {
personProperties: {
created_at_timestamp: createdAt.getTime().toString(),
},
});
});
});