@@ -141,6 +141,16 @@ func TestGoodRequests(t *testing.T) {
141
141
supplementary .assert (t )
142
142
}
143
143
144
+ func TestFirstPartyDataRequests (t * testing.T ) {
145
+ validRequests := & getResponseFromDirectory {
146
+ dir : "sample-requests/first-party-data" ,
147
+ payloadGetter : getRequestPayload ,
148
+ messageGetter : nilReturner ,
149
+ expectedCode : http .StatusOK ,
150
+ }
151
+ validRequests .assert (t )
152
+ }
153
+
144
154
// TestGoodNativeRequests makes sure we return 200s on well-formed Native requests.
145
155
func TestGoodNativeRequests (t * testing.T ) {
146
156
tests := & getResponseFromDirectory {
@@ -1127,10 +1137,73 @@ func TestDisabledBidder(t *testing.T) {
1127
1137
}
1128
1138
}
1129
1139
1130
- func TestValidateImpExtDisabledBidder (t * testing.T ) {
1131
- imp := & openrtb.Imp {
1132
- Ext : json .RawMessage (`{"appnexus":{"placement_id":555},"unknownbidder":{"foo":"bar"}}` ),
1140
+ func TestValidateImpExt (t * testing.T ) {
1141
+ testCases := []struct {
1142
+ description string
1143
+ impExt json.RawMessage
1144
+ expectedImpExt string
1145
+ expectedErrs []error
1146
+ }{
1147
+ {
1148
+ description : "Empty" ,
1149
+ impExt : nil ,
1150
+ expectedImpExt : "" ,
1151
+ expectedErrs : []error {errors .New ("request.imp[0].ext is required" )},
1152
+ },
1153
+ {
1154
+ description : "Valid Bidder" ,
1155
+ impExt : json .RawMessage (`{"appnexus":{"placement_id":555}}` ),
1156
+ expectedImpExt : `{"appnexus":{"placement_id":555}}` ,
1157
+ expectedErrs : []error {},
1158
+ },
1159
+ {
1160
+ description : "Valid Bidder + Disabled Bidder" ,
1161
+ impExt : json .RawMessage (`{"appnexus":{"placement_id":555},"unknownbidder":{"foo":"bar"}}` ),
1162
+ expectedImpExt : `{"appnexus":{"placement_id":555}}` ,
1163
+ expectedErrs : []error {& errortypes.BidderTemporarilyDisabled {Message : "The bidder 'unknownbidder' has been disabled." }},
1164
+ },
1165
+ {
1166
+ description : "Valid Bidder + Disabled Bidder + First Party Data Context" ,
1167
+ impExt : json .RawMessage (`{"appnexus":{"placement_id":555},"unknownbidder":{"foo":"bar"},"context":{"data":{"keywords":"prebid server example"}}}` ),
1168
+ expectedImpExt : `{"appnexus":{"placement_id":555},"context":{"data":{"keywords":"prebid server example"}}}` ,
1169
+ expectedErrs : []error {& errortypes.BidderTemporarilyDisabled {Message : "The bidder 'unknownbidder' has been disabled." }},
1170
+ },
1171
+ {
1172
+ description : "Valid Bidder + First Party Data Context" ,
1173
+ impExt : json .RawMessage (`{"appnexus":{"placement_id":555},"context":{"data":{"keywords":"prebid server example"}}}` ),
1174
+ expectedImpExt : `{"appnexus":{"placement_id":555},"context":{"data":{"keywords":"prebid server example"}}}` ,
1175
+ expectedErrs : []error {},
1176
+ },
1177
+ {
1178
+ description : "Valid Prebid Ext Bidder" ,
1179
+ impExt : json .RawMessage (`{"prebid":{"bidder":{"appnexus":{"placement_id":555}}}}` ),
1180
+ expectedImpExt : `{"prebid":{"bidder":{"appnexus":{"placement_id":555}}}}` ,
1181
+ expectedErrs : []error {},
1182
+ // request.imp[x].ext.prebid.bidder.{biddername} is only promoted/copied to request.ext.{biddername} if there is at least one disabled bidder.
1183
+ },
1184
+ {
1185
+ description : "Valid Prebid Ext Bidder + First Party Data Context" ,
1186
+ impExt : json .RawMessage (`{"prebid":{"bidder":{"appnexus":{"placement_id":555}}} ,"context":{"data":{"keywords":"prebid server example"}}}` ),
1187
+ expectedImpExt : `{"prebid":{"bidder":{"appnexus":{"placement_id":555}}},"context":{"data":{"keywords":"prebid server example"}}}` ,
1188
+ expectedErrs : []error {},
1189
+ // request.imp[x].ext.prebid.bidder.{biddername} is only promoted/copied to request.ext.{biddername} if there is at least one disabled bidder.
1190
+ },
1191
+ {
1192
+ description : "Valid Prebid Ext Bidder + Disabled Bidder" ,
1193
+ impExt : json .RawMessage (`{"prebid":{"bidder":{"appnexus":{"placement_id":555},"unknownbidder":{"foo":"bar"}}}}` ),
1194
+ expectedImpExt : `{"prebid":{"bidder":{"appnexus":{"placement_id": 555},"unknownbidder":{"foo":"bar"}}},"appnexus":{"placement_id":555}}` ,
1195
+ expectedErrs : []error {& errortypes.BidderTemporarilyDisabled {Message : "The bidder 'unknownbidder' has been disabled." }},
1196
+ // request.imp[x].ext.prebid.bidder.{biddername} disabled bidders are not removed. if there is a disabled bidder, the valid ones are promoted/copied to request.ext.{biddername}.
1197
+ },
1198
+ {
1199
+ description : "Valid Prebid Ext Bidder + Disabled Bidder + First Party Data Context" ,
1200
+ impExt : json .RawMessage (`{"prebid":{"bidder":{"appnexus":{"placement_id":555},"unknownbidder":{"foo":"bar"}}},"context":{"data":{"keywords":"prebid server example"}}}` ),
1201
+ expectedImpExt : `{"prebid":{"bidder":{"appnexus":{"placement_id": 555},"unknownbidder":{"foo":"bar"}}},"appnexus":{"placement_id":555},"context":{"data":{"keywords":"prebid server example"}}}` ,
1202
+ expectedErrs : []error {& errortypes.BidderTemporarilyDisabled {Message : "The bidder 'unknownbidder' has been disabled." }},
1203
+ // request.imp[x].ext.prebid.bidder.{biddername} disabled bidders are not removed. if there is a disabled bidder, the valid ones are promoted/copied to request.ext.{biddername}.
1204
+ },
1133
1205
}
1206
+
1134
1207
deps := & endpointDeps {
1135
1208
& nobidExchange {},
1136
1209
newParamsValidator (t ),
@@ -1149,9 +1222,19 @@ func TestValidateImpExtDisabledBidder(t *testing.T) {
1149
1222
nil ,
1150
1223
hardcodedResponseIPValidator {response : true },
1151
1224
}
1152
- errs := deps .validateImpExt (imp , nil , 0 )
1153
- assert .JSONEq (t , `{"appnexus":{"placement_id":555}}` , string (imp .Ext ))
1154
- assert .Equal (t , []error {& errortypes.BidderTemporarilyDisabled {Message : "The bidder 'unknownbidder' has been disabled." }}, errs )
1225
+
1226
+ for _ , test := range testCases {
1227
+ imp := & openrtb.Imp {Ext : test .impExt }
1228
+
1229
+ errs := deps .validateImpExt (imp , nil , 0 )
1230
+
1231
+ if len (test .expectedImpExt ) > 0 {
1232
+ assert .JSONEq (t , test .expectedImpExt , string (imp .Ext ))
1233
+ } else {
1234
+ assert .Empty (t , imp .Ext )
1235
+ }
1236
+ assert .Equal (t , test .expectedErrs , errs )
1237
+ }
1155
1238
}
1156
1239
1157
1240
func validRequest (t * testing.T , filename string ) string {
0 commit comments