import { expect } from "chai"; import _ from "lodash"; import { HeaderBiddingType, RequestInventorySource, RequestType } from "../../../src/models"; import { fromRequestContract } from "../../../src/mappers/request.mapper"; import { FakeRequestContractBuilder } from "../../integration/utils/helper"; import { CampaignModelFake } from "../fake/CampaignModelFake"; import { getDeviceOS, getHeaderBiddingTypeFromRequest } from "../../../src/utils/RequestUtils"; import { Device } from "../../../src/models/device.model"; describe("request mapper", () => { it("should map well all request fields - in-app", async function () { const requestContract = new FakeRequestContractBuilder() .withCampaigns() .withType(RequestType.AD) .build(); delete requestContract.user.is_gdpr_applied; const requestChoices = await fromRequestContract( requestContract, RequestInventorySource.INTERNAL, new CampaignModelFake() ); expect(_.omit(requestChoices, ["groupedCampaignIds"])).to.deep.equal({ id: "d19ad1b3-5135-411f-a6c3-954db35381f6", request_id: "d19ad1b3-5135-411f-a6c3-954db35381f7", type: RequestType.AD, environment_type: "in-app", app: { app_id: "82349", bundle_id: "a.valid.bundle", sdk_version: "1.2.3", app_api_key: "111", name: "appName", cat: undefined, ad_unit_id: "82349_default", app_publisher_id: NaN, publisher_is_network_partner: false, publisher_name: "publisherName", seller_id: "sellerID", eecpm: 1, ad_unit_type: "ad_unit_type", }, site: undefined, user: { odid: "aa922640-b067-5418-9a90-3ce74453ca87", ogury_cookie_id: undefined, bidswitch_cookie_id: undefined, tdd_cookie_id: undefined, consent: undefined, consent_ads: undefined, data_optin: undefined, is_gdpr_applied: undefined, tcf_version: undefined, }, context: { day_of_week: NaN, hour: NaN, city: undefined, ssp: "ogury", country: "FR", }, device: { os: "ANDROID", language: undefined, ifa: "ifa", name: undefined, ip: "1.1.1.1", ipv6: undefined, os_version: undefined, screen_size: { density: 2, height: 600, width: 300, }, ua: "Mozilla/5.0 (Linux; Android 5.1.1; SM-G360T1 Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36", connectivity: undefined, isp: undefined, is_omid_compliant: undefined, ipVersion: 4, }, campaigns: [], inventory_source: "INTERNAL", size: 3, bidfloor: 1, metadata: {}, metadataTmp: {}, campaignData: {}, stepsStatuses: [], isWeb: false, allMetricsLabels: { device_os: "android", environment_type: "in-app", inventory_source: RequestInventorySource.INTERNAL, }, globalRequestLabels: { has_managed: "false", has_prog: "false", has_mkp: "false", has_fb: "false", fixed_price: "false", private_auction: "false", open_auction: "false", test_pop: -1, tmax: -1, header_bidding_type: "unknown", is_gdpr_applied: "unknown", }, }); }); it("should map well all request fields - web", async function () { const requestContract = new FakeRequestContractBuilder() .withCampaigns() .withType(RequestType.AD) .withSourceType("WEBMOBILE") .withSite({ name: "a website", domain: "awebsite.com", page: "https://www.awebsite.com", }) .withOS("ios") .build(); const requestChoices = await fromRequestContract( requestContract, RequestInventorySource.INTERNAL, new CampaignModelFake() ); expect(_.omit(requestChoices, ["groupedCampaignIds"])).to.deep.equal({ id: "d19ad1b3-5135-411f-a6c3-954db35381f6", request_id: "d19ad1b3-5135-411f-a6c3-954db35381f7", type: RequestType.AD, environment_type: "web", isWeb: true, site: { name: "a website", domain: "awebsite.com", page: "https://www.awebsite.com", }, app: { name: "a website", bundle_id: "awebsite.com", app_id: "82349", sdk_version: "1.2.3", app_api_key: "111", cat: undefined, ad_unit_id: "82349_default", app_publisher_id: NaN, publisher_is_network_partner: false, publisher_name: "publisherName", seller_id: "sellerID", eecpm: 1, ad_unit_type: "ad_unit_type", }, user: { odid: "aa922640-b067-5418-9a90-3ce74453ca87", ogury_cookie_id: undefined, bidswitch_cookie_id: undefined, tdd_cookie_id: undefined, consent: undefined, consent_ads: undefined, data_optin: undefined, is_gdpr_applied: true, tcf_version: undefined, }, context: { day_of_week: NaN, hour: NaN, city: undefined, ssp: "ogury", country: "FR", }, device: { os: "ios", language: undefined, ifa: "ifa", name: undefined, ip: "1.1.1.1", ipv6: undefined, os_version: undefined, screen_size: { density: 2, height: 600, width: 300, }, ua: "Mozilla/5.0 (Linux; Android 5.1.1; SM-G360T1 Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36", connectivity: undefined, isp: undefined, is_omid_compliant: undefined, ipVersion: 4, }, campaigns: [], inventory_source: "INTERNAL", size: 3, bidfloor: 1, metadata: {}, metadataTmp: {}, campaignData: {}, stepsStatuses: [], allMetricsLabels: { device_os: "ios", environment_type: "web", inventory_source: RequestInventorySource.INTERNAL, }, globalRequestLabels: { has_managed: "false", has_prog: "false", has_mkp: "false", has_fb: "false", fixed_price: "false", private_auction: "false", open_auction: "false", test_pop: -1, tmax: -1, header_bidding_type: "unknown", is_gdpr_applied: "true", }, }); }); it("should get correct Device OS", async function () { let device: Device = { os: "android" }; let deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("android"); device = { os: "ANDROID" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("android"); device = { os: "Fire OS" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("android"); device = { os: "Fireos" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("android"); device = { os: "ios" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("ios"); device = { os: "iphone" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("ios"); device = { os: "ipad" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("ios"); device = { os: "Apple ios" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("ios"); device = { os: "ipados" }; deviceOS = getDeviceOS(device); expect(deviceOS).to.equal("ios"); }); it("should get good header bidding type", async function () { expect(getHeaderBiddingTypeFromRequest(undefined)).to.be.undefined; expect(getHeaderBiddingTypeFromRequest("bad request")).to.be.undefined; expect(getHeaderBiddingTypeFromRequest("MAX")).to.equal(HeaderBiddingType.MAX); expect(getHeaderBiddingTypeFromRequest("Prebid")).to.equal(HeaderBiddingType.PreBidJS); expect(getHeaderBiddingTypeFromRequest("TAM")).to.equal(HeaderBiddingType.AmazonTAM); }); it("should map well all request fields - header bidding type", async function () { const requestContract = new FakeRequestContractBuilder() .withCampaigns() .withType(RequestType.AD) .withSourceType("WEBMOBILE") .withSite({ name: "a website", domain: "awebsite.com", page: "https://www.awebsite.com", }) .withOS("ios") .withHeaderBiddingType("MAX") .withTMax(300) .build(); requestContract.user.is_gdpr_applied = false; const requestChoices = await fromRequestContract( requestContract, RequestInventorySource.HEADER_BIDDING, new CampaignModelFake() ); expect(_.omit(requestChoices, ["groupedCampaignIds"])).to.deep.equal({ id: "d19ad1b3-5135-411f-a6c3-954db35381f6", request_id: "d19ad1b3-5135-411f-a6c3-954db35381f7", type: RequestType.AD, environment_type: "web", isWeb: true, tMax: 300, headerBiddingType: HeaderBiddingType.MAX, site: { name: "a website", domain: "awebsite.com", page: "https://www.awebsite.com", }, app: { name: "a website", bundle_id: "awebsite.com", app_id: "82349", sdk_version: "1.2.3", app_api_key: "111", cat: undefined, ad_unit_id: "82349_default", app_publisher_id: NaN, publisher_is_network_partner: false, publisher_name: "publisherName", seller_id: "sellerID", eecpm: 1, ad_unit_type: "ad_unit_type", }, user: { odid: "aa922640-b067-5418-9a90-3ce74453ca87", ogury_cookie_id: undefined, bidswitch_cookie_id: undefined, tdd_cookie_id: undefined, consent: undefined, consent_ads: undefined, data_optin: undefined, is_gdpr_applied: false, tcf_version: undefined, }, context: { day_of_week: NaN, hour: NaN, city: undefined, ssp: "ogury", country: "FR", }, device: { os: "ios", language: undefined, ifa: "ifa", name: undefined, ip: "1.1.1.1", ipv6: undefined, os_version: undefined, screen_size: { density: 2, height: 600, width: 300, }, ua: "Mozilla/5.0 (Linux; Android 5.1.1; SM-G360T1 Build/LMY47X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36", connectivity: undefined, isp: undefined, is_omid_compliant: undefined, ipVersion: 4, }, campaigns: [], inventory_source: "HEADER_BIDDING", size: 3, bidfloor: 1, metadata: {}, metadataTmp: {}, campaignData: {}, stepsStatuses: [], allMetricsLabels: { device_os: "ios", environment_type: "web", inventory_source: RequestInventorySource.HEADER_BIDDING, }, globalRequestLabels: { has_managed: "false", has_prog: "false", has_mkp: "false", has_fb: "false", fixed_price: "false", private_auction: "false", open_auction: "false", test_pop: -1, tmax: 300, header_bidding_type: "MAX", is_gdpr_applied: "false", }, }); }); });