|
23 | 23 | import org.prebid.server.bidder.model.HttpRequest; |
24 | 24 | import org.prebid.server.bidder.model.HttpResponse; |
25 | 25 | import org.prebid.server.bidder.model.Result; |
| 26 | +import org.prebid.server.bidder.openx.proto.OpenxBidExt; |
26 | 27 | import org.prebid.server.bidder.openx.proto.OpenxBidResponse; |
27 | 28 | import org.prebid.server.bidder.openx.proto.OpenxBidResponseExt; |
28 | 29 | import org.prebid.server.bidder.openx.proto.OpenxRequestExt; |
@@ -983,6 +984,155 @@ public void makeBidsShouldReturnResultContainingEmptyValueAndErrorsWhenSeatBidEm |
983 | 984 | .containsOnly(Collections.emptyList(), Collections.emptyList()); |
984 | 985 | } |
985 | 986 |
|
| 987 | + @Test |
| 988 | + public void makeBidShouldReturnBidWithExtPrebidMetaContainingAllFieldsFromBidExt() throws JsonProcessingException { |
| 989 | + // given |
| 990 | + final ObjectNode bidExt = mapper.valueToTree(OpenxBidExt.builder() |
| 991 | + .dspId("1") |
| 992 | + .buyerId("2") |
| 993 | + .brandId("3") |
| 994 | + .build()); |
| 995 | + final BidderCall<BidRequest> httpCall = givenHttpCall(mapper.writeValueAsString( |
| 996 | + BidResponse.builder() |
| 997 | + .seatbid(singletonList(SeatBid.builder() |
| 998 | + .bid(List.of( |
| 999 | + Bid.builder() |
| 1000 | + .w(200) |
| 1001 | + .h(150) |
| 1002 | + .price(BigDecimal.ONE) |
| 1003 | + .impid("impId1") |
| 1004 | + .dealid("dealid") |
| 1005 | + .adm("<div>This is an Ad</div>") |
| 1006 | + .ext(bidExt) |
| 1007 | + .build())) |
| 1008 | + .build())) |
| 1009 | + .build())); |
| 1010 | + |
| 1011 | + final BidRequest bidRequest = BidRequest.builder() |
| 1012 | + .id("bidRequestId") |
| 1013 | + .imp(List.of( |
| 1014 | + Imp.builder() |
| 1015 | + .id("impId1") |
| 1016 | + .banner(Banner.builder().build()) |
| 1017 | + .build())) |
| 1018 | + .build(); |
| 1019 | + |
| 1020 | + // when |
| 1021 | + final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); |
| 1022 | + |
| 1023 | + // then |
| 1024 | + final ObjectNode expectedExtWithBidMeta = mapper.createObjectNode() |
| 1025 | + .put("dsp_id", "1") |
| 1026 | + .put("buyer_id", "2") |
| 1027 | + .put("brand_id", "3") |
| 1028 | + .set("prebid", mapper.createObjectNode() |
| 1029 | + .set("meta", mapper.createObjectNode() |
| 1030 | + .put("advertiserId", 2) |
| 1031 | + .put("brandId", 3) |
| 1032 | + .put("networkId", 1))); |
| 1033 | + assertThat(result.getErrors()).isEmpty(); |
| 1034 | + assertThat(result.getBids()).hasSize(1) |
| 1035 | + .extracting(BidderBid::getBid) |
| 1036 | + .extracting(Bid::getExt) |
| 1037 | + .containsExactly(expectedExtWithBidMeta); |
| 1038 | + } |
| 1039 | + |
| 1040 | + @Test |
| 1041 | + public void makeBidShouldReturnBidWithExtPrebidMetaContainingBrandIdFieldOnly() throws JsonProcessingException { |
| 1042 | + // given |
| 1043 | + final ObjectNode bidExt = mapper.valueToTree(OpenxBidExt.builder() |
| 1044 | + .brandId("4") |
| 1045 | + .build()); |
| 1046 | + final BidderCall<BidRequest> httpCall = givenHttpCall(mapper.writeValueAsString( |
| 1047 | + BidResponse.builder() |
| 1048 | + .seatbid(singletonList(SeatBid.builder() |
| 1049 | + .bid(List.of( |
| 1050 | + Bid.builder() |
| 1051 | + .w(200) |
| 1052 | + .h(150) |
| 1053 | + .price(BigDecimal.ONE) |
| 1054 | + .impid("impId1") |
| 1055 | + .dealid("dealid") |
| 1056 | + .adm("<div>This is an Ad</div>") |
| 1057 | + .ext(bidExt) |
| 1058 | + .build())) |
| 1059 | + .build())) |
| 1060 | + .build())); |
| 1061 | + |
| 1062 | + final BidRequest bidRequest = BidRequest.builder() |
| 1063 | + .id("bidRequestId") |
| 1064 | + .imp(List.of( |
| 1065 | + Imp.builder() |
| 1066 | + .id("impId1") |
| 1067 | + .banner(Banner.builder().build()) |
| 1068 | + .build())) |
| 1069 | + .build(); |
| 1070 | + |
| 1071 | + // when |
| 1072 | + final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); |
| 1073 | + |
| 1074 | + // then |
| 1075 | + final ObjectNode expectedExtWithBidMeta = mapper.createObjectNode() |
| 1076 | + .put("brand_id", "4") |
| 1077 | + .set("prebid", mapper.createObjectNode() |
| 1078 | + .set("meta", mapper.createObjectNode() |
| 1079 | + .put("brandId", 4))); |
| 1080 | + assertThat(result.getErrors()).isEmpty(); |
| 1081 | + assertThat(result.getBids()).hasSize(1) |
| 1082 | + .extracting(BidderBid::getBid) |
| 1083 | + .extracting(Bid::getExt) |
| 1084 | + .containsExactly(expectedExtWithBidMeta); |
| 1085 | + } |
| 1086 | + |
| 1087 | + @Test |
| 1088 | + public void makeBidShouldReturnBidWithExtPrebidMetaNotContainingFieldsWithInvalidValues() |
| 1089 | + throws JsonProcessingException { |
| 1090 | + // given |
| 1091 | + final ObjectNode bidExt = mapper.valueToTree(OpenxBidExt.builder() |
| 1092 | + .dspId("abc") |
| 1093 | + .buyerId("xyz") |
| 1094 | + .brandId("cba") |
| 1095 | + .build()); |
| 1096 | + final BidderCall<BidRequest> httpCall = givenHttpCall(mapper.writeValueAsString( |
| 1097 | + BidResponse.builder() |
| 1098 | + .seatbid(singletonList(SeatBid.builder() |
| 1099 | + .bid(List.of( |
| 1100 | + Bid.builder() |
| 1101 | + .w(200) |
| 1102 | + .h(150) |
| 1103 | + .price(BigDecimal.ONE) |
| 1104 | + .impid("impId1") |
| 1105 | + .dealid("dealid") |
| 1106 | + .adm("<div>This is an Ad</div>") |
| 1107 | + .ext(bidExt) |
| 1108 | + .build())) |
| 1109 | + .build())) |
| 1110 | + .build())); |
| 1111 | + |
| 1112 | + final BidRequest bidRequest = BidRequest.builder() |
| 1113 | + .id("bidRequestId") |
| 1114 | + .imp(List.of( |
| 1115 | + Imp.builder() |
| 1116 | + .id("impId1") |
| 1117 | + .banner(Banner.builder().build()) |
| 1118 | + .build())) |
| 1119 | + .build(); |
| 1120 | + |
| 1121 | + // when |
| 1122 | + final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); |
| 1123 | + |
| 1124 | + // then |
| 1125 | + final ObjectNode expectedExtWithBidMeta = mapper.createObjectNode() |
| 1126 | + .put("dsp_id", "abc") |
| 1127 | + .put("buyer_id", "xyz") |
| 1128 | + .put("brand_id", "cba"); |
| 1129 | + assertThat(result.getErrors()).isEmpty(); |
| 1130 | + assertThat(result.getBids()).hasSize(1) |
| 1131 | + .extracting(BidderBid::getBid) |
| 1132 | + .extracting(Bid::getExt) |
| 1133 | + .containsExactly(expectedExtWithBidMeta); |
| 1134 | + } |
| 1135 | + |
986 | 1136 | private static Map<String, JsonNode> givenCustomParams(String key, Object values) { |
987 | 1137 | return singletonMap(key, mapper.valueToTree(values)); |
988 | 1138 | } |
|
0 commit comments