mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-13 16:14:07 -08:00
feat(editor): Add AppCues tracking for onboarding event (#7945)
## Summary We want to trigger a flow, every time the template onboarding event is triggered. AppCues no longer supports flows triggering through Segment, except directly. #### How to test the change: 1. Open on Cloud, where AppCues scripts are available 2. import workflow through /workflows/onboarding/1946 3. Ensure event is sent.. if flow is enabled, flow should show <img width="1702" alt="Screenshot 2023-12-07 at 14 39 51" src="https://github.com/n8n-io/n8n/assets/4711238/e58daae8-4364-41a4-bfda-25edeea6cc69"> ## Issues fixed Include links to Github issue or Community forum post or **Linear ticket**: > Important in order to close automatically and provide context to reviewers https://linear.app/n8n/issue/ADO-1455/bug-appcues-trigger ## Review / Merge checklist - [X] PR title and summary are descriptive. **Remember, the title automatically goes into the changelog. Use `(no-changelog)` otherwise.** ([conventions](https://github.com/n8n-io/n8n/blob/master/.github/pull_request_title_conventions.md)) - [ ] [Docs updated](https://github.com/n8n-io/n8n-docs) or follow-up ticket created. - [x] Tests included. > A bug is not considered fixed, unless a test is added to prevent it from happening again. A feature is not complete without tests. > > *(internal)* You can use Slack commands to trigger [e2e tests](https://www.notion.so/n8n/How-to-use-Test-Instances-d65f49dfc51f441ea44367fb6f67eb0a?pvs=4#a39f9e5ba64a48b58a71d81c837e8227) or [deploy test instance](https://www.notion.so/n8n/How-to-use-Test-Instances-d65f49dfc51f441ea44367fb6f67eb0a?pvs=4#f6a177d32bde4b57ae2da0b8e454bfce) or [deploy early access version on Cloud](https://www.notion.so/n8n/Cloudbot-3dbe779836004972b7057bc989526998?pvs=4#fef2d36ab02247e1a0f65a74f6fb534e).
This commit is contained in:
parent
10ad386604
commit
04cabafef7
|
@ -104,6 +104,9 @@ declare global {
|
||||||
};
|
};
|
||||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||||
Cypress: unknown;
|
Cypress: unknown;
|
||||||
|
Appcues?: {
|
||||||
|
track(event: string, properties?: ITelemetryTrackProperties): void;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@ let telemetry: Telemetry;
|
||||||
|
|
||||||
let settingsStore: ReturnType<typeof useSettingsStore>;
|
let settingsStore: ReturnType<typeof useSettingsStore>;
|
||||||
|
|
||||||
|
const MOCK_VERSION_CLI = '0.0.0';
|
||||||
|
|
||||||
describe('telemetry', () => {
|
describe('telemetry', () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
telemetry = new Telemetry();
|
telemetry = new Telemetry();
|
||||||
|
@ -137,4 +139,44 @@ describe('telemetry', () => {
|
||||||
expect(resetFunction).toHaveBeenCalledTimes(1);
|
expect(resetFunction).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('track function', () => {
|
||||||
|
it('should call Rudderstack track method with correct parameters and', () => {
|
||||||
|
const trackFunction = vi.spyOn(window.rudderanalytics, 'track');
|
||||||
|
|
||||||
|
const event = 'testEvent';
|
||||||
|
const properties = { test: '1' };
|
||||||
|
const options = { withPostHog: false, withAppCues: false };
|
||||||
|
|
||||||
|
telemetry.track(event, properties, options);
|
||||||
|
|
||||||
|
expect(trackFunction).toHaveBeenCalledTimes(1);
|
||||||
|
expect(trackFunction).toHaveBeenCalledWith(event, {
|
||||||
|
...properties,
|
||||||
|
version_cli: MOCK_VERSION_CLI,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call Rudderstack track method with correct parameters and withAppCues option set to true', () => {
|
||||||
|
window.Appcues = { track: () => {} };
|
||||||
|
const trackFunction = vi.spyOn(window.rudderanalytics, 'track');
|
||||||
|
const appCuesTrackFunction = vi.spyOn(window.Appcues, 'track');
|
||||||
|
|
||||||
|
const event = 'testEvent';
|
||||||
|
const properties = { test: '1' };
|
||||||
|
const options = { withPostHog: false, withAppCues: true };
|
||||||
|
|
||||||
|
telemetry.track(event, properties, options);
|
||||||
|
|
||||||
|
expect(trackFunction).toHaveBeenCalledTimes(1);
|
||||||
|
expect(trackFunction).toHaveBeenCalledWith(event, {
|
||||||
|
...properties,
|
||||||
|
version_cli: MOCK_VERSION_CLI,
|
||||||
|
});
|
||||||
|
expect(appCuesTrackFunction).toHaveBeenCalledWith(event, {
|
||||||
|
...properties,
|
||||||
|
version_cli: MOCK_VERSION_CLI,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -99,7 +99,7 @@ export class Telemetry {
|
||||||
track(
|
track(
|
||||||
event: string,
|
event: string,
|
||||||
properties?: ITelemetryTrackProperties,
|
properties?: ITelemetryTrackProperties,
|
||||||
{ withPostHog } = { withPostHog: false },
|
options: { withPostHog?: boolean; withAppCues?: boolean } = {},
|
||||||
) {
|
) {
|
||||||
if (!this.rudderStack) return;
|
if (!this.rudderStack) return;
|
||||||
|
|
||||||
|
@ -110,9 +110,13 @@ export class Telemetry {
|
||||||
|
|
||||||
this.rudderStack.track(event, updatedProperties);
|
this.rudderStack.track(event, updatedProperties);
|
||||||
|
|
||||||
if (withPostHog) {
|
if (options.withPostHog) {
|
||||||
usePostHog().capture(event, updatedProperties);
|
usePostHog().capture(event, updatedProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.withAppCues && window.Appcues) {
|
||||||
|
window.Appcues.track(event, updatedProperties);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page(route: Route) {
|
page(route: Route) {
|
||||||
|
|
|
@ -3218,6 +3218,7 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
withPostHog: true,
|
withPostHog: true,
|
||||||
|
withAppCues: true,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue