Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import com.fasterxml.jackson.annotation.JsonProperty;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Eid;
import lombok.Builder;
import lombok.Value;

import java.math.BigDecimal;
import java.util.List;

@Value
@Builder(toBuilder = true)
Expand All @@ -16,6 +18,11 @@ public class MissenaAdRequest {

String currency;

Boolean debug;

@JsonProperty("userEids")
List<Eid> userEids;

BigDecimal floor;

String floorCurrency;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Device;
import com.iab.openrtb.request.Eid;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.request.Site;
import com.iab.openrtb.request.User;
import com.iab.openrtb.response.Bid;
import io.vertx.core.MultiMap;
import io.vertx.core.http.HttpMethod;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.bidder.model.BidderBid;
Expand All @@ -21,6 +24,7 @@
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
import org.prebid.server.proto.openrtb.ext.request.ExtUser;
import org.prebid.server.proto.openrtb.ext.request.missena.ExtImpMissena;
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.util.BidderUtil;
Expand Down Expand Up @@ -91,15 +95,18 @@ private HttpRequest<MissenaAdRequest> makeHttpRequest(BidRequest request, Imp im
final Price floorInfo = resolveBidFloor(imp, request, requestCurrency);

final MissenaUserParams userParams = MissenaUserParams.builder()
.apiKey(extImp.getApiKey())
.formats(extImp.getFormats())
.placement(extImp.getPlacement())
.testMode(extImp.getTestMode())
.sample(extImp.getSample())
.settings(extImp.getSettings())
.build();

final MissenaAdRequest missenaAdRequest = MissenaAdRequest.builder()
.adUnit(imp.getId())
.currency(requestCurrency)
.debug(Objects.equals(request.getTest(), 1) ? Boolean.TRUE : null)
.userEids(resolveUserEids(request.getUser()))
.floor(floorInfo.getValue())
.floorCurrency(floorInfo.getCurrency())
.idempotencyKey(request.getId())
Expand All @@ -120,6 +127,12 @@ private HttpRequest<MissenaAdRequest> makeHttpRequest(BidRequest request, Imp im
.build();
}

private static List<Eid> resolveUserEids(User user) {
final ExtUser extUser = user != null ? user.getExt() : null;
final List<Eid> eids = extUser != null ? extUser.getEids() : null;
return CollectionUtils.isNotEmpty(eids) ? eids : null;
}

private Price resolveBidFloor(Imp imp, BidRequest bidRequest, String targetCurrency) {
final Price initialBidFloorPrice = Price.of(imp.getBidfloorcur(), imp.getBidfloor());
return BidderUtil.isValidPrice(initialBidFloorPrice)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.prebid.server.bidder.missena;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.node.ObjectNode; // Changed import
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.Builder;
import lombok.Value;

Expand All @@ -11,13 +11,14 @@
@Value
public class MissenaUserParams {

@JsonProperty("apiKey")
String apiKey;

List<String> formats;

String placement;

@JsonProperty("test")
String testMode;
String sample;

ObjectNode settings;
}

Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ public class ExtImpMissena {

String placement;

@JsonProperty("test")
String testMode;
String sample;

ObjectNode settings;
}
6 changes: 3 additions & 3 deletions src/main/resources/static/bidder-params/missena.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
"type": "string",
"description": "Placement Type (Sticky, Header, ...)"
},
"test": {
"type": "string",
"description": "Test Mode"
"sample": {
"type": ["string", "null"],
"description": "Sample"
},
"formats": {
"type": "array",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package org.prebid.server.bidder.missena;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.iab.openrtb.request.BidRequest;
import com.iab.openrtb.request.Device;
import com.iab.openrtb.request.Eid;
import com.iab.openrtb.request.Imp;
import com.iab.openrtb.request.Regs;
import com.iab.openrtb.request.Site;
import com.iab.openrtb.request.Source;
import com.iab.openrtb.request.SupplyChain;
import com.iab.openrtb.request.Uid;
import com.iab.openrtb.request.User;
import com.iab.openrtb.response.Bid;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -32,6 +35,7 @@
import org.prebid.server.util.HttpUtil;
import org.prebid.server.version.PrebidVersionProvider;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -95,23 +99,29 @@ public void makeHttpRequestsShouldReturnErrorIfImpExtCouldNotBeParsed() {
}

@Test
public void makeHttpRequestsShouldMakeRequestForFirstValidImp() {
public void makeHttpRequestsShouldMakeRequestForFirstValidImp() throws IOException {
// given
final ObjectNode settingsNode = mapper.createObjectNode().put("settingKey", "settingValue");
final List<Eid> userEids = List.of(Eid.builder()
.source("id-source")
.uids(List.of(Uid.builder().id("uid").atype(1).build()))
.build());

final BidRequest bidRequest = BidRequest.builder()
.id("requestId")
.test(1)
.tmax(500L)
.cur(singletonList("USD"))
.imp(List.of(
givenImp(imp -> imp.id("impId1")
.ext(givenImpExt("apiKey1", "placementId1", "1", List.of("banner"), settingsNode))),
.ext(givenImpExt("apiKey1", "placementId1", "sample1",
List.of("banner"), settingsNode))),
givenImp(imp -> imp.id("impId2")
.ext(givenImpExt("apiKey2", "placementId2", "0", null, null)))))
.ext(givenImpExt("apiKey2", "placementId2", "sample2", null, null)))))
.site(Site.builder().page("http://test.com/page").domain("test.com").build())
.regs(Regs.builder().ext(ExtRegs.of(1, null, null, null)).build())
.user(User.builder().buyeruid("buyer1")
.ext(ExtUser.builder().consent("consentStr").build()).build())
.ext(ExtUser.builder().consent("consentStr").eids(userEids).build()).build())
.source(Source.builder().schain(SupplyChain.of(1, null, null, null)).build())
.device(Device.builder().ua("test-ua").ip("123.123.123.123").build())
.build();
Expand All @@ -121,15 +131,18 @@ public void makeHttpRequestsShouldMakeRequestForFirstValidImp() {

// then
final MissenaUserParams expectedUserParams = MissenaUserParams.builder()
.apiKey("apiKey1")
.formats(List.of("banner"))
.placement("placementId1")
.testMode("1")
.sample("sample1")
.settings(settingsNode)
.build();

final MissenaAdRequest expectedPayload = MissenaAdRequest.builder()
.adUnit("impId1")
.currency("USD")
.debug(true)
.userEids(userEids)
.floor(BigDecimal.valueOf(0.1))
.floorCurrency("USD")
.idempotencyKey("requestId")
Expand All @@ -147,6 +160,11 @@ public void makeHttpRequestsShouldMakeRequestForFirstValidImp() {
assertThat(result.getValue())
.extracting(HttpRequest::getImpIds)
.containsExactly(Collections.singleton("impId1"));

final JsonNode body = mapper.readTree(result.getValue().getFirst().getBody());
assertThat(body.at("/params/apiKey").asText()).isEqualTo("apiKey1");
assertThat(body.at("/debug").asBoolean()).isTrue();
assertThat(body.at("/userEids/0/source").asText()).isEqualTo("id-source");
}

@Test
Expand Down Expand Up @@ -326,14 +344,14 @@ private static ObjectNode givenImpExt(String apiKey) {

private static ObjectNode givenImpExt(String apiKey,
String placement,
String testMode,
String sample,
List<String> formats,
ObjectNode settings) {

final ExtImpMissena extImpMissena = ExtImpMissena.builder()
.apiKey(apiKey)
.placement(placement)
.testMode(testMode)
.sample(sample)
.formats(formats)
.settings(settings)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"missena": {
"apiKey": "apiKey",
"placement": "placement",
"test": "test"
"sample": "sample"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
"request_id" : "request_id",
"timeout" : "${json-unit.any-number}",
"params" : {
"apiKey" : "apiKey",
"placement" : "placement",
"test" : "test"
"sample" : "sample"
},
"ortb2" : {
"id" : "request_id",
Expand All @@ -22,7 +23,7 @@
"bidder" : {
"apiKey" : "apiKey",
"placement" : "placement",
"test" : "test"
"sample" : "sample"
}
}
} ],
Expand Down