diff --git a/adapters/adview/adview.go b/adapters/adview/adview.go index c3e78b4221c..e987298139f 100644 --- a/adapters/adview/adview.go +++ b/adapters/adview/adview.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "net/http" + "strings" "text/template" "github.com/mxmCherry/openrtb/v15/openrtb2" @@ -58,6 +59,22 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapte } } + // Check if imp comes with bid floor amount defined in a foreign currency + if imp.BidFloor > 0 && imp.BidFloorCur != "" && strings.ToUpper(imp.BidFloorCur) != "USD" { + // Convert to US dollars + convertedValue, err := requestInfo.ConvertCurrency(imp.BidFloor, imp.BidFloorCur, "USD") + if err != nil { + return nil, []error{err} + } + // Update after conversion. All imp elements inside request.Imp are shallow copies + // therefore, their non-pointer values are not shared memory and are safe to modify. + imp.BidFloorCur = "USD" + imp.BidFloor = convertedValue + } + + // Set the CUR of bid to USD after converting all floors + request.Cur = []string{"USD"} + url, err := a.buildEndpointURL(&advImpExt) if err != nil { return nil, []error{err} @@ -100,7 +117,8 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R } bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp)) - bidResponse.Currency = response.Cur + bidResponse.Currency = "USD" //we just support USD for resp + var errors []error for _, seatBid := range response.SeatBid { for i, bid := range seatBid.Bid { diff --git a/adapters/adview/adviewtest/exemplary/banner-app-format.json b/adapters/adview/adviewtest/exemplary/banner-app-format.json index 49956cdc519..0ab4951511e 100644 --- a/adapters/adview/adviewtest/exemplary/banner-app-format.json +++ b/adapters/adview/adviewtest/exemplary/banner-app-format.json @@ -50,6 +50,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "some-request-id", + "cur": ["USD"], "device": { "ua": "test-user-agent", "ip": "123.123.123.123", @@ -134,6 +135,7 @@ ], "expectedBidResponses": [ { + "currency": "USD", "bids": [ { "bid": { diff --git a/adapters/adview/adviewtest/exemplary/banner-app.json b/adapters/adview/adviewtest/exemplary/banner-app.json index e8697229f4a..6aad1e8dc05 100644 --- a/adapters/adview/adviewtest/exemplary/banner-app.json +++ b/adapters/adview/adviewtest/exemplary/banner-app.json @@ -46,6 +46,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "some-request-id", + "cur": ["USD"], "device": { "ua": "test-user-agent", "ip": "123.123.123.123", @@ -124,6 +125,7 @@ ], "expectedBidResponses": [ { + "currency": "USD", "bids": [ { "bid": { diff --git a/adapters/adview/adviewtest/exemplary/native-app.json b/adapters/adview/adviewtest/exemplary/native-app.json index df776a36d30..804494e5ff5 100644 --- a/adapters/adview/adviewtest/exemplary/native-app.json +++ b/adapters/adview/adviewtest/exemplary/native-app.json @@ -46,6 +46,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "some-request-id", + "cur": ["USD"], "device": { "ua": "test-user-agent", "ip": "123.123.123.123", @@ -122,6 +123,7 @@ ], "expectedBidResponses": [ { + "currency": "USD", "bids":[ { "bid": { diff --git a/adapters/adview/adviewtest/exemplary/video-app.json b/adapters/adview/adviewtest/exemplary/video-app.json index 2136a8f7f33..57c9b85598b 100644 --- a/adapters/adview/adviewtest/exemplary/video-app.json +++ b/adapters/adview/adviewtest/exemplary/video-app.json @@ -51,6 +51,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "some-request-id", + "cur": ["USD"], "device": { "ua": "test-user-agent", "ip": "123.123.123.123", @@ -133,6 +134,7 @@ ], "expectedBidResponses": [ { + "currency": "USD", "bids":[ { "bid": { diff --git a/adapters/adview/adviewtest/supplemental/bad-request.json b/adapters/adview/adviewtest/supplemental/bad-request.json index 131e6d830a2..0f10fe79062 100644 --- a/adapters/adview/adviewtest/supplemental/bad-request.json +++ b/adapters/adview/adviewtest/supplemental/bad-request.json @@ -20,6 +20,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "test-request-id", + "cur": ["USD"], "imp": [{ "ext": { "bidder": { diff --git a/adapters/adview/adviewtest/supplemental/currency_rate_not_found.json b/adapters/adview/adviewtest/supplemental/currency_rate_not_found.json new file mode 100644 index 00000000000..61d1558cfe4 --- /dev/null +++ b/adapters/adview/adviewtest/supplemental/currency_rate_not_found.json @@ -0,0 +1,44 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "bidfloor": 1.00, + "bidfloorcur": "JPY", + "ext":{ + "bidder": { + "placementId": "posid00001", + "accountId": "accountid01" + } + } + } + ], + "ext": { + "prebid": { + "currency": { + "rates": { + "MXN": { + "USD": 0.05 + } + }, + "usepbsrates": false + } + } + } + }, + "expectedMakeRequestsErrors": [ + { + "value": "Currency conversion rate not found: 'JPY' => 'USD'", + "comparison": "literal" + } + ] +} diff --git a/adapters/adview/adviewtest/supplemental/empty-response.json b/adapters/adview/adviewtest/supplemental/empty-response.json index 5bd86bc99a1..c080b18d4bb 100644 --- a/adapters/adview/adviewtest/supplemental/empty-response.json +++ b/adapters/adview/adviewtest/supplemental/empty-response.json @@ -20,6 +20,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "test-request-id", + "cur": ["USD"], "imp": [{ "ext": { "bidder": { diff --git a/adapters/adview/adviewtest/supplemental/nobid-response.json b/adapters/adview/adviewtest/supplemental/nobid-response.json index f2c8864d4b1..9e9ab678a22 100644 --- a/adapters/adview/adviewtest/supplemental/nobid-response.json +++ b/adapters/adview/adviewtest/supplemental/nobid-response.json @@ -20,6 +20,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "test-request-id", + "cur": ["USD"], "imp": [{ "ext": { "bidder": { diff --git a/adapters/adview/adviewtest/supplemental/server-error.json b/adapters/adview/adviewtest/supplemental/server-error.json index 7894be1b70a..de3bc9d3721 100644 --- a/adapters/adview/adviewtest/supplemental/server-error.json +++ b/adapters/adview/adviewtest/supplemental/server-error.json @@ -20,6 +20,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "test-request-id", + "cur": ["USD"], "imp": [{ "ext": { "bidder": { diff --git a/adapters/adview/adviewtest/supplemental/unparsable-response.json b/adapters/adview/adviewtest/supplemental/unparsable-response.json index cef70ba8771..18bc2e0f4ed 100644 --- a/adapters/adview/adviewtest/supplemental/unparsable-response.json +++ b/adapters/adview/adviewtest/supplemental/unparsable-response.json @@ -20,6 +20,7 @@ "uri": "https://bid.adview.com/agent/thirdAdxService/accountid01", "body": { "id": "test-request-id", + "cur": ["USD"], "imp": [{ "ext": { "bidder": {