Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// 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`,
});