Skip to content

Commit 4dd80cb

Browse files
committed
Add units
1 parent fc35aa3 commit 4dd80cb

15 files changed

Lines changed: 610 additions & 8 deletions

src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ private TCStringParsingResult parseConsentString(String consentString, RequestLo
352352
final String message = "Invalid TCF string: `disclosedVendors` list is empty.";
353353
warnings.add(message);
354354
logWarn(consentString, message, requestLogInfo);
355+
metrics.updatePrivacyTcfInvalidMetric();
355356

356357
return TCStringParsingResult.of(TCStringEmpty.create(), warnings);
357358
}

src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ public void resolveTcfContextShouldReturnTcfContextWithConsentValidAsTrue() {
491491
.gdpr("1")
492492
.consentString("CPBCa-mPBCa-mAAAAAENA0CAAEAAAAAAACiQAaQAwAAgAgABoAAAAAA")
493493
.build();
494+
494495
// when
495496
final Future<TcfContext> result = target.resolveTcfContext(
496497
privacy, null, null, MetricName.setuid, null, null);
@@ -547,6 +548,32 @@ public void resolveTcfContextShouldIncrementInvalidConsentStringMetric() {
547548
verify(metrics).updatePrivacyTcfInvalidMetric();
548549
}
549550

551+
@Test
552+
public void resolveTcfContextShouldIncrementInvalidConsentStringMetricWhenDisclosedVendorsIsInvalid() {
553+
// given
554+
given(disclosedVendorsStrictness.isValid(any())).willReturn(false);
555+
556+
final Privacy privacy = Privacy.builder()
557+
.gdpr("1")
558+
.consentString("CPBCa-mPBCa-mAAAAAENA0CAAEAAAAAAACiQAaQAwAAgAgABoAAAAAA")
559+
.build();
560+
561+
// when
562+
final Future<TcfContext> result = target.resolveTcfContext(
563+
privacy, null, null, MetricName.setuid, null, null);
564+
565+
// then
566+
assertThat(result).isSucceeded();
567+
assertThat(result.result()).satisfies(context -> {
568+
assertThat(context.isInGdprScope()).isTrue();
569+
assertThat(context.getConsentString()).isEqualTo("CPBCa-mPBCa-mAAAAAENA0CAAEAAAAAAACiQAaQAwAAgAgABoAAAAAA");
570+
assertThat(context.isConsentValid()).isFalse();
571+
assertThat(context.getWarnings()).containsExactly("Invalid TCF string: `disclosedVendors` list is empty.");
572+
});
573+
574+
verify(metrics).updatePrivacyTcfInvalidMetric();
575+
}
576+
550577
@Test
551578
public void resultForVendorIdsShouldNotSetTcfRequestsAndTcfGeoMetricsWhenConsentIsNotValid() {
552579
// given
@@ -672,4 +699,13 @@ public void isConsentStringValidShouldReturnFalseWhenStringNotValid() {
672699
// when and then
673700
assertThat(target.isConsentStringValid("invalid")).isFalse();
674701
}
702+
703+
@Test
704+
public void isConsentStringValidShouldReturnFalseWhenDisclosedVendorsIsInvalid() {
705+
// given
706+
given(disclosedVendorsStrictness.isValid(any())).willReturn(false);
707+
708+
// when and then
709+
assertThat(target.isConsentStringValid("CPBCa-mPBCa-mAAAAAENA0CAAEAAAAAAACiQAaQAwAAgAgABoAAAAAA")).isFalse();
710+
}
675711
}

src/test/java/org/prebid/server/privacy/gdpr/tcfstrategies/purpose/Purpose01StrategyTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.assertj.core.api.Assertions.assertThat;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.ArgumentMatchers.anyBoolean;
30+
import static org.mockito.ArgumentMatchers.eq;
3031
import static org.mockito.BDDMockito.given;
3132
import static org.mockito.Mock.Strictness.LENIENT;
3233
import static org.mockito.Mockito.times;
@@ -167,6 +168,45 @@ public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBi
167168
false);
168169
}
169170

