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  }