mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
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
This commit is contained in:
90
packages/cli/test/unit/PostHog.test.ts
Normal file
90
packages/cli/test/unit/PostHog.test.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
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(),
|
||||
},
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user