import F from 'lodash/fp'; declare let trackPageView: () => void; declare let findMaxX: () => number; declare let findMaxY: () => number; declare let getCurrentPageViewId: () => void; declare let findFirstEventForPageViewId: (id: string) => Record; declare let findLastEventForPageViewId: (id: string) => Record; describe('Activity tracking with callbacks', () => { it('reports events on scroll', () => { browser.url('/activity-callback.html?test1'); browser.waitUntil(() => $('#init').getText() === 'true', { timeout: 5000, timeoutMsg: 'expected init after 5s', interval: 250, }); $('#bottomRight').scrollIntoView(); browser.waitUntil(() => +$('#numEvents').getText() >= 1, { timeout: 10000, timeoutMsg: 'expected > 1 event after 10s', }); const [maxX, maxY] = browser.execute(() => { return [findMaxX(), findMaxY()]; }); expect(maxX).toBeGreaterThan(100); expect(maxY).toBeGreaterThan(100); }); it('carries pageviewid change through and resets scroll', () => { browser.url('/activity-callback.html?test2'); browser.waitUntil(() => $('#init').getText() === 'true', { timeout: 5000, timeoutMsg: 'expected init after 5s', interval: 250, }); browser.execute(() => window.scrollTo(0, 0)); browser.execute(() => { getCurrentPageViewId(); }); const firstPageViewId = $('#currentPageViewId').getText(); $('#bottomRight').scrollIntoView(); $('#middle').scrollIntoView(); browser.waitUntil(() => +$('#numEvents').getText() >= 1, { timeout: 10000, timeoutMsg: 'expected > 1 event after 10s', }); browser.execute(() => { trackPageView(); }); $('#bottomRight').scrollIntoView(); browser.waitUntil(() => +$('#numEvents').getText() > 1, { timeout: 10000, timeoutMsg: 'expected > 1 event after 10s', }); browser.execute(() => { getCurrentPageViewId(); }); const secondPageViewId = $('#currentPageViewId').getText(); // sanity check expect(firstPageViewId).not.toEqual(secondPageViewId); const first = browser.execute((id) => { return findFirstEventForPageViewId(id); }, firstPageViewId); const second = browser.execute((id) => { return findLastEventForPageViewId(id); }, secondPageViewId); const getMinXY = F.at(['minXOffset', 'minYOffset']); // the first page view starts at 0,0 expect(getMinXY(first)).toEqual([0, 0]); // but the second starts at #bottomRight and only moves as far as #middle // so there is no way it can get to 0,0 const [secondX, secondY] = getMinXY(second); expect(secondX).toBeGreaterThan(0); expect(secondY).toBeGreaterThan(0); }); });