github.com/prebid/prebid-server@v0.275.0/openrtb_ext/alternatebiddercodes_test.go (about)

     1  package openrtb_ext
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestAlternateBidderCodes_IsValidBidderCode(t *testing.T) {
    11  	type fields struct {
    12  		Enabled bool
    13  		Bidders map[string]ExtAdapterAlternateBidderCodes
    14  	}
    15  	type args struct {
    16  		bidder          string
    17  		alternateBidder string
    18  	}
    19  	tests := []struct {
    20  		name        string
    21  		fields      fields
    22  		args        args
    23  		wantIsValid bool
    24  		wantErr     error
    25  	}{
    26  		{
    27  			name:        "alternateBidder is not set/blank (default non-extra bid case)",
    28  			wantIsValid: true,
    29  		},
    30  		{
    31  			name: "alternateBidder and bidder are same (default non-extra bid case with seat's alternateBidder explicitly set)",
    32  			args: args{
    33  				bidder:          "pubmatic",
    34  				alternateBidder: "pubmatic",
    35  			},
    36  			wantIsValid: true,
    37  		},
    38  		{
    39  			name: "account.alternatebiddercodes config not defined (default, reject bid)",
    40  			args: args{
    41  				bidder:          "pubmatic",
    42  				alternateBidder: "groupm",
    43  			},
    44  			wantIsValid: false,
    45  			wantErr:     errors.New(`alternateBidderCodes disabled for "pubmatic", rejecting bids for "groupm"`),
    46  		},
    47  		{
    48  			name: "account.alternatebiddercodes config enabled but adapter config not defined",
    49  			args: args{
    50  				bidder:          "pubmatic",
    51  				alternateBidder: "groupm",
    52  			},
    53  			fields:      fields{Enabled: true},
    54  			wantIsValid: false,
    55  			wantErr:     errors.New(`alternateBidderCodes not defined for adapter "pubmatic", rejecting bids for "groupm"`),
    56  		},
    57  		{
    58  			name: "account.alternatebiddercodes config enabled but adapter config is not available",
    59  			args: args{
    60  				bidder:          "pubmatic",
    61  				alternateBidder: "groupm",
    62  			},
    63  			fields: fields{
    64  				Enabled: true,
    65  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
    66  					"appnexus": {},
    67  				},
    68  			},
    69  			wantIsValid: false,
    70  			wantErr:     errors.New(`alternateBidderCodes not defined for adapter "pubmatic", rejecting bids for "groupm"`),
    71  		},
    72  		{
    73  			name: "account.alternatebiddercodes config enabled but adapter config is disabled",
    74  			args: args{
    75  				bidder:          "pubmatic",
    76  				alternateBidder: "groupm",
    77  			},
    78  			fields: fields{
    79  				Enabled: true,
    80  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
    81  					"pubmatic": {Enabled: false},
    82  				},
    83  			},
    84  			wantIsValid: false,
    85  			wantErr:     errors.New(`alternateBidderCodes disabled for "pubmatic", rejecting bids for "groupm"`),
    86  		},
    87  		{
    88  			name: "account.alternatebiddercodes and adapter config enabled but adapter config does not have allowedBidderCodes defined",
    89  			args: args{
    90  				bidder:          "pubmatic",
    91  				alternateBidder: "groupm",
    92  			},
    93  			fields: fields{
    94  				Enabled: true,
    95  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
    96  					"pubmatic": {Enabled: true},
    97  				},
    98  			},
    99  			wantIsValid: true,
   100  		},
   101  		{
   102  			name: "allowedBidderCodes is *",
   103  			args: args{
   104  				bidder:          "pubmatic",
   105  				alternateBidder: "groupm",
   106  			},
   107  			fields: fields{
   108  				Enabled: true,
   109  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
   110  					"pubmatic": {
   111  						Enabled:            true,
   112  						AllowedBidderCodes: []string{"*"},
   113  					},
   114  				},
   115  			},
   116  			wantIsValid: true,
   117  		},
   118  		{
   119  			name: "allowedBidderCodes is in the list",
   120  			args: args{
   121  				bidder:          "pubmatic",
   122  				alternateBidder: "groupm",
   123  			},
   124  			fields: fields{
   125  				Enabled: true,
   126  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
   127  					"pubmatic": {
   128  						Enabled:            true,
   129  						AllowedBidderCodes: []string{"groupm"},
   130  					},
   131  				},
   132  			},
   133  			wantIsValid: true,
   134  		},
   135  		{
   136  			name: "allowedBidderCodes is not in the list",
   137  			args: args{
   138  				bidder:          "pubmatic",
   139  				alternateBidder: "groupm",
   140  			},
   141  			fields: fields{
   142  				Enabled: true,
   143  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
   144  					"pubmatic": {
   145  						Enabled:            true,
   146  						AllowedBidderCodes: []string{"xyz"},
   147  					},
   148  				},
   149  			},
   150  			wantIsValid: false,
   151  			wantErr:     errors.New(`invalid biddercode "groupm" sent by adapter "pubmatic"`),
   152  		},
   153  		{
   154  			name: "account.alternatebiddercodes and adapter config enabled but adapter config has allowedBidderCodes list empty",
   155  			args: args{
   156  				bidder:          "pubmatic",
   157  				alternateBidder: "groupm",
   158  			},
   159  			fields: fields{
   160  				Enabled: true,
   161  				Bidders: map[string]ExtAdapterAlternateBidderCodes{
   162  					"pubmatic": {Enabled: true, AllowedBidderCodes: []string{}},
   163  				},
   164  			},
   165  			wantIsValid: false,
   166  			wantErr:     errors.New(`invalid biddercode "groupm" sent by adapter "pubmatic"`),
   167  		},
   168  	}
   169  	for _, tt := range tests {
   170  		t.Run(tt.name, func(t *testing.T) {
   171  			a := &ExtAlternateBidderCodes{
   172  				Enabled: tt.fields.Enabled,
   173  				Bidders: tt.fields.Bidders,
   174  			}
   175  			gotIsValid, gotErr := a.IsValidBidderCode(tt.args.bidder, tt.args.alternateBidder)
   176  			assert.Equal(t, tt.wantIsValid, gotIsValid)
   177  			assert.Equal(t, tt.wantErr, gotErr)
   178  		})
   179  	}
   180  }