import { expect } from "chai"; import { FakeRequestBuilder } from "../fakeRequestBuilder"; import ProgrammaticIVTStep from "../../../src/steps/programmatic/programmaticIVT.step"; import { StepBuilder } from "../../../src/steps/stepBuilder"; import { CampaignModelFake, DEFAULT_CAMPAIGN } from "../fake/CampaignModelFake"; import { Campaign } from "../../../src/models"; import { CampaignData } from "../../../src/models/CampaignModel"; import { FakeCampaign } from "../fake/Campaign"; describe("Programmatic IVT", function () { let programmaticIVTStep: any; let campaigns: Campaign[]; let campaignData: CampaignData[]; let campaignModel: CampaignModelFake; before(() => { campaignModel = new CampaignModelFake([]); programmaticIVTStep = new StepBuilder(new ProgrammaticIVTStep()).build(); campaigns = [new FakeCampaign("1"), new FakeCampaign("2")]; campaignData = [ { ...DEFAULT_CAMPAIGN, id: "1", prog_deal_id: "deal_1" }, { ...DEFAULT_CAMPAIGN, id: "2", prog_deal_id: "deal_2" }, ]; }); it("ivt no IP", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withIP(undefined) .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(0); expect(result.labelValues).to.contains({ with_ip: "false" }); }); it("ivt bad IP 0.0.0.0", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withIP("0.0.0.0") .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(0); expect(result.labelValues).to.contains({ with_ip: "false" }); }); it("ivt bad IP 255.255.255.255", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withIP("255.255.255.255") .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(0); expect(result.labelValues).to.contains({ with_ip: "false" }); }); it("ivt no user-agent no fallback", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withDeviceOS("ios") .withIP("1.2.3.4") .withUserAgent(undefined) .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(0); expect(result.labelValues).to.contains({ with_ip: "true" }); expect(result.labelValues).to.contains({ with_ua: "false" }); }); it("ivt empty user-agent (android) fallback", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withDeviceOS("android") .withIP("1.2.3.4") .withUserAgent("") .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(2); expect(result.labelValues).to.contains({ with_ip: "true" }); expect(result.labelValues).to.contains({ with_ua: "false" }); }); it("ivt empty user-agent (ios) no fallback", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withDeviceOS("ios") .withIP("1.2.3.4") .withUserAgent("") .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(0); expect(result.labelValues).to.contains({ with_ip: "true" }); expect(result.labelValues).to.contains({ with_ua: "false" }); }); it("valid request", async function () { const request = new FakeRequestBuilder() .withCampaigns(...campaigns) .withCampaignData(campaignData) .withIP("1.2.3.4") .withUserAgent("someUserAgent") .build(); const result = await programmaticIVTStep.execute(request); expect(result.passedCampaigns.length).to.equal(2); expect(result.labelValues).to.contains({ with_ip: "true" }); expect(result.labelValues).to.contains({ with_ua: "true" }); }); });