import createBlink from '../main';
import { VERSION } from '../config/config';
import jest from 'jest-mock';

describe('Send all intregration test', () => {
  it('should send all ad, activeTime, impression and video events', () => {
    const mockSend = jest.fn();
    const mockSendDirect = jest.fn();

    const blink = createBlink({
      send: mockSend,
      sendDirect: mockSendDirect,
    });

    // First send of a pageLoad event, to set the general state
    blink.pageInit({
      url: 'http://some.site',
      pageView: 'the-pageview-id',
      referrer: 'www.sol.no',
      site: 'www.kk.no',
    });

    blink.click({ url: 'https://www.dagbladet.no/a/2313' });

    blink.adScreenEnter({ id: 'top-banner', time: new Date(1) });

    blink.pageActivityStart({
      url: 'https://www.dagbladet.no/a/2313',
      pageScrollOffsetY: 840,
      time: new Date(2),
    });

    blink.playerShown({
      playerId: '111',
      muted: true,
      position: 0,
      reason: 'viewable',
      time: new Date(2),
      volume: 30,
    });

    blink.videoPlay({
      videoId: 'video-123',
      playerId: '111',
      muted: true,
      position: 0,
      reason: 'autostart',
      time: new Date(4),
      volume: 30,
    });

    blink.playerHidden({
      playerId: '111',
      muted: true,
      position: 20,
      reason: 'tabclose',
      time: new Date(5),
      volume: 30,
    });

    // Trigger the sending
    blink.sendAllEvents(new Date(5));

    // We check the last thing sent, that should contain all events
    const lastCall =
      mockSendDirect.mock.calls[mockSendDirect.mock.calls.length - 1][0];

    expect(lastCall.length).toBe(3);

    expect(lastCall.filter((ev: any) => ev.id === 'top-banner')[0]).toEqual({
      id: 'top-banner',
      adId: 'top-banner',
      pageView: 'the-pageview-id',
      site: 'www.kk.no',
      type: 'ads',
      version: VERSION,
      dfp: {
        adUnitPath: 'N/A',
        advertiserId: 0,
        campaignId: 0,
        creativeId: 0,
        inscreen: 0,
        lineItemId: 0,
        name: 'N/A',
        size: [0],
        loaded: 0,
        rendered: 0,
        sourceAgnosticCreativeId: 0,
        sourceAgnosticLineItemId: 0,
        bidder: null,
        prebidWinningBid: '',
      },
      inscreenTime: 4,
      inscreenTime0: 0,
      referrer: 'www.sol.no',
      scroll: {
        offsetHeight: 0,
        offsetTop: 0,
        pos: {
          adLoad: 0,
          inscreenDFP: 0,
          slotOnload: 0,
          slotRenderEnded: 0,
        },
      },
    });

    expect(
      lastCall.filter((ev: any) => ev.id === 'dagbladet.no/2313')[0],
    ).toEqual({
      activeTime: 3,
      id: 'dagbladet.no/2313',
      type: 'activeTime',
      pageView: 'the-pageview-id',
      referrer: 'www.sol.no',
      site: 'www.kk.no',
      version: VERSION,
      article: {
        harvesterId: 'dagbladet.no/2313',
        url: 'https://www.dagbladet.no/a/2313',
      },
      pageScrollMaxOffsetY: 840,
      pageScrollLatestOffsetY: 840,
    });

    expect(lastCall.filter((ev: any) => ev.id === 'video-123')[0]).toEqual({
      id: 'video-123',
      videoId: 'video-123',
      type: 'videoWatch',
      activeTime: 1,
      pageView: 'the-pageview-id',
      referrer: 'www.sol.no',
      site: 'www.kk.no',
      version: VERSION,
      videoPlayMuted: true,
      videoPlayPosition: 0,
      videoPlayReason: 'autostart',
      videoPlayVolume: 30,
      videoStopMuted: true,
      videoStopPosition: 20,
      videoStopReason: 'tabclose',
      videoStopVolume: 30,
      videoSticky: false,
    });
  });
});
