Skip to content

Commit 94d0fcc

Browse files
MinuteMedia Adapter: Add test endpoint (#4096)
1 parent 173f0f4 commit 94d0fcc

File tree

5 files changed

+61
-19
lines changed

5 files changed

+61
-19
lines changed

src/main/java/org/prebid/server/bidder/minutemedia/MinuteMediaBidder.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@ public class MinuteMediaBidder implements Bidder<BidRequest> {
3737
public static final String PUBLISHER_ID_MACRO = "{{PublisherId}}";
3838

3939
private final String endpointUrl;
40+
private final String testEndpointUrl;
4041
private final JacksonMapper mapper;
4142

42-
public MinuteMediaBidder(String endpointUrl, JacksonMapper mapper) {
43+
public MinuteMediaBidder(String endpointUrl, String testEndpointUrl, JacksonMapper mapper) {
4344
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
45+
this.testEndpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(testEndpointUrl));
4446
this.mapper = Objects.requireNonNull(mapper);
4547
}
4648

@@ -49,15 +51,15 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest bidRequ
4951
final String orgId;
5052

5153
try {
52-
orgId = extractFirstImpOrdId(bidRequest.getImp());
54+
orgId = extractFirstImpOrgId(bidRequest.getImp());
5355
} catch (PreBidException e) {
5456
return Result.withError(BidderError.badInput(e.getMessage()));
5557
}
5658

57-
return Result.withValue(BidderUtil.defaultRequest(bidRequest, resolveEndpoint(endpointUrl, orgId), mapper));
59+
return Result.withValue(BidderUtil.defaultRequest(bidRequest, makeUrl(orgId, bidRequest.getTest()), mapper));
5860
}
5961

60-
private String extractFirstImpOrdId(List<Imp> imps) {
62+
private String extractFirstImpOrgId(List<Imp> imps) {
6163
return imps.stream()
6264
.findFirst()
6365
.map(this::parseImpExt)
@@ -76,8 +78,9 @@ private ExtImpMinuteMedia parseImpExt(Imp imp) {
7678
}
7779
}
7880

79-
private String resolveEndpoint(String endpointUrl, String orgId) {
80-
return endpointUrl.replace(PUBLISHER_ID_MACRO, HttpUtil.encodeUrl(orgId));
81+
private String makeUrl(String orgId, Integer test) {
82+
final String url = Objects.equals(test, 1) ? testEndpointUrl : endpointUrl;
83+
return url.replace(PUBLISHER_ID_MACRO, HttpUtil.encodeUrl(orgId));
8184
}
8285

8386
@Override
@@ -120,15 +123,11 @@ private static BidderBid makeBidderBid(Bid bid, String currency, List<BidderErro
120123

121124
private static BidType getBidType(Bid bid) {
122125
final Integer markupType = bid.getMtype();
123-
if (markupType == null) {
124-
throw new PreBidException("Missing mediaType for bid: %s".formatted(bid.getId()));
125-
}
126-
127126
return switch (markupType) {
128127
case 1 -> BidType.banner;
129128
case 2 -> BidType.video;
130-
default -> throw new PreBidException(
131-
"Unsupported bid mediaType: %s for impression: %s".formatted(bid.getMtype(), bid.getImpid()));
129+
case null, default -> throw new PreBidException(
130+
"Unsupported bid mediaType: %s for impression: %s".formatted(markupType, bid.getImpid()));
132131
};
133132
}
134133
}

src/main/java/org/prebid/server/spring/config/bidder/MinuteMediaConfiguration.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.prebid.server.spring.config.bidder;
22

3+
import lombok.Data;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.NoArgsConstructor;
36
import org.prebid.server.bidder.BidderDeps;
47
import org.prebid.server.bidder.minutemedia.MinuteMediaBidder;
58
import org.prebid.server.json.JacksonMapper;
@@ -23,19 +26,30 @@ public class MinuteMediaConfiguration {
2326

2427
@Bean("minutemediaConfigurationProperties")
2528
@ConfigurationProperties("adapters.minutemedia")
26-
BidderConfigurationProperties configurationProperties() {
27-
return new BidderConfigurationProperties();
29+
MinuteMediaConfigurationProperties configurationProperties() {
30+
return new MinuteMediaConfigurationProperties();
2831
}
2932

3033
@Bean
31-
BidderDeps minutemediaBidderDeps(BidderConfigurationProperties minutemediaConfigurationProperties,
34+
BidderDeps minutemediaBidderDeps(MinuteMediaConfigurationProperties minutemediaConfigurationProperties,
3235
@NotBlank @Value("${external-url}") String externalUrl,
3336
JacksonMapper mapper) {
3437

35-
return BidderDepsAssembler.forBidder(BIDDER_NAME)
38+
return BidderDepsAssembler.<MinuteMediaConfigurationProperties>forBidder(BIDDER_NAME)
3639
.withConfig(minutemediaConfigurationProperties)
3740
.usersyncerCreator(UsersyncerCreator.create(externalUrl))
38-
.bidderCreator(config -> new MinuteMediaBidder(config.getEndpoint(), mapper))
41+
.bidderCreator(config -> new MinuteMediaBidder(
42+
config.getEndpoint(),
43+
config.getTestEndpoint(),
44+
mapper))
3945
.assemble();
4046
}
47+
48+
@Data
49+
@EqualsAndHashCode(callSuper = true)
50+
@NoArgsConstructor
51+
private static class MinuteMediaConfigurationProperties extends BidderConfigurationProperties {
52+
53+
private String testEndpoint;
54+
}
4155
}

src/main/resources/bidder-config/minutemedia.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
adapters:
22
minutemedia:
33
endpoint: https://pbs.minutemedia-prebid.com/pbs-mm?publisher_id={{PublisherId}}
4+
test-endpoint: https://pbs.minutemedia-prebid.com/pbs-test?publisher_id={{PublisherId}}
45
modifying-vast-xml-allowed: true
56
meta-info:
67
maintainer-email: hb@minutemedia.com

src/test/java/org/prebid/server/bidder/minutemedia/MinuteMediaBidderTest.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,20 @@
3333
public class MinuteMediaBidderTest extends VertxTest {
3434

3535
private static final String ENDPOINT_URL = "https://randomurl.com/exchange?publisherId={{PublisherId}}";
36+
private static final String TEST_ENDPOINT_URL = "https://test.com/exchange?publisherId={{PublisherId}}";
3637

37-
private final MinuteMediaBidder target = new MinuteMediaBidder(ENDPOINT_URL, jacksonMapper);
38+
private final MinuteMediaBidder target = new MinuteMediaBidder(ENDPOINT_URL, TEST_ENDPOINT_URL, jacksonMapper);
3839

3940
@Test
4041
public void creationShouldFailOnInvalidEndpointUrl() {
4142
assertThatIllegalArgumentException()
42-
.isThrownBy(() -> new MinuteMediaBidder("invalid_url", jacksonMapper));
43+
.isThrownBy(() -> new MinuteMediaBidder("invalid_url", TEST_ENDPOINT_URL, jacksonMapper));
44+
}
45+
46+
@Test
47+
public void creationShouldFailOnInvalidTestEndpointUrl() {
48+
assertThatIllegalArgumentException()
49+
.isThrownBy(() -> new MinuteMediaBidder(ENDPOINT_URL, "invalid_url", jacksonMapper));
4350
}
4451

4552
@Test
@@ -76,6 +83,26 @@ public void makeHttpRequestsShouldResolveEndpointUrlUsingFirstImp() {
7683
assertThat(result.getErrors()).isEmpty();
7784
}
7885

86+
@Test
87+
public void makeHttpRequestsShouldResolveTestEndpointUrlWhenTestIsOne() {
88+
// given
89+
final BidRequest bidRequest = givenBidRequest(
90+
impBuilder -> impBuilder.ext(givenImpExt("123")),
91+
impBuilder -> impBuilder.ext(givenImpExt("456")))
92+
.toBuilder()
93+
.test(1)
94+
.build();
95+
96+
// when
97+
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
98+
99+
// then
100+
assertThat(result.getValue())
101+
.extracting(HttpRequest::getUri)
102+
.containsExactly("https://test.com/exchange?publisherId=123");
103+
assertThat(result.getErrors()).isEmpty();
104+
}
105+
79106
@Test
80107
public void makeHttpRequestsShouldReturnErrorOnAbsentImpExtBidderOrg() {
81108
// given

src/test/resources/org/prebid/server/it/test-application.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ adapters.mgidX.enabled=true
375375
adapters.mgidX.endpoint=http://localhost:8090/mgidx-exchange
376376
adapters.minutemedia.enabled=true
377377
adapters.minutemedia.endpoint=http://localhost:8090/minutemedia-exchange?publisherId={{PublisherId}}
378+
adapters.minutemedia.test-endpoint=http://localhost:8090/minutemedia-exchange?publisherId={{PublisherId}}
378379
adapters.missena.enabled=true
379380
adapters.missena.endpoint=http://localhost:8090/missena-exchange
380381
adapters.mobfoxpb.enabled=true

0 commit comments

Comments
 (0)