github.com/prebid/prebid-server@v0.275.0/gdpr/basic_enforcement_test.go (about) 1 package gdpr 2 3 import ( 4 "testing" 5 6 "github.com/prebid/go-gdpr/consentconstants" 7 "github.com/prebid/go-gdpr/vendorconsent" 8 tcf2 "github.com/prebid/go-gdpr/vendorconsent/tcf2" 9 "github.com/prebid/prebid-server/openrtb_ext" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestBasicLegalBasis(t *testing.T) { 15 appnexusID := uint16(32) 16 17 noConsents := "CPerMsAPerMsAAAAAAENCfCAAAAAAAAAAAAAAAAAAAAA" 18 purpose2Consent := "CPerMsAPerMsAAAAAAENCfCAAEAAAAAAAAAAAAAAAAAA" 19 purpose2LI := "CPerMsAPerMsAAAAAAENCfCAAAAAAEAAAAAAAAAAAAAA" 20 vendor32Consent := "CPerMsAPerMsAAAAAAENCfCAAAAAAAAAAAAAAQAAAAAEAAAAAAAA" 21 purpose2AndVendor32Consent := "CPerMsAPerMsAAAAAAENCfCAAEAAAAAAAAAAAQAAAAAEAAAAAAAA" 22 23 tests := []struct { 24 description string 25 config purposeConfig 26 consent string 27 overrides Overrides 28 wantResult bool 29 }{ 30 { 31 description: "enforce purpose & vendors are off", 32 consent: noConsents, 33 config: purposeConfig{ 34 PurposeID: consentconstants.Purpose(2), 35 EnforcePurpose: false, 36 EnforceVendors: false, 37 }, 38 wantResult: true, 39 }, 40 { 41 description: "enforce purpose on, purpose consent N", 42 consent: noConsents, 43 config: purposeConfig{ 44 PurposeID: consentconstants.Purpose(2), 45 EnforcePurpose: true, 46 EnforceVendors: false, 47 }, 48 wantResult: false, 49 }, 50 { 51 description: "enforce purpose on, purpose consent Y", 52 consent: purpose2Consent, 53 config: purposeConfig{ 54 PurposeID: consentconstants.Purpose(2), 55 EnforcePurpose: true, 56 EnforceVendors: false, 57 }, 58 wantResult: true, 59 }, 60 { 61 description: "enforce purpose on, purpose consent Y, enforce vendors off but overrides treats it as on", 62 consent: purpose2Consent, 63 config: purposeConfig{ 64 PurposeID: consentconstants.Purpose(2), 65 EnforcePurpose: true, 66 EnforceVendors: false, 67 }, 68 overrides: Overrides{enforceVendors: true}, 69 wantResult: false, 70 }, 71 { 72 description: "enforce purpose on, purpose consent Y, vendor consent Y, enforce vendors off but overrides treats it as on", 73 consent: purpose2AndVendor32Consent, 74 config: purposeConfig{ 75 PurposeID: consentconstants.Purpose(2), 76 EnforcePurpose: true, 77 EnforceVendors: false, 78 }, 79 overrides: Overrides{enforceVendors: true}, 80 wantResult: true, 81 }, 82 { 83 description: "enforce purpose on, purpose LI Transparency Y", 84 consent: purpose2LI, 85 config: purposeConfig{ 86 PurposeID: consentconstants.Purpose(2), 87 EnforcePurpose: true, 88 EnforceVendors: false, 89 }, 90 wantResult: false, 91 }, 92 { 93 description: "enforce purpose on, purpose LI Transparency Y but overrides allow it", 94 consent: purpose2LI, 95 config: purposeConfig{ 96 PurposeID: consentconstants.Purpose(2), 97 EnforcePurpose: true, 98 EnforceVendors: false, 99 }, 100 overrides: Overrides{allowLITransparency: true}, 101 wantResult: true, 102 }, 103 { 104 description: "enforce vendors on, vendor consent N", 105 consent: noConsents, 106 config: purposeConfig{ 107 PurposeID: consentconstants.Purpose(2), 108 EnforcePurpose: false, 109 EnforceVendors: true, 110 }, 111 wantResult: false, 112 }, 113 { 114 description: "enforce vendors on, vendor consent Y", 115 consent: vendor32Consent, 116 config: purposeConfig{ 117 PurposeID: consentconstants.Purpose(2), 118 EnforcePurpose: false, 119 EnforceVendors: true, 120 }, 121 wantResult: true, 122 }, 123 { 124 description: "enforce vendors on, vendor consent Y, enforce purpose off but overrides treats it as on", 125 consent: vendor32Consent, 126 config: purposeConfig{ 127 PurposeID: consentconstants.Purpose(2), 128 EnforcePurpose: false, 129 EnforceVendors: true, 130 }, 131 overrides: Overrides{enforcePurpose: true}, 132 wantResult: false, 133 }, 134 { 135 description: "enforce vendors on, purpose consent Y, vendor consent Y, enforce purpose off but overrides treats it as on", 136 consent: purpose2AndVendor32Consent, 137 config: purposeConfig{ 138 PurposeID: consentconstants.Purpose(2), 139 EnforcePurpose: false, 140 EnforceVendors: true, 141 }, 142 overrides: Overrides{enforcePurpose: true}, 143 wantResult: true, 144 }, 145 { 146 description: "enforce vendors on, vendor consent N, bidder is a basic vendor", 147 consent: noConsents, 148 config: purposeConfig{ 149 PurposeID: consentconstants.Purpose(2), 150 EnforcePurpose: false, 151 EnforceVendors: true, 152 BasicEnforcementVendorsMap: map[string]struct{}{string(openrtb_ext.BidderAppnexus): {}}, 153 }, 154 wantResult: true, 155 }, 156 { 157 description: "enforce purpose & vendors are on", 158 consent: noConsents, 159 config: purposeConfig{ 160 PurposeID: consentconstants.Purpose(2), 161 EnforcePurpose: true, 162 EnforceVendors: true, 163 }, 164 wantResult: false, 165 }, 166 { 167 description: "enforce purpose & vendors are on, bidder is a vendor exception", 168 consent: noConsents, 169 config: purposeConfig{ 170 PurposeID: consentconstants.Purpose(2), 171 EnforcePurpose: true, 172 EnforceVendors: true, 173 VendorExceptionMap: map[openrtb_ext.BidderName]struct{}{openrtb_ext.BidderAppnexus: {}}, 174 }, 175 wantResult: true, 176 }, 177 { 178 description: "enforce purpose & vendors are on, bidder is a vendor exception but overrides disallow them", 179 consent: noConsents, 180 config: purposeConfig{ 181 PurposeID: consentconstants.Purpose(2), 182 EnforcePurpose: true, 183 EnforceVendors: true, 184 VendorExceptionMap: map[openrtb_ext.BidderName]struct{}{openrtb_ext.BidderAppnexus: {}}, 185 }, 186 overrides: Overrides{blockVendorExceptions: true}, 187 wantResult: false, 188 }, 189 { 190 description: "enforce purpose & vendors are on, purpose consent Y, vendor consent N", 191 consent: purpose2Consent, 192 config: purposeConfig{ 193 PurposeID: consentconstants.Purpose(2), 194 EnforcePurpose: true, 195 EnforceVendors: true, 196 }, 197 wantResult: false, 198 }, 199 { 200 description: "enforce purpose & vendors are on, purpose consent Y, vendor consent N, bidder is a basic vendor", 201 consent: purpose2Consent, 202 config: purposeConfig{ 203 PurposeID: consentconstants.Purpose(2), 204 EnforcePurpose: true, 205 EnforceVendors: true, 206 BasicEnforcementVendorsMap: map[string]struct{}{string(openrtb_ext.BidderAppnexus): {}}, 207 }, 208 wantResult: true, 209 }, 210 { 211 description: "enforce purpose & vendors are on, purpose consent Y, vendor consent Y", 212 consent: purpose2AndVendor32Consent, 213 config: purposeConfig{ 214 PurposeID: consentconstants.Purpose(2), 215 EnforcePurpose: true, 216 EnforceVendors: true, 217 }, 218 wantResult: true, 219 }, 220 } 221 222 for _, tt := range tests { 223 // convert consent string to TCF2 object 224 parsedConsent, err := vendorconsent.ParseString(tt.consent) 225 if err != nil { 226 t.Fatalf("Failed to parse consent %s: %s\n", tt.consent, tt.description) 227 } 228 consentMeta, ok := parsedConsent.(tcf2.ConsentMetadata) 229 if !ok { 230 t.Fatalf("Failed to convert consent %s: %s\n", tt.consent, tt.description) 231 } 232 233 enforcer := BasicEnforcement{cfg: tt.config} 234 235 vendorInfo := VendorInfo{vendorID: appnexusID, vendor: nil} 236 result := enforcer.LegalBasis(vendorInfo, openrtb_ext.BidderAppnexus, consentMeta, tt.overrides) 237 238 assert.Equal(t, tt.wantResult, result, tt.description) 239 } 240 }