// META: script=/resources/testdriver.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-10
// META: variant=?11-15
// META: variant=?16-20
// META: variant=?21-25
// META: variant=?26-30
// META: variant=?31-35
// META: variant=?36-40
// META: variant=?41-45
// META: variant=?46-50
// META: variant=?51-55
// META: variant=?56-60
// META: variant=?61-65
// META: variant=?66-70
// META: variant=?71-75
// META: variant=?76-80
// META: variant=?81-85
"use strict;"
// These tests focus on making sure InterestGroup fields are passed to generateBid(),
// and are normalized if necessary. This test does not check the behaviors of the
// fields.
// Modifies "ads". Replaces "REPLACE_WITH_UUID" in all "renderURL" fields of
// objects in "ads" array with "uuid". Generated ad URLs have embedded
// UUIDs to prevent InterestGroups unexpectedly left over from one test from
// messing up another test, but these tests need ad URLs before the UUID is
// generated. To get around that, "REPLACE_WITH_UUID" is used in place of UUIDs
// and then this is used to replace them with the real UUID.
function updateAdRenderURLs(ads, uuid) {
for (let i = 0; i < ads.length; ++i) {
let ad = ads[i];
ad.renderURL = ad.renderURL.replace('REPLACE_WITH_UUID', uuid);
}
}
const makeTest = ({
// Test name.
name,
// InterestGroup field name.
fieldName,
// InterestGroup field value, both expected in worklets and the value used
// when joining the interest group. If undefined, value will not be set in
// interestGroup, and will be expected to also not be set in the
// interestGroup passed to generateBid().
fieldValue,
// Additional values to use in the InterestGroup passed to joinInterestGroup().
// If it contains a value for the key specified in `fieldName`, takes
// precedent over `fieldValue`.
interestGroupOverrides = {}
}) => {
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
// It's not strictly necessary to replace UUIDs in "adComponents", but do it for consistency.
if (fieldName === 'ads' || fieldName === 'adComponents' && fieldValue) {
updateAdRenderURLs(fieldValue, uuid);
}
if (interestGroupOverrides.ads) {
updateAdRenderURLs(interestGroupOverrides.ads, uuid);
}
if (interestGroupOverrides.adComponents) {
updateAdRenderURLs(interestGroupOverrides.adComponents, uuid);
}
if (!(fieldName in interestGroupOverrides) && fieldValue !== undefined)
interestGroupOverrides[fieldName] = fieldValue;
let comparison = `deepEquals(interestGroup["${fieldName}"], ${JSON.stringify(fieldValue)})`;
// In the case it's undefined, require value not to be set.
if (fieldValue === undefined)
comparison = `!("${fieldName}" in interestGroup)`;
// Prefer to use `interestGroupOverrides.owner` if present. Treat it as a URL
// and then convert it to an origin because one test passes in a URL.
let origin = location.origin;
if (interestGroupOverrides.owner)
origin = new URL(interestGroupOverrides.owner).origin;
interestGroupOverrides.biddingLogicURL =
createBiddingScriptURL(
{ origin: origin,
generateBid:
`// Delete deprecated "renderUrl" fields from ads and adComponents, if
// present.
for (let field in interestGroup) {
if (field === "ads" || field === "adComponents") {
for (let i = 0; i < interestGroup[field].length; ++i) {
let ad = interestGroup[field][i];
delete ad.renderUrl;
}
}
}
if (!${comparison})
throw "Unexpected value: " + JSON.stringify(interestGroup["${fieldName}"]);`
});
if (origin !== location.origin) {
await joinCrossOriginInterestGroup(test, uuid, origin, interestGroupOverrides);
} else {
await joinInterestGroup(test, uuid, interestGroupOverrides);
}
await runBasicFledgeTestExpectingWinner(test, uuid, {interestGroupBuyers: [origin]});
}, name);
};
makeTest({
name: 'InterestGroup.owner.',
fieldName: 'owner',
fieldValue: OTHER_ORIGIN1
});
makeTest({
name: 'InterestGroup.owner with non-normalized origin.',
fieldName: 'owner',
fieldValue: OTHER_ORIGIN1,
interestGroupOverrides: {owner: ` ${OTHER_ORIGIN1.toUpperCase()} `}
});
makeTest({
name: 'InterestGroup.owner is URL.',
fieldName: 'owner',
fieldValue: OTHER_ORIGIN1,
interestGroupOverrides: {owner: OTHER_ORIGIN1 + '/Foopy'}
});
makeTest({
name: 'InterestGroup.name.',
fieldName: 'name',
fieldValue: 'Jim'
});
makeTest({
name: 'InterestGroup.name with unicode characters.',
fieldName: 'name',
fieldValue: '\u2665'
});
makeTest({
name: 'InterestGroup.name with empty name.',
fieldName: 'name',
fieldValue: ''
});
makeTest({
name: 'InterestGroup.name with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
fieldName: 'name',
fieldValue: '\uFFFD,\uFFFD',
interestGroupOverrides: {name: '\uD800,\uDBF0'}
});
// Since "biddingLogicURL" contains the script itself inline, can't include the entire URL
// in the script for an equality check. Instead, replace the "generateBid" query parameter
// in the URL with an empty value before comparing it. This doesn't just delete the entire
// query parameter to make sure that's correctly passed in.
subsetTest(promise_test,async test => {
const uuid = generateUuid(test);
let biddingScriptBaseURL = createBiddingScriptURL({origin: OTHER_ORIGIN1, generateBid: ''});
let biddingLogicURL = createBiddingScriptURL(
{ origin: OTHER_ORIGIN1,
generateBid:
`let biddingScriptBaseURL =
interestGroup.biddingLogicURL.replace(/generateBid=[^&]*/, "generateBid=");
if (biddingScriptBaseURL !== "${biddingScriptBaseURL}")
throw "Wrong bidding script URL: " + interestGroup.biddingLogicURL`
});
await joinCrossOriginInterestGroup(test, uuid, OTHER_ORIGIN1,
{ biddingLogicURL: biddingLogicURL });
await runBasicFledgeTestExpectingWinner(test, uuid, {interestGroupBuyers: [OTHER_ORIGIN1]});
}, 'InterestGroup.biddingLogicURL.');
// Much like above test, but use a relative URL that points to bidding script.
subsetTest(promise_test,async test => {
const uuid = generateUuid(test);
let biddingScriptBaseURL = createBiddingScriptURL({generateBid: ''});
let biddingLogicURL = createBiddingScriptURL(
{ generateBid:
`let biddingScriptBaseURL =
interestGroup.biddingLogicURL.replace(/generateBid=[^&]*/, "generateBid=");
if (biddingScriptBaseURL !== "${biddingScriptBaseURL}")
throw "Wrong bidding script URL: " + interestGroup.biddingLogicURL`
});
biddingLogicURL = biddingLogicURL.replace(BASE_URL, 'foo/../');
await joinInterestGroup(test, uuid, { biddingLogicURL: biddingLogicURL });
await runBasicFledgeTestExpectingWinner(test, uuid);
}, 'InterestGroup.biddingLogicURL with relative URL.');
makeTest({
name: 'InterestGroup.lifetimeMs should not be passed in.',
fieldName: 'lifetimeMs',
fieldValue: undefined,
interestGroupOverrides: { lifetimeMs: "120000" }
});
makeTest({
name: 'InterestGroup.priority should not be passed in, since it can be changed by auctions.',
fieldName: 'priority',
fieldValue: undefined,
interestGroupOverrides: { priority: 500 }
});
makeTest({
name: 'InterestGroup.priorityVector undefined.',
fieldName: 'priorityVector',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.priorityVector empty.',
fieldName: 'priorityVector',
fieldValue: {}
});
makeTest({
name: 'InterestGroup.priorityVector.',
fieldName: 'priorityVector',
fieldValue: { 'a': -1, 'b': 2 }
});
// TODO: This is currently using USVString internally, so doesn't allow unpaired
// surrogates, but the spec says it should.
makeTest({
name: 'InterestGroup.priorityVector with unpaired surrogate character.',
fieldName: 'priorityVector',
fieldValue: { '\uFFFD': -1 },
interestGroupOverrides: { prioritySignalsOverrides: { '\uD800': -1 } }
});
makeTest({
name: 'InterestGroup.prioritySignalsOverrides should not be passed in, since it can be changed by auctions.',
fieldName: 'prioritySignalsOverrides',
fieldValue: undefined,
interestGroupOverrides: { prioritySignalsOverrides: { 'a': 1, 'b': 2 } }
});
makeTest({
name: 'InterestGroup.enableBiddingSignalsPrioritization not set.',
fieldName: 'enableBiddingSignalsPrioritization',
fieldValue: false,
interestGroupOverrides: { enableBiddingSignalsPrioritization: undefined }
});
makeTest({
name: 'InterestGroup.enableBiddingSignalsPrioritization unrecognized.',
fieldName: 'enableBiddingSignalsPrioritization',
// Non-empty strings are treated as true by Javascript. This test is serves
// to make sure that the 'foo' isn't preserved.
fieldValue: true,
interestGroupOverrides: { enableBiddingSignalsPrioritization: 'foo' }
});
makeTest({
name: 'InterestGroup.enableBiddingSignalsPrioritization false.',
fieldName: 'enableBiddingSignalsPrioritization',
fieldValue: false
});
makeTest({
name: 'InterestGroup.enableBiddingSignalsPrioritization true.',
fieldName: 'enableBiddingSignalsPrioritization',
fieldValue: true
});
makeTest({
name: 'InterestGroup.biddingWasmHelperURL not set.',
fieldName: 'biddingWasmHelperURL',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.biddingWasmHelperURL.',
fieldName: 'biddingWasmHelperURL',
fieldValue: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py`,
interestGroupOverrides: {owner: OTHER_ORIGIN1}
});
makeTest({
name: 'InterestGroup.biddingWasmHelperURL with non-normalized value.',
fieldName: 'biddingWasmHelperURL',
fieldValue: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py`,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
biddingWasmHelperURL:
`${OTHER_ORIGIN1.toUpperCase()}${RESOURCE_PATH}wasm-helper.py`
}
});
makeTest({
name: 'InterestGroup.biddingWasmHelperURL with relative URL.',
fieldName: 'biddingWasmHelperURL',
fieldValue: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py`,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
biddingWasmHelperURL: 'foo/../resources/wasm-helper.py'
}
});
makeTest({
name: 'InterestGroup.biddingWasmHelperURL with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
fieldName: 'biddingWasmHelperURL',
fieldValue: (new URL(`${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py?\uFFFD.\uFFFD`)).href,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
biddingWasmHelperURL: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py?\uD800.\uDBF0`
}
});
makeTest({
name: 'InterestGroup.updateURL not set.',
fieldName: 'updateURL',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.updateURL.',
fieldName: 'updateURL',
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
interestGroupOverrides: {owner: OTHER_ORIGIN1}
});
makeTest({
name: 'InterestGroup.updateURL with non-normalized value.',
fieldName: 'updateURL',
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
updateURL: `${OTHER_ORIGIN1.toUpperCase()}${BASE_PATH}This-File-Does-Not-Exist.json`
}
});
makeTest({
name: 'InterestGroup.updateURL with relative URL.',
fieldName: 'updateURL',
fieldValue: (new URL(`${OTHER_ORIGIN1}${BASE_PATH}../This-File-Does-Not-Exist.json`)).href,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
updateURL: '../This-File-Does-Not-Exist.json'
}
});
makeTest({
name: 'InterestGroup.updateURL with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
fieldName: 'updateURL',
fieldValue: (new URL(`${BASE_URL}\uFFFD.\uFFFD`)).href,
interestGroupOverrides: {
updateURL: `${BASE_URL}\uD800.\uDBF0`
}
});
makeTest({
name: 'InterestGroup.executionMode not present.',
fieldName: 'executionMode',
fieldValue: 'compatibility',
interestGroupOverrides: { executionMode: undefined }
});
makeTest({
name: 'InterestGroup.executionMode compatibility.',
fieldName: 'executionMode',
fieldValue: 'compatibility'
});
makeTest({
name: 'InterestGroup.executionMode frozen-context.',
fieldName: 'executionMode',
fieldValue: 'frozen-context'
});
makeTest({
name: 'InterestGroup.executionMode group-by-origin.',
fieldName: 'executionMode',
fieldValue: 'group-by-origin'
});
makeTest({
name: 'InterestGroup.executionMode has non-standard string.',
fieldName: 'executionMode',
fieldValue: 'compatibility',
interestGroupOverrides: { executionMode: 'foo' }
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsURL not set.',
fieldName: 'trustedBiddingSignalsURL',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsURL.',
fieldName: 'trustedBiddingSignalsURL',
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
interestGroupOverrides: {owner: OTHER_ORIGIN1}
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsURL with non-normalized value.',
fieldName: 'trustedBiddingSignalsURL',
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
trustedBiddingSignalsURL:
`${OTHER_ORIGIN1.toUpperCase()}${BASE_PATH}This-File-Does-Not-Exist.json`
}
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsURL with relative URL.',
fieldName: 'trustedBiddingSignalsURL',
fieldValue: (new URL(`${OTHER_ORIGIN1}${BASE_PATH}../This-File-Does-Not-Exist.json`)).href,
interestGroupOverrides: {
owner: OTHER_ORIGIN1,
trustedBiddingSignalsURL: '../This-File-Does-Not-Exist.json'
}
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsURL with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
fieldName: 'trustedBiddingSignalsURL',
fieldValue: (new URL(`${BASE_URL}\uFFFD.\uFFFD`)).href,
interestGroupOverrides: {
trustedBiddingSignalsURL: `${BASE_URL}\uD800.\uDBF0`
}
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsKeys not set.',
fieldName: 'trustedBiddingSignalsKeys',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsKeys.',
fieldName: 'trustedBiddingSignalsKeys',
fieldValue: ['a', ' b ', 'c', '1', '%20', '3', '\u2665']
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsKeys with non-normalized values.',
fieldName: 'trustedBiddingSignalsKeys',
fieldValue: ['1', '2', '3'],
interestGroupOverrides: { trustedBiddingSignalsKeys: [1, 0x2, '3'] }
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsKeys unpaired surrogate characters, which should be replaced with "\\uFFFD".',
fieldName: 'trustedBiddingSignalsKeys',
fieldValue: ['\uFFFD', '\uFFFD', '\uFFFD.\uFFFD'],
interestGroupOverrides: { trustedBiddingSignalsKeys: ['\uD800', '\uDBF0', '\uD800.\uDBF0'] }
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode empty.',
fieldName: 'trustedBiddingSignalsSlotSizeMode',
fieldValue: 'none',
interestGroupOverrides: { trustedBiddingSignalsSlotSizeMode: undefined }
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode none.',
fieldName: 'trustedBiddingSignalsSlotSizeMode',
fieldValue: 'none'
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode slot-size.',
fieldName: 'trustedBiddingSignalsSlotSizeMode',
fieldValue: 'slot-size'
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode all-slots-requested-sizes.',
fieldName: 'trustedBiddingSignalsSlotSizeMode',
fieldValue: 'all-slots-requested-sizes'
});
makeTest({
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode unrecognized value.',
fieldName: 'trustedBiddingSignalsSlotSizeMode',
fieldValue: 'none',
interestGroupOverrides: { trustedBiddingSignalsSlotSizeMode: 'unrecognized value' }
});
makeTest({
name: 'InterestGroup.userBiddingSignals not set.',
fieldName: 'userBiddingSignals',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.userBiddingSignals is integer.',
fieldName: 'userBiddingSignals',
fieldValue: 15
});
makeTest({
name: 'InterestGroup.userBiddingSignals is array.',
fieldName: 'userBiddingSignals',
fieldValue: [1, {a: 'b'}, 'c']
});
makeTest({
name: 'InterestGroup.userBiddingSignals is object.',
fieldName: 'userBiddingSignals',
fieldValue: {a:1, b:32.5, c:['d', 'e']}
});
makeTest({
name: 'InterestGroup.userBiddingSignals unpaired surrogate characters, which should be kept as-is.',
fieldName: 'userBiddingSignals',
fieldValue: '\uD800.\uDBF0'
});
makeTest({
name: 'InterestGroup.userBiddingSignals unpaired surrogate characters in an object, which should be kept as-is.',
fieldName: 'userBiddingSignals',
fieldValue: {'\uD800': '\uDBF0', '\uDBF0':['\uD800']}
});
makeTest({
name: 'InterestGroup.nonStandardField.',
fieldName: 'nonStandardField',
fieldValue: undefined,
interestGroupOverrides: {nonStandardField: 'This value should not be passed to worklets'}
});
// Note that all ad tests have a deprecated "renderUrl" field passed to generateBid.
// Ad URLs need the right UUID for seller scripts to accept their bids. Since UUID changes
// for each test, and is not available outside makeTest(), have to use string that will
// be replaced with the real UUID.
const AD1_URL = createRenderURL('REPLACE_WITH_UUID', /*script=*/';');
const AD2_URL = createRenderURL('REPLACE_WITH_UUID', /*script=*/';;');
makeTest({
name: 'InterestGroup.ads with one ad.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL}]
});
makeTest({
name: 'InterestGroup.ads one ad with metadata object.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL, metadata: {foo: 1, bar: [2, 3], baz: '4'}}]
});
makeTest({
name: 'InterestGroup.ads one ad with metadata string.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL, metadata: 'foo'}]
});
makeTest({
name: 'InterestGroup.ads one ad with null metadata.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL, metadata: null}]
});
makeTest({
name: 'InterestGroup.ads one ad with adRenderId. This field should not be passed to generateBid.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {ads: [{renderURL: AD1_URL, adRenderId: 'twelve chars'}]}
});
makeTest({
name: 'InterestGroup.ads one ad with buyerAndSellerReportingId. This field should not be passed to generateBid.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {ads: [{renderURL: AD1_URL,
buyerAndSellerReportingId: 'Arbitrary text'}]}
});
makeTest({
name: 'InterestGroup.ads one ad with buyerReportingId. This field should not be passed to generateBid.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {ads: [{renderURL: AD1_URL,
buyerReportingId: 'Arbitrary text'}]}
});
makeTest({
name: 'InterestGroup.ads one ad with novel field. This field should not be passed to generateBid.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {ads: [{renderURL: AD1_URL, novelField: 'Foo'}]}
});
makeTest({
name: 'InterestGroup.ads with multiple ads.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL, metadata: 1},
{renderURL: AD2_URL, metadata: [2]}],
interestGroupOverrides: {ads: [{renderURL: AD1_URL, metadata: 1},
{renderURL: AD2_URL, metadata: [2]}]}
});
// This should probably be an error. This WPT test serves to encourage there to be a
// new join-leave WPT test when that is fixed.
makeTest({
name: 'InterestGroup.ads duplicate ad.',
fieldName: 'ads',
fieldValue: [{renderURL: AD1_URL}, {renderURL: AD1_URL}],
interestGroupOverrides: {ads: [{renderURL: AD1_URL}, {renderURL: AD1_URL}]}
});
makeTest({
name: 'InterestGroup.adComponents is undefined.',
fieldName: 'adComponents',
fieldValue: undefined
});
// This one is likely a bug.
makeTest({
name: 'InterestGroup.adComponents is empty array.',
fieldName: 'adComponents',
fieldValue: undefined,
interestGroupOverrides: {adComponents: []}
});
makeTest({
name: 'InterestGroup.adComponents with one ad.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL}]
});
makeTest({
name: 'InterestGroup.adComponents one ad with metadata object.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL, metadata: {foo: 1, bar: [2, 3], baz: '4'}}]
});
makeTest({
name: 'InterestGroup.adComponents one ad with metadata string.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL, metadata: 'foo'}]
});
makeTest({
name: 'InterestGroup.adComponents one ad with null metadata.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL, metadata: null}]
});
makeTest({
name: 'InterestGroup.adComponents one ad with adRenderId. This field should not be passed to generateBid.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
adRenderId: 'twelve chars'}]}
});
makeTest({
name: 'InterestGroup.adComponents one ad with buyerAndSellerReportingId. This field should not be passed to generateBid.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
buyerAndSellerReportingId: 'Arbitrary text'}]}
});
makeTest({
name: 'InterestGroup.adComponents one ad with buyerReportingId. This field should not be passed to generateBid.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
buyerReportingId: 'Arbitrary text'}]}
});
makeTest({
name: 'InterestGroup.adComponents one ad with novel field. This field should not be passed to generateBid.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL}],
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
novelField: 'Foo'}]}
});
makeTest({
name: 'InterestGroup.adComponents with multiple ads.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL, metadata: 1}, {renderURL: AD2_URL, metadata: [2]}]
});
makeTest({
name: 'InterestGroup.auctionServerRequestFlags is undefined',
fieldName: 'auctionServerRequestFlags',
fieldValue: undefined
});
makeTest({
name: 'InterestGroup.auctionServerRequestFlags is "omit-ads".',
fieldName: 'auctionServerRequestFlags',
fieldValue: undefined,
interestGroupOverrides: {auctionServerRequestFlags: ['omit-ads']}
});
makeTest({
name: 'InterestGroup.auctionServerRequestFlags is "include-full-ads".',
fieldName: 'auctionServerRequestFlags',
fieldValue: undefined,
interestGroupOverrides: {auctionServerRequestFlags: ['include-full-ads']}
});
makeTest({
name: 'InterestGroup.auctionServerRequestFlags has multiple values.',
fieldName: 'auctionServerRequestFlags',
fieldValue: undefined,
interestGroupOverrides: {auctionServerRequestFlags: ['omit-ads', 'include-full-ads']}
});
makeTest({
name: 'InterestGroup.auctionServerRequestFlags.',
fieldName: 'auctionServerRequestFlags',
fieldValue: undefined,
interestGroupOverrides: {auctionServerRequestFlags: ['noval value']}
});
// This should probably be an error. This WPT test serves to encourage there to be a
// new join-leave WPT test when that is fixed.
makeTest({
name: 'InterestGroup.adComponents duplicate ad.',
fieldName: 'adComponents',
fieldValue: [{renderURL: AD1_URL}, {renderURL: AD1_URL}],
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL}, {renderURL: AD1_URL}]}
});