310 lines
18 KiB
JavaScript
310 lines
18 KiB
JavaScript
// META: script=/resources/testdriver.js
|
|
// META: script=/resources/testdriver-vendor.js
|
|
// META: script=/common/utils.js
|
|
// META: script=resources/fledge-util.sub.js
|
|
// META: script=/common/subset-tests.js
|
|
// META: timeout=long
|
|
// META: variant=?1-5
|
|
// META: variant=?6-last
|
|
|
|
|
|
"use strict";
|
|
|
|
const makeTest = ({
|
|
// Name of the test.
|
|
name,
|
|
// The value of the selectableReportingIds to be used in the test.
|
|
selectableBuyerAndSellerReportingIds = undefined,
|
|
// The value of the buyerAndSellerReportingId to be used in the test.
|
|
buyerAndSellerReportingId = undefined,
|
|
// The value of the buyerReportingId to be used in the test.
|
|
buyerReportingId = undefined,
|
|
// The javascript comparison to be used in generateBid()
|
|
generateBidComparison,
|
|
// what gets returned by generateBid()
|
|
generateBidReturn,
|
|
// The javascript comparison to be used in scoreAd()
|
|
scoreAdComparison,
|
|
// The javascript comparison to be used in reportWin()
|
|
reportWinComparison,
|
|
// The javascript comparison to be used in reportResult()
|
|
reportResultComparison,
|
|
// Whether we expect the auction to have a winner or not.
|
|
expectWinner = true,
|
|
}) => {
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let renderURL = createRenderURL(uuid);
|
|
const bidderReportURL = createBidderReportURL(uuid);
|
|
const sellerReportURL = createSellerReportURL(uuid);
|
|
|
|
let interestGroupOverrides = {};
|
|
interestGroupOverrides.ads = [{
|
|
renderURL: renderURL,
|
|
selectableBuyerAndSellerReportingIds: selectableBuyerAndSellerReportingIds,
|
|
buyerAndSellerReportingId: buyerAndSellerReportingId,
|
|
buyerReportingId: buyerReportingId,
|
|
}];
|
|
interestGroupOverrides.biddingLogicURL = createBiddingScriptURL(
|
|
{
|
|
generateBid:
|
|
`
|
|
if(${(generateBidComparison)}){
|
|
return ${generateBidReturn};
|
|
}
|
|
throw "Failed comparison in generateBid: " + interestGroup["ads"][0];
|
|
`,
|
|
reportWin:
|
|
`
|
|
if(${reportWinComparison})
|
|
sendReportTo('${bidderReportURL}')
|
|
else
|
|
throw "Failed comparison in reportWin";
|
|
`
|
|
});
|
|
|
|
let auctionConfigOverrides = {};
|
|
auctionConfigOverrides.decisionLogicURL = createDecisionScriptURL(
|
|
uuid,
|
|
{
|
|
scoreAd:
|
|
`
|
|
if (${scoreAdComparison}){
|
|
return {desirability: 10, bid: 10}
|
|
}
|
|
throw "Failed comparison in scoreAd ";
|
|
`,
|
|
reportResult:
|
|
`
|
|
if(${reportResultComparison})
|
|
sendReportTo("${sellerReportURL}");
|
|
else
|
|
throw "Failed comparison in reportResult";
|
|
`
|
|
});
|
|
|
|
await joinInterestGroup(test, uuid, interestGroupOverrides);
|
|
|
|
if (expectWinner) {
|
|
await runBasicFledgeAuctionAndNavigate(test, uuid, auctionConfigOverrides);
|
|
await waitForObservedRequests(
|
|
uuid,
|
|
[bidderReportURL, sellerReportURL]);
|
|
}
|
|
else {
|
|
await runBasicFledgeTestExpectingNoWinner(test, uuid, auctionConfigOverrides);
|
|
}
|
|
}, name);
|
|
};
|
|
|
|
// Verify that basic form of selectableReportingIds and selectedReportingId are where they should be.
|
|
makeTest({
|
|
name: "selectableBuyerAndSellerReportingIds",
|
|
selectableBuyerAndSellerReportingIds: ["selectable_id1", "selectable_id2"],
|
|
generateBidComparison: `deepEquals(interestGroup["ads"][0].selectableBuyerAndSellerReportingIds, ["selectable_id1", "selectable_id2"])`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL,
|
|
selectedBuyerAndSellerReportingId:interestGroup.ads[0].selectableBuyerAndSellerReportingIds[0]}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
// Verify the buyer and seller reporting id is where we expect it when it is present alongside the selected reporting id.
|
|
makeTest({
|
|
name: "selectableBuyerAndSellerReportingIds and buyerAndSellerReportingId",
|
|
selectableBuyerAndSellerReportingIds: ["selectable_id1", "selectable_id2"],
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
generateBidComparison: `deepEquals(interestGroup["ads"][0].selectableBuyerAndSellerReportingIds, ["selectable_id1", "selectable_id2"]) &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === "buyer_and_seller_reporting_id"`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL,
|
|
selectedBuyerAndSellerReportingId:interestGroup.ads[0].selectableBuyerAndSellerReportingIds[0]}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
// Verify the buyer reporting id is where we expect it when it is present alongside the selected reporting id.
|
|
makeTest({
|
|
name: "selectableBuyerAndSellerReportingIds and buyerReportingId",
|
|
selectableBuyerAndSellerReportingIds: ["selectable_id1", "selectable_id2"],
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `deepEquals(interestGroup["ads"][0].selectableBuyerAndSellerReportingIds, ["selectable_id1", "selectable_id2"]) &&
|
|
interestGroup["ads"][0].buyerReportingId === "buyer_reporting_id"`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL,
|
|
selectedBuyerAndSellerReportingId:interestGroup.ads[0].selectableBuyerAndSellerReportingIds[0]}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === "buyer_reporting_id"`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
// Verify all reporting ids are where we expect when they are all present alongside the selected reporting id.
|
|
makeTest({
|
|
name: "selectableBuyerAndSellerReportingIds, buyerAndSellerReportingId, and buyerReportingId",
|
|
selectableBuyerAndSellerReportingIds: ["selectable_id1", "selectable_id2"],
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `deepEquals(interestGroup["ads"][0].selectableBuyerAndSellerReportingIds, ["selectable_id1", "selectable_id2"]) &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
interestGroup["ads"][0].buyerReportingId === "buyer_reporting_id"`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL,
|
|
selectedBuyerAndSellerReportingId:interestGroup.ads[0].selectableBuyerAndSellerReportingIds[0]}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === "buyer_reporting_id"`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === "selectable_id1" &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
// Verify old behavior occurs when no id was selected, even though there was selectable ids.
|
|
makeTest({
|
|
name: "selectableBuyerAndSellerReportingIds but none selected, buyerAndSellerReportingId, and buyerReportingId",
|
|
selectableBuyerAndSellerReportingIds: ["selectable_id1", "selectable_id2"],
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `deepEquals(interestGroup["ads"][0].selectableBuyerAndSellerReportingIds, ["selectable_id1", "selectable_id2"]) &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
interestGroup["ads"][0].buyerReportingId === "buyer_reporting_id"`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
// Make sure if there was a selectedReportingId that's not within the selectables,
|
|
// that the worklet throws an error and the auction does not have a winner.
|
|
makeTest({
|
|
name: "selected not included selectables",
|
|
selectableBuyerAndSellerReportingIds: ["selectable_id1", "selectable_id2"],
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `deepEquals(interestGroup["ads"][0].selectableBuyerAndSellerReportingIds, ["selectable_id1", "selectable_id2"]) &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
interestGroup["ads"][0].buyerReportingId === "buyer_reporting_id"`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL, selectedBuyerAndSellerReportingId:"invalid_id"}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `false`,
|
|
reportResultComparison: `false"`,
|
|
expectWinner: false
|
|
});
|
|
|
|
// Make sure if there was a selectedReportingId but no selectables,
|
|
// that the worklet throws an error and the auction does not have a winner
|
|
makeTest({
|
|
name: "selected without selectables",
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `interestGroup["ads"][0].selectableBuyerAndSellerReportingIds === undefined &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === undefined &&
|
|
interestGroup["ads"][0].buyerReportingId === undefined`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL, selectedBuyerAndSellerReportingId:"invalid_id"}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `false`,
|
|
reportResultComparison: `false`,
|
|
expectWinner: false
|
|
});
|
|
|
|
// Verify old behavior occurs when there are no present selectable ids.
|
|
makeTest({
|
|
name: "buyerAndSellerReportingId, and buyerReportingId, but no selectables present",
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `interestGroup["ads"][0].selectableBuyerAndSellerReportingIds === undefined &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === undefined &&
|
|
interestGroup["ads"][0].buyerReportingId === undefined`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
makeTest({
|
|
name: "only buyerAndSellerReportingId",
|
|
buyerAndSellerReportingId: "buyer_and_seller_reporting_id",
|
|
generateBidComparison: `interestGroup["ads"][0].selectableBuyerAndSellerReportingIds === undefined &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === undefined &&
|
|
interestGroup["ads"][0].buyerReportingId === undefined`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === "buyer_and_seller_reporting_id" &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
makeTest({
|
|
name: "only buyerReportingId",
|
|
buyerReportingId: "buyer_reporting_id",
|
|
generateBidComparison: `interestGroup["ads"][0].selectableBuyerAndSellerReportingIds === undefined &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === undefined &&
|
|
interestGroup["ads"][0].buyerReportingId === undefined`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === "buyer_reporting_id"`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|
|
|
|
makeTest({
|
|
name: "no reporting ids, expect IG name",
|
|
generateBidComparison: `interestGroup["ads"][0].selectableBuyerAndSellerReportingIds === undefined &&
|
|
interestGroup["ads"][0].buyerAndSellerReportingId === undefined &&
|
|
interestGroup["ads"][0].buyerReportingId === undefined`,
|
|
generateBidReturn: `{bid:10, render: interestGroup.ads[0].renderURL}`,
|
|
scoreAdComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
reportWinComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined &&
|
|
browserSignals.interestGroupName === "default name"`,
|
|
reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerAndSellerReportingId === undefined &&
|
|
browserSignals.buyerReportingId === undefined`,
|
|
});
|