From 6f746e69ff0f59b46f7dfc1dcfffb4c5c1e3b08a Mon Sep 17 00:00:00 2001 From: youssef Date: Wed, 13 Aug 2025 03:12:27 +0100 Subject: [PATCH 1/8] Missena: Update adapter parameters - Rename TestMode to Sample for better clarity - Add APIKey field to UserParams struct --- adapters/missena/missena.go | 6 ++++-- openrtb_ext/imp_missena.go | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/adapters/missena/missena.go b/adapters/missena/missena.go index 1519cb4180e..adb18076699 100644 --- a/adapters/missena/missena.go +++ b/adapters/missena/missena.go @@ -50,9 +50,10 @@ type BidServerResponse struct { } type UserParams struct { + APIKey string `json:"apiKey,omitempty"` Formats []string `json:"formats,omitempty"` Placement string `json:"placement,omitempty" default:"sticky"` - TestMode string `json:"test,omitempty"` + Sample string `json:"sample,omitempty"` Settings map[string]any `json:"settings,omitempty"` } @@ -162,9 +163,10 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re SChain: schain, Timeout: request.TMax, UserParams: UserParams{ + APIKey: params.APIKey, Formats: params.Formats, Placement: params.Placement, - TestMode: params.TestMode, + Sample: params.Sample, Settings: params.Settings, }, Version: version.Ver, diff --git a/openrtb_ext/imp_missena.go b/openrtb_ext/imp_missena.go index 6884209b7fe..ac4a7223418 100644 --- a/openrtb_ext/imp_missena.go +++ b/openrtb_ext/imp_missena.go @@ -4,6 +4,6 @@ type ExtImpMissena struct { APIKey string `json:"apiKey"` Formats []string `json:"formats"` Placement string `json:"placement"` - TestMode string `json:"test"` + Sample string `json:"sample"` Settings map[string]any `json:"settings,omitempty"` } From 306957fb58d871195805cdd0b5fd8f6dc73df742 Mon Sep 17 00:00:00 2001 From: youssef Date: Wed, 1 Oct 2025 14:56:44 +0100 Subject: [PATCH 2/8] Missena: Introduce versioning and update example configurations --- .claude/settings.local.json | 8 ++++++++ adapters/missena/missena.go | 9 ++++++++- .../missenatest/exemplary/bid-floor-currency.json | 2 ++ .../missena/missenatest/exemplary/multiple-imps.json | 7 ++++--- .../missenatest/exemplary/simple-banner-ipv6.json | 7 ++++--- .../missena/missenatest/exemplary/simple-banner.json | 4 +++- .../missenatest/exemplary/valid-imp-error-imp.json | 7 ++++--- .../missena/missenatest/supplemental/status-204.json | 7 ++++--- .../missena/missenatest/supplemental/status-400.json | 4 +++- .../missena/missenatest/supplemental/status-not-200.json | 7 ++++--- 10 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000000..05724086d7e --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(go test:*)" + ], + "deny": [] + } +} \ No newline at end of file diff --git a/adapters/missena/missena.go b/adapters/missena/missena.go index adb18076699..2b4b3a84d33 100644 --- a/adapters/missena/missena.go +++ b/adapters/missena/missena.go @@ -75,6 +75,13 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server co return bidder, nil } +func getVersionString() string { + if version.Ver == "" { + return version.VerUnknown + } + return version.Ver +} + func getCurrency(currencies []string) (string, error) { eurAvailable := false for _, cur := range currencies { @@ -169,7 +176,7 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re Sample: params.Sample, Settings: params.Settings, }, - Version: version.Ver, + Version: fmt.Sprintf("prebid-server@%s", getVersionString()), } body, err := jsonutil.Marshal(missenaRequest) diff --git a/adapters/missena/missenatest/exemplary/bid-floor-currency.json b/adapters/missena/missenatest/exemplary/bid-floor-currency.json index d7c610804b7..72907d535c0 100644 --- a/adapters/missena/missenatest/exemplary/bid-floor-currency.json +++ b/adapters/missena/missenatest/exemplary/bid-floor-currency.json @@ -56,7 +56,9 @@ "referer_canonical": "publisher.com", "request_id": "test-request-id", "timeout": 500, + "version": "prebid-server@unknown", "params": { + "apiKey": "test-api-key", "formats": ["banner"], "placement": "sticky" } diff --git a/adapters/missena/missenatest/exemplary/multiple-imps.json b/adapters/missena/missenatest/exemplary/multiple-imps.json index 285cda26138..5169497f03d 100644 --- a/adapters/missena/missenatest/exemplary/multiple-imps.json +++ b/adapters/missena/missenatest/exemplary/multiple-imps.json @@ -82,13 +82,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { - "placement": "test-placement-1", - "test": "1" + "apiKey": "test-api-key", + "placement": "test-placement-1" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id-1"] }, diff --git a/adapters/missena/missenatest/exemplary/simple-banner-ipv6.json b/adapters/missena/missenatest/exemplary/simple-banner-ipv6.json index edd3197c45f..9110244652d 100644 --- a/adapters/missena/missenatest/exemplary/simple-banner-ipv6.json +++ b/adapters/missena/missenatest/exemplary/simple-banner-ipv6.json @@ -58,13 +58,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { - "placement": "test-placement", - "test": "1" + "apiKey": "test-api-key", + "placement": "test-placement" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id"] }, diff --git a/adapters/missena/missenatest/exemplary/simple-banner.json b/adapters/missena/missenatest/exemplary/simple-banner.json index f995b4634a0..8c87f8d0db2 100644 --- a/adapters/missena/missenatest/exemplary/simple-banner.json +++ b/adapters/missena/missenatest/exemplary/simple-banner.json @@ -57,12 +57,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { + "apiKey": "test-api-key", "placement": "test-placement" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id"] }, diff --git a/adapters/missena/missenatest/exemplary/valid-imp-error-imp.json b/adapters/missena/missenatest/exemplary/valid-imp-error-imp.json index 285cda26138..5169497f03d 100644 --- a/adapters/missena/missenatest/exemplary/valid-imp-error-imp.json +++ b/adapters/missena/missenatest/exemplary/valid-imp-error-imp.json @@ -82,13 +82,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { - "placement": "test-placement-1", - "test": "1" + "apiKey": "test-api-key", + "placement": "test-placement-1" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id-1"] }, diff --git a/adapters/missena/missenatest/supplemental/status-204.json b/adapters/missena/missenatest/supplemental/status-204.json index 469abdf618f..fd5b2de433e 100644 --- a/adapters/missena/missenatest/supplemental/status-204.json +++ b/adapters/missena/missenatest/supplemental/status-204.json @@ -58,13 +58,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { - "placement": "test-placement", - "test": "1" + "apiKey": "test-api-key", + "placement": "test-placement" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id"] }, diff --git a/adapters/missena/missenatest/supplemental/status-400.json b/adapters/missena/missenatest/supplemental/status-400.json index b6fbda5924c..64032f8059a 100644 --- a/adapters/missena/missenatest/supplemental/status-400.json +++ b/adapters/missena/missenatest/supplemental/status-400.json @@ -57,12 +57,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { + "apiKey": "test-api-key", "placement": "test-placement" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id"] }, diff --git a/adapters/missena/missenatest/supplemental/status-not-200.json b/adapters/missena/missenatest/supplemental/status-not-200.json index afa2a7f94b9..417fe4141dc 100644 --- a/adapters/missena/missenatest/supplemental/status-not-200.json +++ b/adapters/missena/missenatest/supplemental/status-not-200.json @@ -58,13 +58,14 @@ "currency": "EUR", "ik": "test-request-id", "params": { - "placement": "test-placement", - "test": "1" + "apiKey": "test-api-key", + "placement": "test-placement" }, "referer": "https://example.com/page", "referer_canonical": "example.com", "request_id": "test-request-id", - "timeout": 500 + "timeout": 500, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id"] }, From cf997ab42e612cc6b357757c9a656bdbc968fd08 Mon Sep 17 00:00:00 2001 From: youssef Date: Wed, 1 Oct 2025 15:03:26 +0100 Subject: [PATCH 3/8] Update bid-floor-currency.json to include apiKey and version fields --- .../missena/missenatest/exemplary/bid-floor-currency.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/adapters/missena/missenatest/exemplary/bid-floor-currency.json b/adapters/missena/missenatest/exemplary/bid-floor-currency.json index 940a2451d88..a2601c35bfc 100644 --- a/adapters/missena/missenatest/exemplary/bid-floor-currency.json +++ b/adapters/missena/missenatest/exemplary/bid-floor-currency.json @@ -88,9 +88,11 @@ "request_id": "test-request-id", "timeout": 500, "params": { + "apiKey": "test-api-key", "formats": ["banner"], "placement": "sticky" - } + }, + "version": "prebid-server@unknown" }, "impIDs": ["test-imp-id"] }, From 7a9e08816204bd86a10d2f2a9c56318a257d9981 Mon Sep 17 00:00:00 2001 From: youssef Date: Wed, 1 Oct 2025 15:05:27 +0100 Subject: [PATCH 4/8] Remove unnecessary files --- .claude/settings.local.json | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index 05724086d7e..00000000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(go test:*)" - ], - "deny": [] - } -} \ No newline at end of file From b993ce7dec87638c27b4993963a98e554c0aa3ca Mon Sep 17 00:00:00 2001 From: youssef Date: Tue, 28 Oct 2025 16:52:04 +0100 Subject: [PATCH 5/8] Missena: Add Debug flag and EIDs handling to ad request --- adapters/missena/missena.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/adapters/missena/missena.go b/adapters/missena/missena.go index c0c0ed2c279..4600922ca0d 100644 --- a/adapters/missena/missena.go +++ b/adapters/missena/missena.go @@ -24,6 +24,7 @@ type MissenaAdRequest struct { Adunit string `json:"adunit,omitempty"` BuyerUID string `json:"buyeruid,omitempty"` Currency string `json:"currency,omitempty"` + Debug bool `json:"debug,omitempty"` EIDs []openrtb2.EID `json:"userEids,omitempty"` Floor float64 `json:"floor,omitempty"` FloorCurrency string `json:"floor_currency,omitempty"` @@ -122,9 +123,18 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re } } + var eids []openrtb2.EID + if request.User != nil && request.User.Ext != nil { + var extUser openrtb_ext.ExtUser + if err := jsonutil.Unmarshal(request.User.Ext, &extUser); err == nil { + eids = extUser.Eids + } + } + missenaRequest := MissenaAdRequest{ Adunit: imp.ID, Currency: cur, + Debug: request.Test == 1, Floor: floor, FloorCurrency: floorCur, IdempotencyKey: request.ID, @@ -138,6 +148,7 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re Sample: params.Sample, Settings: params.Settings, }, + EIDs: eids, Version: fmt.Sprintf("prebid-server@%s", getVersionString()), } From e858fe1a5f2abf7c0742d4ae832b4702ff9c977b Mon Sep 17 00:00:00 2001 From: youssef Date: Mon, 12 Jan 2026 19:44:20 +0100 Subject: [PATCH 6/8] Missena: Add test coverage for sample field and update schema - Add JSON test file for sample field in exemplary tests - Update missena.json schema to rename test to sample - Update params_test.go to use sample instead of test --- .../exemplary/simple-banner-with-sample.json | 137 ++++++++++++++++++ adapters/missena/params_test.go | 6 +- static/bidder-params/missena.json | 4 +- 3 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 adapters/missena/missenatest/exemplary/simple-banner-with-sample.json diff --git a/adapters/missena/missenatest/exemplary/simple-banner-with-sample.json b/adapters/missena/missenatest/exemplary/simple-banner-with-sample.json new file mode 100644 index 00000000000..4406bf98b21 --- /dev/null +++ b/adapters/missena/missenatest/exemplary/simple-banner-with-sample.json @@ -0,0 +1,137 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "tmax": 500, + "at": 1, + "cur": ["EUR"], + "regs": { + "ext": { + "gdpr": 1 + } + }, + "user": { + "ext": { + "consent": "CO-X2XiO_eyUoAsAxBFRBECsA" + } + }, + "device": { + "ip": "123.123.123.123", + "ua": "test-user-agent" + }, + "site": { + "page": "https://example.com/page", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "h": 50, + "w": 320 + }, + "ext": { + "bidder": { + "apiKey": "test-api-key", + "placement": "test-placement", + "sample": "test-sample-value" + } + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://example.com/?t=test-api-key", + "headers": { + "Content-Type": ["application/json;charset=utf-8"], + "Accept": ["application/json"], + "User-Agent": ["test-user-agent"], + "X-Forwarded-For": ["123.123.123.123"], + "Referer": ["https://example.com/page"], + "Origin": ["https://example.com"] + }, + "body": { + "adunit": "test-imp-id", + "currency": "EUR", + "ik": "test-request-id", + "ortb2": { + "at": 1, + "cur": ["EUR"], + "device": { + "ip": "123.123.123.123", + "ua": "test-user-agent" + }, + "id": "test-request-id", + "imp": [ + { + "banner": { + "h": 50, + "w": 320 + }, + "ext": { + "bidder": { + "apiKey": "test-api-key", + "placement": "test-placement", + "sample": "test-sample-value" + } + }, + "id": "test-imp-id" + } + ], + "regs": { + "ext": { + "gdpr": 1 + } + }, + "site": { + "domain": "example.com", + "page": "https://example.com/page" + }, + "tmax": 500, + "user": { + "ext": { + "consent": "CO-X2XiO_eyUoAsAxBFRBECsA" + } + } + }, + "params": { + "apiKey": "test-api-key", + "placement": "test-placement", + "sample": "test-sample-value" + }, + "request_id": "test-request-id", + "timeout": 500, + "version": "prebid-server@unknown" + }, + "impIDs": ["test-imp-id"] + }, + "mockResponse": { + "status": 200, + "body": { + "ad": "
test ad
", + "cpm": 1.5, + "currency": "EUR", + "requestId": "test-request-id" + } + } + } + ], + "expectedBidResponses": [ + { + "currency": "EUR", + "bids": [ + { + "bid": { + "id": "test-request-id", + "impid": "test-imp-id", + "price": 1.5, + "adm": "
test ad
", + "crid": "test-request-id" + }, + "type": "banner" + } + ] + } + ] +} diff --git a/adapters/missena/params_test.go b/adapters/missena/params_test.go index 393561b43cf..91eca91f929 100644 --- a/adapters/missena/params_test.go +++ b/adapters/missena/params_test.go @@ -36,7 +36,7 @@ func TestInvalidParams(t *testing.T) { var validParams = []string{ `{"apiKey": "PA-123456"}`, `{"apiKey": "PA-123456", "placement": "sticky"}`, - `{"apiKey": "PA-123456", "test": "native"}`, + `{"apiKey": "PA-123456", "sample": "test-sample"}`, } var invalidParams = []string{ @@ -45,6 +45,6 @@ var invalidParams = []string{ `{"placement": 111}`, `{"placement": "sticky"}`, `{"apiKey": "PA-123456", "placement": 111}`, - `{"test": "native"}`, - `{"apiKey": "PA-123456", "test": 111}`, + `{"sample": "test-sample"}`, + `{"apiKey": "PA-123456", "sample": 111}`, } diff --git a/static/bidder-params/missena.json b/static/bidder-params/missena.json index f06b9cf4666..9e17a07f085 100644 --- a/static/bidder-params/missena.json +++ b/static/bidder-params/missena.json @@ -13,9 +13,9 @@ "type": "string", "description": "Placement Type (Sticky, Header, ...)" }, - "test": { + "sample": { "type": "string", - "description": "Test Mode" + "description": "Sample" }, "formats": { "type": "array", From 4923ce6f2f5896fbc7546492c5171322e660ff3a Mon Sep 17 00:00:00 2001 From: youssef Date: Mon, 12 Jan 2026 19:53:39 +0100 Subject: [PATCH 7/8] Missena: Address PR review feedback - Remove unused MissenaAdapter struct (duplicate of adapter) - Fix comment: "Foo adapter" -> "Missena adapter" - Replace hardcoded currency strings with constants (currencyUSD, currencyEUR) --- adapters/missena/missena.go | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/adapters/missena/missena.go b/adapters/missena/missena.go index 4600922ca0d..ca93801293b 100644 --- a/adapters/missena/missena.go +++ b/adapters/missena/missena.go @@ -51,13 +51,12 @@ type UserParams struct { Settings map[string]any `json:"settings,omitempty"` } -type MissenaAdapter struct { - EndpointTemplate *template.Template -} - -var defaultCur = "USD" +const ( + currencyUSD = "USD" + currencyEUR = "EUR" +) -// Builder builds a new instance of the Foo adapter for the given bidder with the given config. +// Builder builds a new instance of the Missena adapter for the given bidder with the given config. func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) { endpoint, err := template.New("endpointTemplate").Parse(config.Endpoint) if err != nil { @@ -79,15 +78,15 @@ func getVersionString() string { func getCurrency(currencies []string) (string, error) { eurAvailable := false for _, cur := range currencies { - if cur == defaultCur { - return defaultCur, nil + if cur == currencyUSD { + return currencyUSD, nil } - if cur == "EUR" { + if cur == currencyEUR { eurAvailable = true } } if eurAvailable { - return "EUR", nil + return currencyEUR, nil } return "", fmt.Errorf("no currency supported %v", currencies) } @@ -106,7 +105,7 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re } cur, err := getCurrency(request.Cur) if err != nil { - cur = defaultCur + cur = currencyUSD } var floor float64 @@ -115,7 +114,7 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re floor = imp.BidFloor floorCur, err = getCurrency(request.Cur) if err != nil { - floorCur = defaultCur + floorCur = currencyUSD floor, err = requestInfo.ConvertCurrency(imp.BidFloor, imp.BidFloorCur, floorCur) if err != nil { return nil, err From 3386c6ac2d8a0db442e18d213c955c737c4327d8 Mon Sep 17 00:00:00 2001 From: youssef Date: Tue, 20 Jan 2026 09:13:16 +0100 Subject: [PATCH 8/8] Add EIDs extraction to Missena adapter and include exemplary test case --- adapters/missena/missena.go | 2 + .../exemplary/simple-banner-with-eids.json | 194 ++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 adapters/missena/missenatest/exemplary/simple-banner-with-eids.json diff --git a/adapters/missena/missena.go b/adapters/missena/missena.go index ca93801293b..ae51ec62740 100644 --- a/adapters/missena/missena.go +++ b/adapters/missena/missena.go @@ -122,6 +122,8 @@ func (a *adapter) makeRequest(imp openrtb2.Imp, request *openrtb2.BidRequest, re } } + // Extract EIDs from user.ext. Unmarshal errors are intentionally ignored + // to allow requests to proceed without EIDs, as they are optional. var eids []openrtb2.EID if request.User != nil && request.User.Ext != nil { var extUser openrtb_ext.ExtUser diff --git a/adapters/missena/missenatest/exemplary/simple-banner-with-eids.json b/adapters/missena/missenatest/exemplary/simple-banner-with-eids.json new file mode 100644 index 00000000000..ef3495317fe --- /dev/null +++ b/adapters/missena/missenatest/exemplary/simple-banner-with-eids.json @@ -0,0 +1,194 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "tmax": 500, + "at": 1, + "cur": ["EUR"], + "regs": { + "ext": { + "gdpr": 1 + } + }, + "user": { + "ext": { + "consent": "CO-X2XiO_eyUoAsAxBFRBECsA", + "eids": [ + { + "source": "adserver.org", + "uids": [ + { + "id": "111111111111", + "atype": 1 + } + ] + }, + { + "source": "liveramp.com", + "uids": [ + { + "id": "AjfowMv4ZHZQME1RWTn", + "atype": 3 + } + ] + } + ] + } + }, + "device": { + "ip": "123.123.123.123", + "ua": "test-user-agent" + }, + "site": { + "page": "https://example.com/page", + "domain": "example.com" + }, + "imp": [ + { + "id": "test-imp-id", + "banner": { + "h": 50, + "w": 320 + }, + "ext": { + "bidder": { + "apiKey": "test-api-key", + "placement": "test-placement" + } + } + } + ] + }, + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://example.com/?t=test-api-key", + "headers": { + "Content-Type": ["application/json;charset=utf-8"], + "Accept": ["application/json"], + "User-Agent": ["test-user-agent"], + "X-Forwarded-For": ["123.123.123.123"], + "Referer": ["https://example.com/page"], + "Origin": ["https://example.com"] + }, + "body": { + "adunit": "test-imp-id", + "currency": "EUR", + "ik": "test-request-id", + "ortb2": { + "at": 1, + "cur": ["EUR"], + "device": { + "ip": "123.123.123.123", + "ua": "test-user-agent" + }, + "id": "test-request-id", + "imp": [ + { + "banner": { + "h": 50, + "w": 320 + }, + "ext": { + "bidder": { + "apiKey": "test-api-key", + "placement": "test-placement" + } + }, + "id": "test-imp-id" + } + ], + "regs": { + "ext": { + "gdpr": 1 + } + }, + "site": { + "domain": "example.com", + "page": "https://example.com/page" + }, + "tmax": 500, + "user": { + "ext": { + "consent": "CO-X2XiO_eyUoAsAxBFRBECsA", + "eids": [ + { + "source": "adserver.org", + "uids": [ + { + "id": "111111111111", + "atype": 1 + } + ] + }, + { + "source": "liveramp.com", + "uids": [ + { + "id": "AjfowMv4ZHZQME1RWTn", + "atype": 3 + } + ] + } + ] + } + } + }, + "params": { + "apiKey": "test-api-key", + "placement": "test-placement" + }, + "request_id": "test-request-id", + "timeout": 500, + "userEids": [ + { + "source": "adserver.org", + "uids": [ + { + "id": "111111111111", + "atype": 1 + } + ] + }, + { + "source": "liveramp.com", + "uids": [ + { + "id": "AjfowMv4ZHZQME1RWTn", + "atype": 3 + } + ] + } + ], + "version": "prebid-server@unknown" + }, + "impIDs": ["test-imp-id"] + }, + "mockResponse": { + "status": 200, + "body": { + "ad": "
test ad
", + "cpm": 1.5, + "currency": "EUR", + "requestId": "test-request-id" + } + } + } + ], + "expectedBidResponses": [ + { + "currency": "EUR", + "bids": [ + { + "bid": { + "id": "test-request-id", + "impid": "test-imp-id", + "price": 1.5, + "adm": "
test ad
", + "crid": "test-request-id" + }, + "type": "banner" + } + ] + } + ] +}