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 }