2424import static org .prebid .server .hooks .modules .greenbids .real .time .data .util .TestBidRequestProvider .givenBidRequest ;
2525import static org .prebid .server .hooks .modules .greenbids .real .time .data .util .TestBidRequestProvider .givenDevice ;
2626import static org .prebid .server .hooks .modules .greenbids .real .time .data .util .TestBidRequestProvider .givenImpExt ;
27+ import static org .prebid .server .hooks .modules .greenbids .real .time .data .util .TestBidRequestProvider .givenImpExtToFilterAllBidders ;
2728
2829@ ExtendWith (MockitoExtension .class )
2930public class GreenbidsInvocationServiceTest {
@@ -69,7 +70,6 @@ public void createGreenbidsInvocationResultShouldReturnUpdateBidRequestWhenNotEx
6970 assertThat (keptInAuction .get ("rubicon" )).isTrue ();
7071 assertThat (keptInAuction .get ("appnexus" )).isFalse ();
7172 assertThat (keptInAuction .get ("pubmatic" )).isFalse ();
72-
7373 }
7474
7575 @ Test
@@ -104,8 +104,87 @@ public void createGreenbidsInvocationResultShouldReturnNoActionWhenExploration()
104104 assertThat (ortb2ImpExtResult .getGreenbids ().getIsExploration ()).isTrue ();
105105 assertThat (ortb2ImpExtResult .getGreenbids ().getFingerprint ()).isNotNull ();
106106 assertThat (keptInAuction .get ("rubicon" )).isTrue ();
107- assertThat (keptInAuction .get ("appnexus" )).isTrue ();
108- assertThat (keptInAuction .get ("pubmatic" )).isTrue ();
107+ assertThat (keptInAuction .get ("appnexus" )).isFalse ();
108+ assertThat (keptInAuction .get ("pubmatic" )).isFalse ();
109+ }
110+
111+ @ Test
112+ public void createGreenbidsInvocationResultShouldReturnRejectWhenAllImpsFiltered () {
113+ // given
114+ final Banner banner = givenBanner ();
115+ final Imp imp = Imp .builder ()
116+ .id ("adunitcodevalue" )
117+ .ext (givenImpExt ())
118+ .banner (banner )
119+ .build ();
120+ final Device device = givenDevice (identity ());
121+ final BidRequest bidRequest = givenBidRequest (request -> request , List .of (imp ), device );
122+ final Map <String , Map <String , Boolean >> impsBiddersFilterMap = givenFilterMapWithAllFilteredImps ();
123+ final GreenbidsConfig greenbidsConfig = givenPartner (1.0 );
124+
125+ // when
126+ final GreenbidsInvocationResult result = target .createGreenbidsInvocationResult (
127+ greenbidsConfig , bidRequest , impsBiddersFilterMap );
128+
129+ // then
130+ final JsonNode updatedBidRequestExtPrebidBidders = result .getUpdatedBidRequest ().getImp ().getFirst ().getExt ()
131+ .get ("prebid" ).get ("bidder" );
132+ final Ortb2ImpExtResult ortb2ImpExtResult = result .getAnalyticsResult ().getValues ().get ("adunitcodevalue" );
133+ final Map <String , Boolean > keptInAuction = ortb2ImpExtResult .getGreenbids ().getKeptInAuction ();
134+
135+ assertThat (result .getInvocationAction ()).isEqualTo (InvocationAction .reject );
136+ assertThat (updatedBidRequestExtPrebidBidders .has ("rubicon" )).isTrue ();
137+ assertThat (updatedBidRequestExtPrebidBidders .has ("appnexus" )).isTrue ();
138+ assertThat (updatedBidRequestExtPrebidBidders .has ("pubmatic" )).isTrue ();
139+ assertThat (ortb2ImpExtResult ).isNotNull ();
140+ assertThat (ortb2ImpExtResult .getGreenbids ().getIsExploration ()).isTrue ();
141+ assertThat (ortb2ImpExtResult .getGreenbids ().getFingerprint ()).isNotNull ();
142+ assertThat (keptInAuction .get ("rubicon" )).isFalse ();
143+ assertThat (keptInAuction .get ("appnexus" )).isFalse ();
144+ assertThat (keptInAuction .get ("pubmatic" )).isFalse ();
145+ }
146+
147+ @ Test
148+ public void createGreenbidsInvocationResultShouldRemoveImpFromUpdateBidRequestWhenAllBiddersFiltered () {
149+ // given
150+ final Banner banner = givenBanner ();
151+ final Imp imp1 = Imp .builder ()
152+ .id ("adunitcodevalue1" )
153+ .ext (givenImpExt ())
154+ .banner (banner )
155+ .build ();
156+ final Imp imp2 = Imp .builder ()
157+ .id ("adunitcodevalue2" )
158+ .ext (givenImpExtToFilterAllBidders ())
159+ .banner (banner )
160+ .build ();
161+ final Device device = givenDevice (identity ());
162+ final BidRequest bidRequest = givenBidRequest (request -> request , List .of (imp1 , imp2 ), device );
163+ final Map <String , Map <String , Boolean >> impsBiddersFilterMap = givenFilterMapWithAllFilteredBiddersInImp ();
164+ final GreenbidsConfig greenbidsConfig = givenPartner (0.0 );
165+
166+ // when
167+ final GreenbidsInvocationResult result = target .createGreenbidsInvocationResult (
168+ greenbidsConfig , bidRequest , impsBiddersFilterMap );
169+
170+ // then
171+ final JsonNode updatedBidRequestExtPrebidBidders = result .getUpdatedBidRequest ().getImp ().getFirst ().getExt ()
172+ .get ("prebid" ).get ("bidder" );
173+ final Ortb2ImpExtResult ortb2ImpExtResult = result .getAnalyticsResult ().getValues ().get ("adunitcodevalue1" );
174+ final Map <String , Boolean > keptInAuction = ortb2ImpExtResult .getGreenbids ().getKeptInAuction ();
175+
176+ assertThat (result .getInvocationAction ()).isEqualTo (InvocationAction .update );
177+ assertThat (result .getUpdatedBidRequest ().getImp ()).hasSize (1 );
178+ assertThat (updatedBidRequestExtPrebidBidders .has ("rubicon" )).isTrue ();
179+ assertThat (updatedBidRequestExtPrebidBidders .has ("appnexus" )).isFalse ();
180+ assertThat (updatedBidRequestExtPrebidBidders .has ("pubmatic" )).isFalse ();
181+ assertThat (ortb2ImpExtResult ).isNotNull ();
182+ assertThat (ortb2ImpExtResult .getGreenbids ().getIsExploration ()).isFalse ();
183+ assertThat (ortb2ImpExtResult .getGreenbids ().getFingerprint ()).isNotNull ();
184+ assertThat (keptInAuction .get ("rubicon" )).isTrue ();
185+ assertThat (keptInAuction .get ("appnexus" )).isFalse ();
186+ assertThat (keptInAuction .get ("pubmatic" )).isFalse ();
187+
109188 }
110189
111190 private Map <String , Map <String , Boolean >> givenImpsBiddersFilterMap () {
@@ -120,6 +199,34 @@ private Map<String, Map<String, Boolean>> givenImpsBiddersFilterMap() {
120199 return impsBiddersFilterMap ;
121200 }
122201
202+ private Map <String , Map <String , Boolean >> givenFilterMapWithAllFilteredImps () {
203+ final Map <String , Boolean > biddersFitlerMap = new HashMap <>();
204+ biddersFitlerMap .put ("rubicon" , false );
205+ biddersFitlerMap .put ("appnexus" , false );
206+ biddersFitlerMap .put ("pubmatic" , false );
207+
208+ final Map <String , Map <String , Boolean >> impsBiddersFilterMap = new HashMap <>();
209+ impsBiddersFilterMap .put ("adunitcodevalue" , biddersFitlerMap );
210+
211+ return impsBiddersFilterMap ;
212+ }
213+
214+ private Map <String , Map <String , Boolean >> givenFilterMapWithAllFilteredBiddersInImp () {
215+ final Map <String , Boolean > biddersFitlerMapForKeptImp = new HashMap <>();
216+ biddersFitlerMapForKeptImp .put ("rubicon" , true );
217+ biddersFitlerMapForKeptImp .put ("appnexus" , false );
218+ biddersFitlerMapForKeptImp .put ("pubmatic" , false );
219+
220+ final Map <String , Boolean > biddersFitlerMapForRemovedImp = new HashMap <>();
221+ biddersFitlerMapForRemovedImp .put ("appnexus" , false );
222+
223+ final Map <String , Map <String , Boolean >> impsBiddersFilterMap = new HashMap <>();
224+ impsBiddersFilterMap .put ("adunitcodevalue1" , biddersFitlerMapForKeptImp );
225+ impsBiddersFilterMap .put ("adunitcodevalue2" , biddersFitlerMapForRemovedImp );
226+
227+ return impsBiddersFilterMap ;
228+ }
229+
123230 private GreenbidsConfig givenPartner (Double explorationRate ) {
124231 return GreenbidsConfig .of ("test-pbuid" , 0.60 , explorationRate );
125232 }
0 commit comments