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  }