github.com/prebid/prebid-server@v0.275.0/openrtb_ext/convert_down_test.go (about) 1 package openrtb_ext 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/prebid/openrtb/v19/adcom1" 8 "github.com/prebid/openrtb/v19/openrtb2" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestConvertDownTo25(t *testing.T) { 13 testCases := []struct { 14 name string 15 givenRequest openrtb2.BidRequest 16 expectedRequest openrtb2.BidRequest 17 expectedErr string 18 }{ 19 { 20 name: "2.6-to-2.5", 21 givenRequest: openrtb2.BidRequest{ 22 ID: "anyID", 23 Imp: []openrtb2.Imp{{Rwdd: 1}}, 24 Source: &openrtb2.Source{SChain: &openrtb2.SupplyChain{Complete: 1, Nodes: []openrtb2.SupplyChainNode{}, Ver: "2"}}, 25 Regs: &openrtb2.Regs{GDPR: openrtb2.Int8Ptr(1), USPrivacy: "3"}, 26 User: &openrtb2.User{Consent: "1", EIDs: []openrtb2.EID{{Source: "42"}}}, 27 }, 28 expectedRequest: openrtb2.BidRequest{ 29 ID: "anyID", 30 Imp: []openrtb2.Imp{{Ext: json.RawMessage(`{"prebid":{"is_rewarded_inventory":1}}`)}}, 31 Source: &openrtb2.Source{Ext: json.RawMessage(`{"schain":{"complete":1,"nodes":[],"ver":"2"}}`)}, 32 Regs: &openrtb2.Regs{Ext: json.RawMessage(`{"gdpr":1,"us_privacy":"3"}`)}, 33 User: &openrtb2.User{Ext: json.RawMessage(`{"consent":"1","eids":[{"source":"42"}]}`)}, 34 }, 35 }, 36 { 37 name: "2.6-dropped", // integration with clear26Fields 38 givenRequest: openrtb2.BidRequest{ 39 ID: "anyID", 40 CatTax: adcom1.CatTaxIABContent10, 41 Device: &openrtb2.Device{LangB: "anyLang"}, 42 }, 43 expectedRequest: openrtb2.BidRequest{ 44 ID: "anyID", 45 Device: &openrtb2.Device{}, 46 }, 47 }, 48 { 49 name: "2.6-202211-dropped", // integration with clear202211Fields 50 givenRequest: openrtb2.BidRequest{ 51 ID: "anyID", 52 App: &openrtb2.App{InventoryPartnerDomain: "anyDomain"}, 53 }, 54 expectedRequest: openrtb2.BidRequest{ 55 ID: "anyID", 56 App: &openrtb2.App{}, 57 }, 58 }, 59 { 60 name: "2.6-202303-dropped", // integration with clear202303Fields 61 givenRequest: openrtb2.BidRequest{ 62 ID: "anyID", 63 Imp: []openrtb2.Imp{{ID: "1", Refresh: &openrtb2.Refresh{Count: 1}}}, 64 }, 65 expectedRequest: openrtb2.BidRequest{ 66 ID: "anyID", 67 Imp: []openrtb2.Imp{{ID: "1"}}, 68 }, 69 }, 70 { 71 name: "2.6-to-2.5-OtherExtFields", 72 givenRequest: openrtb2.BidRequest{ 73 ID: "anyID", 74 Imp: []openrtb2.Imp{{Rwdd: 1, Ext: json.RawMessage(`{"other":"otherImp"}`)}}, 75 Ext: json.RawMessage(`{"other":"otherExt"}`), 76 Source: &openrtb2.Source{SChain: &openrtb2.SupplyChain{Complete: 1, Nodes: []openrtb2.SupplyChainNode{}, Ver: "2"}, Ext: json.RawMessage(`{"other":"otherSource"}`)}, 77 Regs: &openrtb2.Regs{GDPR: openrtb2.Int8Ptr(1), USPrivacy: "3", Ext: json.RawMessage(`{"other":"otherRegs"}`)}, 78 User: &openrtb2.User{Consent: "1", EIDs: []openrtb2.EID{{Source: "42"}}, Ext: json.RawMessage(`{"other":"otherUser"}`)}, 79 }, 80 expectedRequest: openrtb2.BidRequest{ 81 ID: "anyID", 82 Imp: []openrtb2.Imp{{Ext: json.RawMessage(`{"other":"otherImp","prebid":{"is_rewarded_inventory":1}}`)}}, 83 Ext: json.RawMessage(`{"other":"otherExt"}`), 84 Source: &openrtb2.Source{Ext: json.RawMessage(`{"other":"otherSource","schain":{"complete":1,"nodes":[],"ver":"2"}}`)}, 85 Regs: &openrtb2.Regs{Ext: json.RawMessage(`{"gdpr":1,"other":"otherRegs","us_privacy":"3"}`)}, 86 User: &openrtb2.User{Ext: json.RawMessage(`{"consent":"1","eids":[{"source":"42"}],"other":"otherUser"}`)}, 87 }, 88 }, 89 { 90 name: "malformed-shhain", 91 givenRequest: openrtb2.BidRequest{ 92 ID: "anyID", 93 Source: &openrtb2.Source{SChain: &openrtb2.SupplyChain{Complete: 1, Nodes: []openrtb2.SupplyChainNode{}, Ver: "2"}, Ext: json.RawMessage(`malformed`)}, 94 }, 95 expectedErr: "invalid character 'm' looking for beginning of value", 96 }, 97 { 98 name: "malformed-gdpr", 99 givenRequest: openrtb2.BidRequest{ 100 ID: "anyID", 101 Regs: &openrtb2.Regs{GDPR: openrtb2.Int8Ptr(1), Ext: json.RawMessage(`malformed`)}, 102 }, 103 expectedErr: "invalid character 'm' looking for beginning of value", 104 }, 105 { 106 name: "malformed-consent", 107 givenRequest: openrtb2.BidRequest{ 108 ID: "anyID", 109 User: &openrtb2.User{Consent: "1", Ext: json.RawMessage(`malformed`)}, 110 }, 111 expectedErr: "invalid character 'm' looking for beginning of value", 112 }, 113 { 114 name: "malformed-usprivacy", 115 givenRequest: openrtb2.BidRequest{ 116 ID: "anyID", 117 Regs: &openrtb2.Regs{USPrivacy: "3", Ext: json.RawMessage(`malformed`)}, 118 }, 119 expectedErr: "invalid character 'm' looking for beginning of value", 120 }, 121 { 122 name: "malformed-eid", 123 givenRequest: openrtb2.BidRequest{ 124 ID: "anyID", 125 User: &openrtb2.User{EIDs: []openrtb2.EID{{Source: "42"}}, Ext: json.RawMessage(`malformed`)}, 126 }, 127 expectedErr: "invalid character 'm' looking for beginning of value", 128 }, 129 { 130 name: "malformed-imp", 131 givenRequest: openrtb2.BidRequest{ 132 ID: "anyID", 133 Imp: []openrtb2.Imp{{Rwdd: 1, Ext: json.RawMessage(`malformed`)}}, 134 }, 135 expectedErr: "invalid character 'm' looking for beginning of value", 136 }, 137 } 138 139 for _, test := range testCases { 140 t.Run(test.name, func(t *testing.T) { 141 w := &RequestWrapper{BidRequest: &test.givenRequest} 142 err := ConvertDownTo25(w) 143 144 if len(test.expectedErr) > 0 { 145 assert.EqualError(t, err, test.expectedErr, "error") 146 } else { 147 assert.NoError(t, w.RebuildRequest(), "error") 148 assert.Equal(t, test.expectedRequest, *w.BidRequest, "result") 149 } 150 }) 151 } 152 } 153 154 func TestMoveSupplyChainFrom26To25(t *testing.T) { 155 var ( 156 schain1 = &openrtb2.SupplyChain{Complete: 1, Nodes: []openrtb2.SupplyChainNode{}, Ver: "1"} 157 schain1Json = json.RawMessage(`{"schain":{"complete":1,"nodes":[],"ver":"1"}}`) 158 schain2Json = json.RawMessage(`{"schain":{"complete":1,"nodes":[],"ver":"2"}}`) 159 ) 160 161 testCases := []struct { 162 name string 163 givenRequest openrtb2.BidRequest 164 expectedRequest openrtb2.BidRequest 165 expectedErr string 166 }{ 167 { 168 name: "notpresent-source", 169 givenRequest: openrtb2.BidRequest{}, 170 expectedRequest: openrtb2.BidRequest{}, 171 }, 172 { 173 name: "notpresent-source-schain", 174 givenRequest: openrtb2.BidRequest{Source: &openrtb2.Source{}}, 175 expectedRequest: openrtb2.BidRequest{Source: &openrtb2.Source{}}, 176 }, 177 { 178 name: "2.6-migratedto-2.5", 179 givenRequest: openrtb2.BidRequest{Source: &openrtb2.Source{SChain: schain1}}, 180 expectedRequest: openrtb2.BidRequest{Source: &openrtb2.Source{Ext: schain1Json}}, 181 }, 182 { 183 name: "2.5-overwritten", 184 givenRequest: openrtb2.BidRequest{Source: &openrtb2.Source{SChain: schain1, Ext: schain2Json}}, 185 expectedRequest: openrtb2.BidRequest{Source: &openrtb2.Source{Ext: schain1Json}}, 186 }, 187 { 188 name: "malformed", 189 givenRequest: openrtb2.BidRequest{Source: &openrtb2.Source{SChain: schain1, Ext: json.RawMessage(`malformed`)}}, 190 expectedErr: "invalid character 'm' looking for beginning of value", 191 }, 192 } 193 194 for _, test := range testCases { 195 t.Run(test.name, func(t *testing.T) { 196 w := &RequestWrapper{BidRequest: &test.givenRequest} 197 err := moveSupplyChainFrom26To25(w) 198 199 if len(test.expectedErr) > 0 { 200 assert.EqualError(t, err, test.expectedErr, "error") 201 } else { 202 assert.NoError(t, w.RebuildRequest(), "error") 203 assert.Equal(t, test.expectedRequest, *w.BidRequest, "result") 204 } 205 }) 206 } 207 } 208 209 func TestMoveGDPRFrom26To25(t *testing.T) { 210 testCases := []struct { 211 name string 212 givenRequest openrtb2.BidRequest 213 expectedRequest openrtb2.BidRequest 214 expectedErr string 215 }{ 216 { 217 name: "notpresent-regs", 218 givenRequest: openrtb2.BidRequest{}, 219 expectedRequest: openrtb2.BidRequest{}, 220 }, 221 { 222 name: "notpresent-regs-gdpr", 223 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{}}, 224 expectedRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{}}, 225 }, 226 { 227 name: "2.6-migratedto-2.5", 228 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{GDPR: openrtb2.Int8Ptr(0)}}, 229 expectedRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{Ext: json.RawMessage(`{"gdpr":0}`)}}, 230 }, 231 { 232 name: "2.5-overwritten", 233 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{GDPR: openrtb2.Int8Ptr(0), Ext: json.RawMessage(`{"gdpr":1}`)}}, 234 expectedRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{Ext: json.RawMessage(`{"gdpr":0}`)}}, 235 }, 236 { 237 name: "malformed", 238 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{GDPR: openrtb2.Int8Ptr(0), Ext: json.RawMessage(`malformed`)}}, 239 expectedErr: "invalid character 'm' looking for beginning of value", 240 }, 241 } 242 243 for _, test := range testCases { 244 t.Run(test.name, func(t *testing.T) { 245 w := &RequestWrapper{BidRequest: &test.givenRequest} 246 err := moveGDPRFrom26To25(w) 247 248 if len(test.expectedErr) > 0 { 249 assert.EqualError(t, err, test.expectedErr, "error") 250 } else { 251 assert.NoError(t, w.RebuildRequest(), "error") 252 assert.Equal(t, test.expectedRequest, *w.BidRequest, "result") 253 } 254 }) 255 } 256 } 257 258 func TestMoveConsentFrom26To25(t *testing.T) { 259 testCases := []struct { 260 name string 261 givenRequest openrtb2.BidRequest 262 expectedRequest openrtb2.BidRequest 263 expectedErr string 264 }{ 265 { 266 name: "notpresent-user", 267 givenRequest: openrtb2.BidRequest{}, 268 expectedRequest: openrtb2.BidRequest{}, 269 }, 270 { 271 name: "notpresent-user-consent", 272 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{}}, 273 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{}}, 274 }, 275 { 276 name: "2.6-migratedto-2.5", 277 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{Consent: "1"}}, 278 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{Ext: json.RawMessage(`{"consent":"1"}`)}}, 279 }, 280 { 281 name: "2.5-overwritten", 282 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{Consent: "1", Ext: json.RawMessage(`{"consent":"2"}`)}}, 283 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{Ext: json.RawMessage(`{"consent":"1"}`)}}, 284 }, 285 { 286 name: "malformed", 287 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{Consent: "1", Ext: json.RawMessage(`malformed`)}}, 288 expectedErr: "invalid character 'm' looking for beginning of value", 289 }, 290 } 291 292 for _, test := range testCases { 293 t.Run(test.name, func(t *testing.T) { 294 w := &RequestWrapper{BidRequest: &test.givenRequest} 295 err := moveConsentFrom26To25(w) 296 297 if len(test.expectedErr) > 0 { 298 assert.EqualError(t, err, test.expectedErr, "error") 299 } else { 300 assert.NoError(t, w.RebuildRequest(), "error") 301 assert.Equal(t, test.expectedRequest, *w.BidRequest, "result") 302 } 303 }) 304 } 305 } 306 307 func TestMoveUSPrivacyFrom26To25(t *testing.T) { 308 testCases := []struct { 309 name string 310 givenRequest openrtb2.BidRequest 311 expectedRequest openrtb2.BidRequest 312 expectedErr string 313 }{ 314 { 315 name: "notpresent-regs", 316 givenRequest: openrtb2.BidRequest{}, 317 expectedRequest: openrtb2.BidRequest{}, 318 }, 319 { 320 name: "notpresent-regs-usprivacy", 321 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{}}, 322 expectedRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{}}, 323 }, 324 { 325 name: "2.6-migratedto-2.5", 326 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{USPrivacy: "1"}}, 327 expectedRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{Ext: json.RawMessage(`{"us_privacy":"1"}`)}}, 328 }, 329 { 330 name: "2.5-overwritten", 331 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{USPrivacy: "1", Ext: json.RawMessage(`{"us_privacy":"2"}`)}}, 332 expectedRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{Ext: json.RawMessage(`{"us_privacy":"1"}`)}}, 333 }, 334 { 335 name: "malformed", 336 givenRequest: openrtb2.BidRequest{Regs: &openrtb2.Regs{USPrivacy: "1", Ext: json.RawMessage(`malformed`)}}, 337 expectedErr: "invalid character 'm' looking for beginning of value", 338 }, 339 } 340 341 for _, test := range testCases { 342 t.Run(test.name, func(t *testing.T) { 343 w := &RequestWrapper{BidRequest: &test.givenRequest} 344 err := moveUSPrivacyFrom26To25(w) 345 346 if len(test.expectedErr) > 0 { 347 assert.EqualError(t, err, test.expectedErr, "error") 348 } else { 349 assert.NoError(t, w.RebuildRequest(), "error") 350 assert.Equal(t, test.expectedRequest, *w.BidRequest, "result") 351 } 352 }) 353 } 354 } 355 356 func TestMoveEIDFrom26To25(t *testing.T) { 357 var ( 358 eid1 = []openrtb2.EID{{Source: "1"}} 359 eid1Json = json.RawMessage(`{"eids":[{"source":"1"}]}`) 360 eid2Json = json.RawMessage(`{"eids":[{"source":"2"}]}`) 361 ) 362 363 testCases := []struct { 364 name string 365 givenRequest openrtb2.BidRequest 366 expectedRequest openrtb2.BidRequest 367 expectedErr string 368 }{ 369 { 370 name: "notpresent-user", 371 givenRequest: openrtb2.BidRequest{}, 372 expectedRequest: openrtb2.BidRequest{}, 373 }, 374 { 375 name: "notpresent-user-eids", 376 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{}}, 377 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{}}, 378 }, 379 { 380 name: "2.6-migratedto-2.5", 381 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{EIDs: eid1}}, 382 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{Ext: eid1Json}}, 383 }, 384 { 385 name: "2.6-migratedto-2.5-empty", 386 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{EIDs: []openrtb2.EID{}}}, 387 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{}}, 388 }, 389 { 390 name: "2.5-overwritten", 391 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{EIDs: eid1, Ext: eid2Json}}, 392 expectedRequest: openrtb2.BidRequest{User: &openrtb2.User{Ext: eid1Json}}, 393 }, 394 { 395 name: "malformed", 396 givenRequest: openrtb2.BidRequest{User: &openrtb2.User{EIDs: eid1, Ext: json.RawMessage(`malformed`)}}, 397 expectedErr: "invalid character 'm' looking for beginning of value", 398 }, 399 } 400 401 for _, test := range testCases { 402 t.Run(test.name, func(t *testing.T) { 403 w := &RequestWrapper{BidRequest: &test.givenRequest} 404 err := moveEIDFrom26To25(w) 405 406 if len(test.expectedErr) > 0 { 407 assert.EqualError(t, err, test.expectedErr, "error") 408 } else { 409 assert.NoError(t, w.RebuildRequest(), "error") 410 assert.Equal(t, test.expectedRequest, *w.BidRequest, "result") 411 } 412 }) 413 } 414 } 415 416 func TestMoveRewardedFrom26ToPrebidExt(t *testing.T) { 417 testCases := []struct { 418 name string 419 givenImp openrtb2.Imp 420 expectedImp openrtb2.Imp 421 expectedErr string 422 }{ 423 { 424 name: "notpresent-prebid", 425 givenImp: openrtb2.Imp{}, 426 expectedImp: openrtb2.Imp{}, 427 }, 428 { 429 name: "2.6-migratedto-2.5", 430 givenImp: openrtb2.Imp{Rwdd: 1}, 431 expectedImp: openrtb2.Imp{Ext: json.RawMessage(`{"prebid":{"is_rewarded_inventory":1}}`)}, 432 }, 433 { 434 name: "2.5-overwritten", 435 givenImp: openrtb2.Imp{Rwdd: 1, Ext: json.RawMessage(`{"prebid":{"is_rewarded_inventory":2}}`)}, 436 expectedImp: openrtb2.Imp{Ext: json.RawMessage(`{"prebid":{"is_rewarded_inventory":1}}`)}, 437 }, 438 { 439 name: "Malformed", 440 givenImp: openrtb2.Imp{Rwdd: 1, Ext: json.RawMessage(`malformed`)}, 441 expectedErr: "invalid character 'm' looking for beginning of value", 442 }, 443 } 444 445 for _, test := range testCases { 446 t.Run(test.name, func(t *testing.T) { 447 w := &ImpWrapper{Imp: &test.givenImp} 448 err := moveRewardedFrom26ToPrebidExt(w) 449 450 if len(test.expectedErr) > 0 { 451 assert.EqualError(t, err, test.expectedErr, "error") 452 } else { 453 assert.NoError(t, w.RebuildImp(), "error") 454 assert.Equal(t, test.expectedImp, *w.Imp, "result") 455 } 456 }) 457 } 458 } 459 460 func TestClear26Fields(t *testing.T) { 461 var int8_1 int8 = 1 462 463 given := &openrtb2.BidRequest{ 464 ID: "anyID", 465 WLangB: []string{"anyLang"}, 466 CatTax: adcom1.CatTaxIABAudience11, 467 App: &openrtb2.App{ 468 CatTax: adcom1.CatTaxIABAudience11, 469 KwArray: []string{"anyKeyword"}, 470 Content: &openrtb2.Content{ 471 ID: "anyContent", 472 CatTax: adcom1.CatTaxIABAudience11, 473 KwArray: []string{"anyKeyword"}, 474 LangB: "anyLang", 475 Network: &openrtb2.Network{ 476 ID: "anyNetwork", 477 }, 478 Channel: &openrtb2.Channel{ 479 ID: "anyChannel", 480 }, 481 Producer: &openrtb2.Producer{ 482 ID: "anyProcedure", 483 CatTax: adcom1.CatTaxIABAudience11, 484 }, 485 }, 486 Publisher: &openrtb2.Publisher{ 487 ID: "anyPublisher", 488 CatTax: adcom1.CatTaxIABAudience11, 489 }, 490 }, 491 Site: &openrtb2.Site{ 492 CatTax: adcom1.CatTaxIABAudience11, 493 KwArray: []string{"anyKeyword"}, 494 Content: &openrtb2.Content{ 495 ID: "anyContent", 496 CatTax: adcom1.CatTaxIABAudience11, 497 KwArray: []string{"anyKeyword"}, 498 LangB: "anyLang", 499 Network: &openrtb2.Network{ 500 ID: "anyNetwork", 501 }, 502 Channel: &openrtb2.Channel{ 503 ID: "anyChannel", 504 }, 505 Producer: &openrtb2.Producer{ 506 ID: "anyProcedure", 507 CatTax: adcom1.CatTaxIABAudience11, 508 }, 509 }, 510 Publisher: &openrtb2.Publisher{ 511 ID: "anyPublisher", 512 CatTax: adcom1.CatTaxIABAudience11, 513 }, 514 }, 515 Device: &openrtb2.Device{ 516 IP: "1.2.3.4", 517 LangB: "anyLang", 518 SUA: &openrtb2.UserAgent{ 519 Model: "PBS 2000", 520 }, 521 }, 522 Regs: &openrtb2.Regs{ 523 COPPA: 1, 524 GDPR: &int8_1, 525 USPrivacy: "anyCCPA", 526 }, 527 Source: &openrtb2.Source{ 528 TID: "anyTransactionID", 529 SChain: &openrtb2.SupplyChain{ 530 Complete: 1, 531 }, 532 }, 533 User: &openrtb2.User{ 534 ID: "anyUser", 535 KwArray: []string{"anyKeyword"}, 536 Consent: "anyConsent", 537 EIDs: []openrtb2.EID{{Source: "anySource"}}, 538 }, 539 Imp: []openrtb2.Imp{{ 540 ID: "imp1", 541 Rwdd: 1, 542 SSAI: openrtb2.AdInsertServer, 543 Audio: &openrtb2.Audio{ 544 MIMEs: []string{"any/audio"}, 545 PodDur: 30, 546 RqdDurs: []int64{15, 60}, 547 PodID: "1", 548 PodSeq: adcom1.PodSeqFirst, 549 SlotInPod: adcom1.SlotPosFirst, 550 MinCPMPerSec: 100.0, 551 }, 552 Video: &openrtb2.Video{ 553 MIMEs: []string{"any/video"}, 554 MaxSeq: 30, 555 PodDur: 30, 556 PodID: "1", 557 PodSeq: adcom1.PodSeqFirst, 558 RqdDurs: []int64{15, 60}, 559 SlotInPod: adcom1.SlotPosFirst, 560 MinCPMPerSec: 100.0, 561 }, 562 }}, 563 } 564 565 expected := &openrtb2.BidRequest{ 566 ID: "anyID", 567 App: &openrtb2.App{ 568 Content: &openrtb2.Content{ 569 ID: "anyContent", 570 Producer: &openrtb2.Producer{ 571 ID: "anyProcedure", 572 }, 573 }, 574 Publisher: &openrtb2.Publisher{ 575 ID: "anyPublisher", 576 }, 577 }, 578 Site: &openrtb2.Site{ 579 Content: &openrtb2.Content{ 580 ID: "anyContent", 581 Producer: &openrtb2.Producer{ 582 ID: "anyProcedure", 583 }, 584 }, 585 Publisher: &openrtb2.Publisher{ 586 ID: "anyPublisher", 587 }, 588 }, 589 Device: &openrtb2.Device{ 590 IP: "1.2.3.4", 591 }, 592 Regs: &openrtb2.Regs{ 593 COPPA: 1, 594 }, 595 Source: &openrtb2.Source{ 596 TID: "anyTransactionID", 597 }, 598 User: &openrtb2.User{ 599 ID: "anyUser", 600 }, 601 Imp: []openrtb2.Imp{{ 602 ID: "imp1", 603 Audio: &openrtb2.Audio{ 604 MIMEs: []string{"any/audio"}, 605 }, 606 Video: &openrtb2.Video{ 607 MIMEs: []string{"any/video"}, 608 }, 609 }}, 610 } 611 612 r := &RequestWrapper{BidRequest: given} 613 clear26Fields(r) 614 assert.Equal(t, expected, r.BidRequest) 615 } 616 617 func TestClear202211Fields(t *testing.T) { 618 testCases := []struct { 619 name string 620 given openrtb2.BidRequest 621 expected openrtb2.BidRequest 622 }{ 623 { 624 name: "app", 625 given: openrtb2.BidRequest{ 626 ID: "anyID", 627 App: &openrtb2.App{InventoryPartnerDomain: "anyDomain"}, 628 Imp: []openrtb2.Imp{{ID: "imp1", Qty: &openrtb2.Qty{Multiplier: 2.0}, DT: 42}}, 629 Regs: &openrtb2.Regs{GPP: "anyGPP", GPPSID: []int8{1, 2, 3}}, 630 }, 631 expected: openrtb2.BidRequest{ 632 ID: "anyID", 633 App: &openrtb2.App{}, 634 Imp: []openrtb2.Imp{{ID: "imp1"}}, 635 Regs: &openrtb2.Regs{}, 636 }, 637 }, 638 { 639 name: "site", 640 given: openrtb2.BidRequest{ 641 ID: "anyID", 642 Site: &openrtb2.Site{InventoryPartnerDomain: "anyDomain"}, 643 Imp: []openrtb2.Imp{{ID: "imp1", Qty: &openrtb2.Qty{Multiplier: 2.0}, DT: 42}}, 644 Regs: &openrtb2.Regs{GPP: "anyGPP", GPPSID: []int8{1, 2, 3}}, 645 }, 646 expected: openrtb2.BidRequest{ 647 ID: "anyID", 648 Site: &openrtb2.Site{}, 649 Imp: []openrtb2.Imp{{ID: "imp1"}}, 650 Regs: &openrtb2.Regs{}, 651 }, 652 }, 653 { 654 name: "dooh", 655 given: openrtb2.BidRequest{ 656 ID: "anyID", 657 DOOH: &openrtb2.DOOH{ID: "anyDOOH"}, 658 Imp: []openrtb2.Imp{{ID: "imp1", Qty: &openrtb2.Qty{Multiplier: 2.0}, DT: 42}}, 659 Regs: &openrtb2.Regs{GPP: "anyGPP", GPPSID: []int8{1, 2, 3}}, 660 }, 661 expected: openrtb2.BidRequest{ 662 ID: "anyID", 663 Imp: []openrtb2.Imp{{ID: "imp1"}}, 664 Regs: &openrtb2.Regs{}, 665 }, 666 }, 667 } 668 669 for _, test := range testCases { 670 t.Run(test.name, func(t *testing.T) { 671 r := &RequestWrapper{BidRequest: &test.given} 672 clear202211Fields(r) 673 assert.Equal(t, &test.expected, r.BidRequest) 674 }) 675 } 676 } 677 678 func TestClear202303Fields(t *testing.T) { 679 given := openrtb2.BidRequest{ 680 ID: "anyID", 681 Imp: []openrtb2.Imp{ 682 { 683 ID: "imp1", 684 Video: &openrtb2.Video{PodID: "1", Plcmt: adcom1.VideoPlcmtInstream}, 685 Refresh: &openrtb2.Refresh{Count: 1}, 686 }, 687 }, 688 } 689 690 expected := openrtb2.BidRequest{ 691 ID: "anyID", 692 Imp: []openrtb2.Imp{ 693 { 694 ID: "imp1", 695 Video: &openrtb2.Video{PodID: "1"}, 696 }, 697 }, 698 } 699 700 r := &RequestWrapper{BidRequest: &given} 701 clear202303Fields(r) 702 assert.Equal(t, expected, given) 703 }