diff --git a/packages/signals/signals-integration-tests/src/helpers/base-page-object.ts b/packages/signals/signals-integration-tests/src/helpers/base-page-object.ts index 0ce504ca9..80d5b3c31 100644 --- a/packages/signals/signals-integration-tests/src/helpers/base-page-object.ts +++ b/packages/signals/signals-integration-tests/src/helpers/base-page-object.ts @@ -28,9 +28,7 @@ export class BasePage { * and wait for analytics and signals to be initialized */ async loadAndWait(...args: Parameters) { - await this.load(...args) - await this.waitForSignalsAssets() - return this + await Promise.all([this.load(...args), this.waitForSettings()]) } /** @@ -52,9 +50,9 @@ export class BasePage { /** * Wait for analytics and signals to be initialized + * We could do the same thing with analytics.ready() and signalsPlugin.ready() */ - async waitForSignalsAssets() { - // this is kind of an approximation of full initialization + async waitForSettings() { return Promise.all([ this.waitForCDNSettingsResponse(), this.waitForEdgeFunctionResponse(), @@ -72,7 +70,6 @@ export class BasePage { ({ signalSettings }) => { window.signalsPlugin = new window.SignalsPlugin({ disableSignalsRedaction: true, - flushInterval: 1000, ...signalSettings, }) window.analytics.load({ @@ -241,15 +238,17 @@ export class BasePage { }) } - waitForEdgeFunctionResponse() { + waitForEdgeFunctionResponse(timeout = 10000) { return this.page.waitForResponse( - `https://cdn.edgefn.segment.com/MY-WRITEKEY/**` + `https://cdn.edgefn.segment.com/MY-WRITEKEY/**`, + { timeout } ) } - waitForCDNSettingsResponse() { + async waitForCDNSettingsResponse(timeout = 10000) { return this.page.waitForResponse( - 'https://cdn.segment.com/v1/projects/*/settings' + 'https://cdn.segment.com/v1/projects/*/settings', + { timeout } ) } diff --git a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/all-segment-events.test.ts b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/all-segment-events.test.ts index 0aa145d88..d093337cf 100644 --- a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/all-segment-events.test.ts +++ b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/all-segment-events.test.ts @@ -76,7 +76,7 @@ test('Should dispatch events from signals that occurred before analytics was ins // add a user defined signal before analytics is instantiated void indexPage.addUserDefinedSignal() - await indexPage.waitForSignalsAssets() + await indexPage.waitForSettings() await Promise.all([ indexPage.waitForSignalsApiFlush(), diff --git a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/button-click-complex.test.ts b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/button-click-complex.test.ts index 392104cc5..2be92fede 100644 --- a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/button-click-complex.test.ts +++ b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/button-click-complex.test.ts @@ -3,15 +3,33 @@ import { IndexPage } from './index-page' const indexPage = new IndexPage() -const basicEdgeFn = ` - // this is a process signal function - const processSignal = (signal) => {}` +const basicEdgeFn = `const processSignal = (signal) => {}` test.beforeEach(async ({ page }) => { await indexPage.loadAndWait(page, basicEdgeFn) }) -test('button click (complex, with nested items)', async () => { +const data = { + eventType: 'click', + target: { + attributes: { + id: 'complex-button', + }, + classList: [], + id: 'complex-button', + labels: [], + name: '', + nodeName: 'BUTTON', + tagName: 'BUTTON', + title: '', + type: 'submit', + innerText: 'Other Example Button with Nested Text', + textContent: 'Other Example Button with Nested Text', + value: '', + }, +} + +test('clicking a button with nested content', async () => { /** * Click a button with nested text, ensure that that correct text shows up */ @@ -22,28 +40,28 @@ test('button click (complex, with nested items)', async () => { const interactionSignals = indexPage.signalsAPI.getEvents('interaction') expect(interactionSignals).toHaveLength(1) - const data = { - eventType: 'click', - target: { - attributes: { - id: 'complex-button', - }, - classList: [], - id: 'complex-button', - labels: [], - name: '', - nodeName: 'BUTTON', - tagName: 'BUTTON', - title: '', - type: 'submit', - innerText: expect.any(String), - textContent: expect.stringContaining( - 'Other Example Button with Nested Text' - ), - value: '', + + expect(interactionSignals[0]).toMatchObject({ + event: 'Segment Signal Generated', + type: 'track', + properties: { + type: 'interaction', + data, }, - } + }) +}) + +test('clicking the h1 tag inside a button', async () => { + /** + * Click the nested text, ensure that that correct text shows up + */ + await Promise.all([ + indexPage.clickInsideComplexButton(), + indexPage.waitForSignalsApiFlush(), + ]) + const interactionSignals = indexPage.signalsAPI.getEvents('interaction') + expect(interactionSignals).toHaveLength(1) expect(interactionSignals[0]).toMatchObject({ event: 'Segment Signal Generated', type: 'track', diff --git a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/index-page.ts b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/index-page.ts index 2b4b67877..d36e8f85e 100644 --- a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/index-page.ts +++ b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/index-page.ts @@ -40,4 +40,8 @@ export class IndexPage extends BasePage { async clickComplexButton() { return this.page.click('#complex-button') } + + async clickInsideComplexButton() { + return this.page.click('#complex-button h1') + } } diff --git a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-filter.test.ts b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-filter.test.ts index 21107dd7c..38dbf24d8 100644 --- a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-filter.test.ts +++ b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-filter.test.ts @@ -3,14 +3,7 @@ import { IndexPage } from './index-page' const indexPage = new IndexPage() -const basicEdgeFn = ` - // this is a process signal function - const processSignal = (signal) => { - if (signal.type === 'interaction') { - const eventName = signal.data.eventType + ' ' + '[' + signal.type + ']' - analytics.track(eventName, signal.data) - } - }` +const basicEdgeFn = `const processSignal = (signal) => {}` test('network signals allow and disallow list', async ({ page }) => { await indexPage.loadAndWait(page, basicEdgeFn, { diff --git a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-xhr.test.ts b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-xhr.test.ts index ec85f761e..5d86edb6e 100644 --- a/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-xhr.test.ts +++ b/packages/signals/signals-integration-tests/src/tests/signals-vanilla/network-signals-xhr.test.ts @@ -1,14 +1,7 @@ import { test, expect } from '@playwright/test' import { IndexPage } from './index-page' -const basicEdgeFn = ` - // this is a process signal function - const processSignal = (signal) => { - if (signal.type === 'interaction') { - const eventName = signal.data.eventType + ' ' + '[' + signal.type + ']' - analytics.track(eventName, signal.data) - } - }` +const basicEdgeFn = `const processSignal = (signal) => {}` test.describe('XHR Tests', () => { let indexPage: IndexPage