171+
@Test
172+
public void processTypePurposeStrategyShouldPassDisclosedListWithEnforcementsAndExcludeBiddersToBaseType() {
173+
// given
174+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), any())).willReturn(false);
175+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), eq(1))).willReturn(true);
176+
177+
final List<String> vendorExceptions = asList("b1", "b3");
178+
final Purpose purpose = Purpose.of(EnforcePurpose.basic, false, vendorExceptions, null);
179+
final VendorPermission vendorPermission1 = VendorPermission.of(1, null, PrivacyEnforcementAction.restrictAll());
180+
final VendorPermission vendorPermission2 = VendorPermission.of(2, "b1", PrivacyEnforcementAction.restrictAll());
181+
final VendorPermission vendorPermission3 = VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll());
182+
final VendorPermissionWithGvl vendorPermissionWitGvl1 = withGvl(vendorPermission1, Vendor.empty(1));
183+
final VendorPermissionWithGvl vendorPermissionWitGvl2 = withGvl(vendorPermission2, Vendor.empty(2));
184+
final VendorPermissionWithGvl vendorPermissionWitGvl3 = withGvl(vendorPermission3, Vendor.empty(3));
185+
final List<VendorPermissionWithGvl> vendorPermissionsWithGvl = asList(
186+
vendorPermissionWitGvl1,
187+
vendorPermissionWitGvl2,
188+
vendorPermissionWitGvl3);
189+
190+
given(basicEnforcePurposeStrategy.allowedByTypeStrategy(any(), any(), any(), any(), anyBoolean()))
191+
.willReturn(Stream.of(vendorPermission1, vendorPermission2));
192+
193+
// when
194+
target.processTypePurposeStrategy(tcString, purpose, vendorPermissionsWithGvl, false);
195+
196+
// then
197+
assertThat(vendorPermission1).isEqualTo(vendorPermissionResult(1, null));
198+
assertThat(vendorPermission2).isEqualTo(vendorPermissionResult(2, "b1"));
199+
assertThat(vendorPermission3).isEqualTo(VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll()));
200+
201+
verify(basicEnforcePurposeStrategy)
202+
.allowedByTypeStrategy(
203+
PURPOSE_CODE,
204+
tcString,
205+
singletonList(vendorPermissionWitGvl1),
206+
singletonList(vendorPermissionWitGvl2),
207+
false);
208+
}
209+
170210
@Test
171211
public void processTypePurposeStrategyShouldPassEmptyListWithEnforcementsWhenAllBiddersAreExcluded() {
172212
// given

src/test/java/org/prebid/server/privacy/gdpr/tcfstrategies/purpose/Purpose02StrategyTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.assertj.core.api.Assertions.assertThat;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.ArgumentMatchers.anyBoolean;
30+
import static org.mockito.ArgumentMatchers.eq;
3031
import static org.mockito.BDDMockito.given;
3132
import static org.mockito.Mock.Strictness.LENIENT;
3233
import static org.mockito.Mockito.times;
@@ -167,6 +168,45 @@ public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBi
167168
false);
168169
}
169170

171+
@Test
172+
public void processTypePurposeStrategyShouldPassDisclosedListWithEnforcementsAndExcludeBiddersToBaseType() {
173+
// given
174+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), any())).willReturn(false);
175+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), eq(1))).willReturn(true);
176+
177+
final List<String> vendorExceptions = asList("b1", "b3");
178+
final Purpose purpose = Purpose.of(EnforcePurpose.basic, false, vendorExceptions, null);
179+
final VendorPermission vendorPermission1 = VendorPermission.of(1, null, PrivacyEnforcementAction.restrictAll());
180+
final VendorPermission vendorPermission2 = VendorPermission.of(2, "b1", PrivacyEnforcementAction.restrictAll());
181+
final VendorPermission vendorPermission3 = VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll());
182+
final VendorPermissionWithGvl vendorPermissionWitGvl1 = withGvl(vendorPermission1, Vendor.empty(1));
183+
final VendorPermissionWithGvl vendorPermissionWitGvl2 = withGvl(vendorPermission2, Vendor.empty(2));
184+
final VendorPermissionWithGvl vendorPermissionWitGvl3 = withGvl(vendorPermission3, Vendor.empty(3));
185+
final List<VendorPermissionWithGvl> vendorPermissionsWithGvl = asList(
186+
vendorPermissionWitGvl1,
187+
vendorPermissionWitGvl2,
188+
vendorPermissionWitGvl3);
189+
190+
given(basicEnforcePurposeStrategy.allowedByTypeStrategy(any(), any(), any(), any(), anyBoolean()))
191+
.willReturn(Stream.of(vendorPermission1, vendorPermission2));
192+
193+
// when
194+
target.processTypePurposeStrategy(tcString, purpose, vendorPermissionsWithGvl, false);
195+
196+
// then
197+
assertThat(vendorPermission1).isEqualTo(vendorPermissionResult(1, null));
198+
assertThat(vendorPermission2).isEqualTo(vendorPermissionResult(2, "b1"));
199+
assertThat(vendorPermission3).isEqualTo(VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll()));
200+
201+
verify(basicEnforcePurposeStrategy)
202+
.allowedByTypeStrategy(
203+
PURPOSE_CODE,
204+
tcString,
205+
singletonList(vendorPermissionWitGvl1),
206+
singletonList(vendorPermissionWitGvl2),
207+
false);
208+
}
209+
170210
@Test
171211
public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBiddersToFullType() {
172212
// given

src/test/java/org/prebid/server/privacy/gdpr/tcfstrategies/purpose/Purpose03StrategyTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.assertj.core.api.Assertions.assertThat;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.ArgumentMatchers.anyBoolean;
30+
import static org.mockito.ArgumentMatchers.eq;
3031
import static org.mockito.BDDMockito.given;
3132
import static org.mockito.Mock.Strictness.LENIENT;
3233
import static org.mockito.Mockito.times;
@@ -167,6 +168,45 @@ public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBi
167168
false);
168169
}
169170

