n8n/packages/cli/test/unit/PostHog.test.ts
Mutasem Aldmour 26a20ed47e
feat: Support feature flag evaluation server side (#5511)
* feat(editor): roll out schema view

* feat(editor): add posthog tracking

* refactor: use composables

* refactor: clean up console log

* refactor: clean up impl

* chore: clean up impl

* fix: fix demo var

* chore: add comment

* refactor: clean up

* chore: wrap error func

* refactor: clean up import

* refactor: make store

* feat: enable rudderstack usebeacon, move event to unload

* chore: clean up alert

* refactor: move tracking from hooks

* fix: reload flags on login

* fix: add func to setup

* fix: clear duplicate import

* chore: add console to tesT

* chore: add console to tesT

* fix: try reload

* chore: randomize instnace id for testing

* chore: randomize instnace id for testing

* chore: add console logs for testing

* chore: move random id to fe

* chore: use query param for testing

* feat: update PostHog api endpoint

* feat: update rs host

* feat: update rs host

* feat: update rs endpoints

* refactor: use api host for BE events as well

* refactor: refactor out posthog client

* feat: add feature flags to login

* feat: add feature flags to login

* feat: get feature flags to work

* feat: add created at to be events

* chore: add todos

* chore: clean up store

* chore: add created at to identify

* feat: add posthog config to settings

* feat: add bootstrapping

* chore: clean up

* chore: fix build

* fix: get dates to work

* fix: get posthog to recognize dates

* chore: refactor

* fix: update back to number

* fix: update key

* fix: get experiment evals to work

* feat: add posthog to signup router

* feat: add feature flags on sign up

* chore: clean up

* fix: fix import

* chore: clean up loading script

* feat: add timeout, fix: script loader

* fix: test timeout and get working on 8080

* refactor: move out posthog

* feat: add experiment tracking

* fix: clear tracked on reset

* fix: fix signup bug

* fix: handle errors when telmetry is disabled

* refactor: remove redundant await

* fix: add back posthog to telemetry

* test: fix test

* test: fix test

* test: add tests for posthog client

* lint: fix

* fix: fix issue with slow decide endpoint

* lint: fix

* lint: fix

* lint: fix

* lint: fix

* chore: address PR feedback

* chore: address PR feedback

* feat: add onboarding experiment
2023-02-21 11:35:35 +03:00

90 lines
1.9 KiB
TypeScript

import { PostHog } from 'posthog-node';
import { PostHogClient } from '@/posthog';
import config from '@/config';
jest.mock('posthog-node');
describe('PostHog', () => {
const instanceId = 'test-id';
const userId = 'distinct-id';
const apiKey = 'api-key';
const apiHost = 'api-host';
beforeAll(() => {
config.set('diagnostics.config.posthog.apiKey', apiKey);
config.set('diagnostics.config.posthog.apiHost', apiHost);
});
beforeEach(() => {
config.set('diagnostics.enabled', true);
jest.resetAllMocks();
});
it('inits PostHog correctly', async () => {
const ph = new PostHogClient();
await ph.init(instanceId);
expect(PostHog.prototype.constructor).toHaveBeenCalledWith(apiKey, {host: apiHost});
});
it('does not initialize or track if diagnostics are not enabled', async () => {
config.set('diagnostics.enabled', false);
const ph = new PostHogClient();
await ph.init(instanceId);
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();
await ph.init(instanceId);
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();
await ph.init(instanceId);
ph.getFeatureFlags({
id: userId,
createdAt,
});
expect(PostHog.prototype.getAllFlags).toHaveBeenCalledWith(
`${instanceId}#${userId}`,
{
personProperties: {
created_at_timestamp: createdAt.getTime().toString(),
},
}
);
});
});