github.com/prebid/prebid-server@v0.275.0/adapters/ix/ix_test.go (about)

     1  package ix
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/prebid/prebid-server/adapters"
     8  	"github.com/prebid/prebid-server/adapters/adapterstest"
     9  	"github.com/prebid/prebid-server/config"
    10  	"github.com/prebid/prebid-server/openrtb_ext"
    11  	"github.com/prebid/prebid-server/version"
    12  	"github.com/stretchr/testify/assert"
    13  
    14  	"github.com/prebid/openrtb/v19/adcom1"
    15  	"github.com/prebid/openrtb/v19/openrtb2"
    16  )
    17  
    18  const endpoint string = "http://host/endpoint"
    19  
    20  func TestJsonSamples(t *testing.T) {
    21  	if bidder, err := Builder(openrtb_ext.BidderIx, config.Adapter{Endpoint: endpoint}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"}); err == nil {
    22  		adapterstest.RunJSONBidderTest(t, "ixtest", bidder)
    23  	} else {
    24  		t.Fatalf("Builder returned unexpected error %v", err)
    25  	}
    26  }
    27  
    28  func TestIxMakeBidsWithCategoryDuration(t *testing.T) {
    29  	bidder := &IxAdapter{}
    30  
    31  	mockedReq := &openrtb2.BidRequest{
    32  		Imp: []openrtb2.Imp{{
    33  			ID: "1_1",
    34  			Video: &openrtb2.Video{
    35  				W:           640,
    36  				H:           360,
    37  				MIMEs:       []string{"video/mp4"},
    38  				MaxDuration: 60,
    39  				Protocols:   []adcom1.MediaCreativeSubtype{2, 3, 5, 6},
    40  			},
    41  			Ext: json.RawMessage(
    42  				`{
    43  					"prebid": {},
    44  					"bidder": {
    45  						"siteID": "123456"
    46  					}
    47  				}`,
    48  			)},
    49  		},
    50  	}
    51  	mockedExtReq := &adapters.RequestData{}
    52  	mockedBidResponse := &openrtb2.BidResponse{
    53  		ID: "test-1",
    54  		SeatBid: []openrtb2.SeatBid{{
    55  			Seat: "Buyer",
    56  			Bid: []openrtb2.Bid{{
    57  				ID:    "1",
    58  				ImpID: "1_1",
    59  				Price: 1.23,
    60  				AdID:  "123",
    61  				Ext: json.RawMessage(
    62  					`{
    63  						"prebid": {
    64  							"video": {
    65  								"duration": 60,
    66  								"primary_category": "IAB18-1"
    67  							}
    68  						}
    69  					}`,
    70  				),
    71  			}},
    72  		}},
    73  	}
    74  	body, _ := json.Marshal(mockedBidResponse)
    75  	mockedRes := &adapters.ResponseData{
    76  		StatusCode: 200,
    77  		Body:       body,
    78  	}
    79  
    80  	expectedBidCount := 1
    81  	expectedBidType := openrtb_ext.BidTypeVideo
    82  	expectedBidDuration := 60
    83  	expectedBidCategory := "IAB18-1"
    84  	expectedErrorCount := 0
    85  
    86  	bidResponse, errors := bidder.MakeBids(mockedReq, mockedExtReq, mockedRes)
    87  
    88  	if len(bidResponse.Bids) != expectedBidCount {
    89  		t.Errorf("should have 1 bid, bids=%v", bidResponse.Bids)
    90  	}
    91  	if bidResponse.Bids[0].BidType != expectedBidType {
    92  		t.Errorf("bid type should be video, bidType=%s", bidResponse.Bids[0].BidType)
    93  	}
    94  	if bidResponse.Bids[0].BidVideo.Duration != expectedBidDuration {
    95  		t.Errorf("video duration should be set")
    96  	}
    97  	if bidResponse.Bids[0].Bid.Cat[0] != expectedBidCategory {
    98  		t.Errorf("bid category should be set")
    99  	}
   100  	if len(errors) != expectedErrorCount {
   101  		t.Errorf("should not have any errors, errors=%v", errors)
   102  	}
   103  }
   104  
   105  func TestIxMakeRequestWithGppString(t *testing.T) {
   106  	bidder := &IxAdapter{}
   107  
   108  	testGppString := "DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN"
   109  
   110  	mockedReq := &openrtb2.BidRequest{
   111  		Imp: []openrtb2.Imp{{
   112  			ID: "1_1",
   113  			Video: &openrtb2.Video{
   114  				W:           640,
   115  				H:           360,
   116  				MIMEs:       []string{"video/mp4"},
   117  				MaxDuration: 60,
   118  				Protocols:   []adcom1.MediaCreativeSubtype{2, 3, 5, 6},
   119  			},
   120  			Ext: json.RawMessage(
   121  				`{
   122  					"prebid": {},
   123  					"bidder": {
   124  						"siteId": "123456"
   125  					}
   126  				}`,
   127  			)},
   128  		},
   129  		Regs: &openrtb2.Regs{
   130  			GPP: testGppString,
   131  		},
   132  	}
   133  
   134  	expectedRequestCount := 1
   135  	expectedErrorCount := 0
   136  	var reqInfo *adapters.ExtraRequestInfo
   137  
   138  	requests, errors := bidder.MakeRequests(mockedReq, reqInfo)
   139  
   140  	if len(requests) != expectedRequestCount {
   141  		t.Errorf("should have 1 request, requests=%v", requests)
   142  	}
   143  
   144  	if len(errors) != expectedErrorCount {
   145  		t.Errorf("should not have any errors, errors=%v", errors)
   146  	}
   147  
   148  	req := &openrtb2.BidRequest{}
   149  	json.Unmarshal(requests[0].Body, req)
   150  
   151  	assert.Equal(t, req.Regs.GPP, testGppString)
   152  }
   153  
   154  func TestBuildIxDiag(t *testing.T) {
   155  	testCases := []struct {
   156  		description     string
   157  		request         *openrtb2.BidRequest
   158  		expectedRequest *openrtb2.BidRequest
   159  		expectError     bool
   160  		pbsVersion      string
   161  	}{
   162  		{
   163  			description: "Base Test",
   164  			request: &openrtb2.BidRequest{
   165  				ID:  "1",
   166  				Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}}}`),
   167  			},
   168  			expectedRequest: &openrtb2.BidRequest{
   169  				ID:  "1",
   170  				Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbsv":"1.880","pbjsv":"7.20"}}`),
   171  			},
   172  			expectError: false,
   173  			pbsVersion:  "1.880-abcdef",
   174  		},
   175  		{
   176  			description: "Base test for nil channel but non-empty ext prebid payload",
   177  			request: &openrtb2.BidRequest{
   178  				ID:  "1",
   179  				Ext: json.RawMessage(`{"prebid":{"server":{"externalurl":"http://localhost:8000"}}}`),
   180  			},
   181  			expectedRequest: &openrtb2.BidRequest{
   182  				ID:  "1",
   183  				Ext: json.RawMessage(`{"prebid":{"server":{"externalurl":"http://localhost:8000","gvlid":0,"datacenter":""}},"ixdiag":{"pbsv":"1.880"}}`),
   184  			},
   185  			expectError: false,
   186  			pbsVersion:  "1.880-abcdef",
   187  		},
   188  		{
   189  			description: "No Ext",
   190  			request: &openrtb2.BidRequest{
   191  				ID: "1",
   192  			},
   193  			expectedRequest: &openrtb2.BidRequest{
   194  				ID:  "1",
   195  				Ext: json.RawMessage(`{"prebid":null,"ixdiag":{"pbsv":"1.880"}}`),
   196  			},
   197  			expectError: false,
   198  			pbsVersion:  "1.880-abcdef",
   199  		},
   200  		{
   201  			description: "PBS Version Two Hypens",
   202  			request: &openrtb2.BidRequest{
   203  				ID: "1",
   204  			},
   205  			expectedRequest: &openrtb2.BidRequest{
   206  				ID:  "1",
   207  				Ext: json.RawMessage(`{"prebid":null,"ixdiag":{"pbsv":"0.23.1"}}`),
   208  			},
   209  			expectError: false,
   210  			pbsVersion:  "0.23.1-3-g4ee257d8",
   211  		},
   212  		{
   213  			description: "PBS Version no Hyphen",
   214  			request: &openrtb2.BidRequest{
   215  				ID:  "1",
   216  				Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}}}`),
   217  			},
   218  			expectedRequest: &openrtb2.BidRequest{
   219  				ID:  "1",
   220  				Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbsv":"1.880","pbjsv":"7.20"}}`),
   221  			},
   222  			expectError: false,
   223  			pbsVersion:  "1.880",
   224  		},
   225  		{
   226  			description: "PBS Version empty string",
   227  			request: &openrtb2.BidRequest{
   228  				ID:  "1",
   229  				Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}}}`),
   230  			},
   231  			expectedRequest: &openrtb2.BidRequest{
   232  				ID:  "1",
   233  				Ext: json.RawMessage(`{"prebid":{"channel":{"name":"web","version":"7.20"}},"ixdiag":{"pbjsv":"7.20"}}`),
   234  			},
   235  			expectError: false,
   236  			pbsVersion:  "",
   237  		},
   238  		{
   239  			description: "Error Test",
   240  			request: &openrtb2.BidRequest{
   241  				ID:  "1",
   242  				Ext: json.RawMessage(`{"prebid":"channel":{"name":"web","version":"7.20"}}}`),
   243  			},
   244  			expectedRequest: &openrtb2.BidRequest{
   245  				ID:  "1",
   246  				Ext: nil,
   247  			},
   248  			expectError: true,
   249  			pbsVersion:  "1.880-abcdef",
   250  		},
   251  	}
   252  
   253  	for _, test := range testCases {
   254  		t.Run(test.description, func(t *testing.T) {
   255  			version.Ver = test.pbsVersion
   256  			ixDiag := &IxDiag{}
   257  			err := setIxDiagIntoExtRequest(test.request, ixDiag)
   258  			if test.expectError {
   259  				assert.NotNil(t, err)
   260  			} else {
   261  				assert.Equal(t, test.expectedRequest, test.request)
   262  				assert.Nil(t, err)
   263  			}
   264  		})
   265  	}
   266  }
   267  
   268  func TestMakeRequestsErrIxDiag(t *testing.T) {
   269  	bidder := &IxAdapter{}
   270  	req := &openrtb2.BidRequest{
   271  		ID:  "1",
   272  		Ext: json.RawMessage(`{"prebid":"channel":{"name":"web","version":"7.20"}}}`),
   273  	}
   274  	_, errs := bidder.MakeRequests(req, nil)
   275  	assert.Len(t, errs, 1)
   276  }