171+
@Test
172+
public void processTypePurposeStrategyShouldPassDisclosedListWithEnforcementsAndExcludeBiddersToBaseType() {
173+
// given
174+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), any())).willReturn(false);
175+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), eq(1))).willReturn(true);
176+
177+
final List<String> vendorExceptions = asList("b1", "b3");
178+
final Purpose purpose = Purpose.of(EnforcePurpose.basic, false, vendorExceptions, null);
179+
final VendorPermission vendorPermission1 = VendorPermission.of(1, null, PrivacyEnforcementAction.restrictAll());
180+
final VendorPermission vendorPermission2 = VendorPermission.of(2, "b1", PrivacyEnforcementAction.restrictAll());
181+
final VendorPermission vendorPermission3 = VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll());
182+
final VendorPermissionWithGvl vendorPermissionWitGvl1 = withGvl(vendorPermission1, Vendor.empty(1));
183+
final VendorPermissionWithGvl vendorPermissionWitGvl2 = withGvl(vendorPermission2, Vendor.empty(2));
184+
final VendorPermissionWithGvl vendorPermissionWitGvl3 = withGvl(vendorPermission3, Vendor.empty(3));
185+
final List<VendorPermissionWithGvl> vendorPermissionsWithGvl = asList(
186+
vendorPermissionWitGvl1,
187+
vendorPermissionWitGvl2,
188+
vendorPermissionWitGvl3);
189+
190+
given(basicEnforcePurposeStrategy.allowedByTypeStrategy(any(), any(), any(), any(), anyBoolean()))
191+
.willReturn(Stream.of(vendorPermission1, vendorPermission2));
192+
193+
// when
194+
target.processTypePurposeStrategy(tcString, purpose, vendorPermissionsWithGvl, false);
195+
196+
// then
197+
assertThat(vendorPermission1).isEqualTo(vendorPermissionResult(1, null));
198+
assertThat(vendorPermission2).isEqualTo(vendorPermissionResult(2, "b1"));
199+
assertThat(vendorPermission3).isEqualTo(VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll()));
200+
201+
verify(basicEnforcePurposeStrategy)
202+
.allowedByTypeStrategy(
203+
PURPOSE_CODE,
204+
tcString,
205+
singletonList(vendorPermissionWitGvl1),
206+
singletonList(vendorPermissionWitGvl2),
207+
false);
208+
}
209+
170210
@Test
171211
public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBiddersToFullType() {
172212
// given

src/test/java/org/prebid/server/privacy/gdpr/tcfstrategies/purpose/Purpose04StrategyTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.assertj.core.api.Assertions.assertThat;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.ArgumentMatchers.anyBoolean;
30+
import static org.mockito.ArgumentMatchers.eq;
3031
import static org.mockito.BDDMockito.given;
3132
import static org.mockito.Mock.Strictness.LENIENT;
3233
import static org.mockito.Mockito.times;
@@ -167,6 +168,45 @@ public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBi
167168
false);
168169
}
169170

171+
@Test
172+
public void processTypePurposeStrategyShouldPassDisclosedListWithEnforcementsAndExcludeBiddersToBaseType() {
173+
// given
174+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), any())).willReturn(false);
175+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), eq(1))).willReturn(true);
176+
177+
final List<String> vendorExceptions = asList("b1", "b3");
178+
final Purpose purpose = Purpose.of(EnforcePurpose.basic, false, vendorExceptions, null);
179+
final VendorPermission vendorPermission1 = VendorPermission.of(1, null, PrivacyEnforcementAction.restrictAll());
180+
final VendorPermission vendorPermission2 = VendorPermission.of(2, "b1", PrivacyEnforcementAction.restrictAll());
181+
final VendorPermission vendorPermission3 = VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll());
182+
final VendorPermissionWithGvl vendorPermissionWitGvl1 = withGvl(vendorPermission1, Vendor.empty(1));
183+
final VendorPermissionWithGvl vendorPermissionWitGvl2 = withGvl(vendorPermission2, Vendor.empty(2));
184+
final VendorPermissionWithGvl vendorPermissionWitGvl3 = withGvl(vendorPermission3, Vendor.empty(3));
185+
final List<VendorPermissionWithGvl> vendorPermissionsWithGvl = asList(
186+
vendorPermissionWitGvl1,
187+
vendorPermissionWitGvl2,
188+
vendorPermissionWitGvl3);
189+
190+
given(basicEnforcePurposeStrategy.allowedByTypeStrategy(any(), any(), any(), any(), anyBoolean()))
191+
.willReturn(Stream.of(vendorPermission1, vendorPermission2));
192+
193+
// when
194+
target.processTypePurposeStrategy(tcString, purpose, vendorPermissionsWithGvl, false);
195+
196+
// then
197+
assertThat(vendorPermission1).isEqualTo(vendorPermissionResult(1, null));
198+
assertThat(vendorPermission2).isEqualTo(vendorPermissionResult(2, "b1"));
199+
assertThat(vendorPermission3).isEqualTo(VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll()));
200+
201+
verify(basicEnforcePurposeStrategy)
202+
.allowedByTypeStrategy(
203+
PURPOSE_CODE,
204+
tcString,
205+
singletonList(vendorPermissionWitGvl1),
206+
singletonList(vendorPermissionWitGvl2),
207+
false);
208+
}
209+
170210
@Test
171211
public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBiddersToFullType() {
172212
// given

src/test/java/org/prebid/server/privacy/gdpr/tcfstrategies/purpose/Purpose05StrategyTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.assertj.core.api.Assertions.assertThat;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.ArgumentMatchers.anyBoolean;
30+
import static org.mockito.ArgumentMatchers.eq;
3031
import static org.mockito.BDDMockito.given;
3132
import static org.mockito.Mock.Strictness.LENIENT;
3233
import static org.mockito.Mockito.times;
@@ -167,6 +168,45 @@ public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBi
167168
false);
168169
}
169170

171+
@Test
172+
public void processTypePurposeStrategyShouldPassDisclosedListWithEnforcementsAndExcludeBiddersToBaseType() {
173+
// given
174+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), any())).willReturn(false);
175+
given(disclosedVendorsStrictness.isVendorDisclosed(any(), eq(1))).willReturn(true);
176+
177+
final List<String> vendorExceptions = asList("b1", "b3");
178+
final Purpose purpose = Purpose.of(EnforcePurpose.basic, false, vendorExceptions, null);
179+
final VendorPermission vendorPermission1 = VendorPermission.of(1, null, PrivacyEnforcementAction.restrictAll());
180+
final VendorPermission vendorPermission2 = VendorPermission.of(2, "b1", PrivacyEnforcementAction.restrictAll());
181+
final VendorPermission vendorPermission3 = VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll());
182+
final VendorPermissionWithGvl vendorPermissionWitGvl1 = withGvl(vendorPermission1, Vendor.empty(1));
183+
final VendorPermissionWithGvl vendorPermissionWitGvl2 = withGvl(vendorPermission2, Vendor.empty(2));
184+
final VendorPermissionWithGvl vendorPermissionWitGvl3 = withGvl(vendorPermission3, Vendor.empty(3));
185+
final List<VendorPermissionWithGvl> vendorPermissionsWithGvl = asList(
186+
vendorPermissionWitGvl1,
187+
vendorPermissionWitGvl2,
188+
vendorPermissionWitGvl3);
189+
190+
given(basicEnforcePurposeStrategy.allowedByTypeStrategy(any(), any(), any(), any(), anyBoolean()))
191+
.willReturn(Stream.of(vendorPermission1, vendorPermission2));
192+
193+
// when
194+
target.processTypePurposeStrategy(tcString, purpose, vendorPermissionsWithGvl, false);
195+
196+
// then
197+
assertThat(vendorPermission1).isEqualTo(vendorPermissionResult(1, null));
198+
assertThat(vendorPermission2).isEqualTo(vendorPermissionResult(2, "b1"));
199+
assertThat(vendorPermission3).isEqualTo(VendorPermission.of(3, null, PrivacyEnforcementAction.restrictAll()));
200+
201+
verify(basicEnforcePurposeStrategy)
202+
.allowedByTypeStrategy(
203+
PURPOSE_CODE,
204+
tcString,
205+
singletonList(vendorPermissionWitGvl1),
206+
singletonList(vendorPermissionWitGvl2),
207+
false);
208+
}
209+
170210
@Test
171211
public void processTypePurposeStrategyShouldPassListWithEnforcementsAndExcludeBiddersToFullType() {
172212
// given

0 commit comments

Comments
 (0)