Skip to content

Commit 63c0252

Browse files
committed
Update code with feedback from PR prebid#1287
Signed-off-by: Alex Klinkert <[email protected]>
1 parent 6bbe213 commit 63c0252

File tree

6 files changed

+262
-111
lines changed

6 files changed

+262
-111
lines changed

adapters/yieldlab/usersync_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@ import (
55
"text/template"
66

77
"github.com/stretchr/testify/assert"
8+
9+
"github.com/prebid/prebid-server/privacy"
10+
"github.com/prebid/prebid-server/privacy/gdpr"
811
)
912

1013
func TestYieldlabSyncer(t *testing.T) {
1114
temp := template.Must(template.New("sync-template").Parse("https://ad.yieldlab.net/mr?t=2&pid=9140838&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&redirectUri=http%3A%2F%2Flocalhost%2F%2Fsetuid%3Fbidder%3Dyieldlab%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%25%25YL_UID%25%25"))
1215
syncer := NewYieldlabSyncer(temp)
13-
syncInfo, err := syncer.GetUsersyncInfo("0", "")
16+
syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{
17+
GDPR: gdpr.Policy{
18+
Signal: "0",
19+
},
20+
})
1421
assert.NoError(t, err)
1522
assert.Equal(t, "https://ad.yieldlab.net/mr?t=2&pid=9140838&gdpr=0&gdpr_consent=&redirectUri=http%3A%2F%2Flocalhost%2F%2Fsetuid%3Fbidder%3Dyieldlab%26gdpr%3D0%26gdpr_consent%3D%26uid%3D%25%25YL_UID%25%25", syncInfo.URL)
1623
assert.Equal(t, "redirect", syncInfo.Type)

adapters/yieldlab/yieldlab.go

Lines changed: 14 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"golang.org/x/text/currency"
1414

1515
"github.com/prebid/prebid-server/adapters"
16-
"github.com/prebid/prebid-server/errortypes"
1716
"github.com/prebid/prebid-server/openrtb_ext"
1817
)
1918

@@ -33,20 +32,6 @@ func NewYieldlabBidder(endpoint string) *YieldlabAdapter {
3332
}
3433
}
3534

36-
// MakeRequests prepares bid requests to the Yieldlab API
37-
func (a *YieldlabAdapter) MakeRequests(request *openrtb.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
38-
var errs []error
39-
var adapterRequests []*adapters.RequestData
40-
41-
adapterReq, errors := a.makeRequest(request)
42-
if adapterReq != nil {
43-
adapterRequests = append(adapterRequests, adapterReq)
44-
}
45-
errs = append(errs, errors...)
46-
47-
return adapterRequests, errors
48-
}
49-
5035
// Builds endpoint url based on adapter-specific pub settings from imp.ext
5136
func (a *YieldlabAdapter) makeEndpointURL(req *openrtb.BidRequest, params *openrtb_ext.ExtImpYieldlab) (string, error) {
5237
uri, err := url.Parse(a.endpoint)
@@ -130,18 +115,12 @@ func (a *YieldlabAdapter) makeTargetingValues(params *openrtb_ext.ExtImpYieldlab
130115
return values.Encode()
131116
}
132117

133-
func (a *YieldlabAdapter) makeRequest(request *openrtb.BidRequest) (*adapters.RequestData, []error) {
134-
params, err := a.parseRequest(request)
135-
if err != nil {
136-
return nil, []error{err}
118+
func (a *YieldlabAdapter) MakeRequests(request *openrtb.BidRequest, _ *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
119+
if len(request.Imp) == 0 {
120+
return nil, []error{fmt.Errorf("invalid request %+v, no Impressions given", request)}
137121
}
138122

139-
mergedParams, err := a.mergeParams(params)
140-
if err != nil {
141-
return nil, []error{err}
142-
}
143-
144-
bidURL, err := a.makeEndpointURL(request, mergedParams)
123+
bidURL, err := a.makeEndpointURL(request, a.mergeParams(a.parseRequest(request)))
145124
if err != nil {
146125
return nil, []error{err}
147126
}
@@ -159,39 +138,35 @@ func (a *YieldlabAdapter) makeRequest(request *openrtb.BidRequest) (*adapters.Re
159138
headers.Add("Cookie", "id="+request.User.BuyerUID)
160139
}
161140

162-
return &adapters.RequestData{
141+
return []*adapters.RequestData{{
163142
Method: "GET",
164143
Uri: bidURL,
165144
Headers: headers,
166-
}, nil
145+
}}, nil
167146
}
168147

169148
// parseRequest extracts the Yieldlab request information from the request
170-
func (a *YieldlabAdapter) parseRequest(request *openrtb.BidRequest) ([]*openrtb_ext.ExtImpYieldlab, error) {
149+
func (a *YieldlabAdapter) parseRequest(request *openrtb.BidRequest) []*openrtb_ext.ExtImpYieldlab {
171150
params := make([]*openrtb_ext.ExtImpYieldlab, 0)
172151

173152
for i := 0; i < len(request.Imp); i++ {
174153
bidderExt := new(adapters.ExtImpBidder)
175154
if err := json.Unmarshal(request.Imp[i].Ext, bidderExt); err != nil {
176-
return nil, &errortypes.BadInput{
177-
Message: err.Error(),
178-
}
155+
continue
179156
}
180157

181158
yieldlabExt := new(openrtb_ext.ExtImpYieldlab)
182159
if err := json.Unmarshal(bidderExt.Bidder, yieldlabExt); err != nil {
183-
return nil, &errortypes.BadInput{
184-
Message: err.Error(),
185-
}
160+
continue
186161
}
187162

188163
params = append(params, yieldlabExt)
189164
}
190165

191-
return params, nil
166+
return params
192167
}
193168

194-
func (a *YieldlabAdapter) mergeParams(params []*openrtb_ext.ExtImpYieldlab) (*openrtb_ext.ExtImpYieldlab, error) {
169+
func (a *YieldlabAdapter) mergeParams(params []*openrtb_ext.ExtImpYieldlab) *openrtb_ext.ExtImpYieldlab {
195170
var adSlotIds []string
196171
targeting := make(map[string]string)
197172

@@ -205,7 +180,7 @@ func (a *YieldlabAdapter) mergeParams(params []*openrtb_ext.ExtImpYieldlab) (*op
205180
return &openrtb_ext.ExtImpYieldlab{
206181
AdslotID: strings.Join(adSlotIds, adSlotIdSeparator),
207182
Targeting: targeting,
208-
}, nil
183+
}
209184
}
210185

211186
// MakeBids make the bids for the bid response.
@@ -223,10 +198,7 @@ func (a *YieldlabAdapter) MakeBids(internalRequest *openrtb.BidRequest, external
223198
}
224199
}
225200

226-
requests, err := a.parseRequest(internalRequest)
227-
if err != nil {
228-
return nil, []error{err}
229-
}
201+
params := a.parseRequest(internalRequest)
230202

231203
bidderResponse := &adapters.BidderResponse{
232204
Currency: currency.EUR.String(),
@@ -239,7 +211,7 @@ func (a *YieldlabAdapter) MakeBids(internalRequest *openrtb.BidRequest, external
239211
return nil, []error{err}
240212
}
241213

242-
req := a.findBidReq(bid.ID, requests)
214+
req := a.findBidReq(bid.ID, params)
243215
if req == nil {
244216
return nil, []error{
245217
fmt.Errorf("failed to find yieldlab request for adslotID %v. This is most likely a programming issue", bid.ID),

adapters/yieldlab/yieldlab_test.go

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@ package yieldlab
33
import (
44
"testing"
55

6+
"github.com/stretchr/testify/assert"
7+
68
"github.com/prebid/prebid-server/adapters/adapterstest"
79
)
810

11+
const testURL = "https://ad.yieldlab.net/testing/"
12+
913
var testCacheBuster cacheBuster = func() string {
1014
return "testing"
1115
}
@@ -22,6 +26,103 @@ func newTestYieldlabBidder(endpoint string) *YieldlabAdapter {
2226
}
2327
}
2428

29+
func TestNewYieldlabBidder(t *testing.T) {
30+
bid := NewYieldlabBidder(testURL)
31+
assert.NotNil(t, bid)
32+
assert.Equal(t, bid.endpoint, testURL)
33+
assert.NotNil(t, bid.cacheBuster)
34+
assert.NotNil(t, bid.getWeek)
35+
}
36+
2537
func TestJsonSamples(t *testing.T) {
26-
adapterstest.RunJSONBidderTest(t, "yieldlabtest", newTestYieldlabBidder("https://ad.yieldlab.net/testing/"))
38+
adapterstest.RunJSONBidderTest(t, "yieldlabtest", newTestYieldlabBidder(testURL))
39+
}
40+
41+
func Test_splitSize(t *testing.T) {
42+
type args struct {
43+
size string
44+
}
45+
tests := []struct {
46+
name string
47+
args args
48+
want uint64
49+
want1 uint64
50+
wantErr bool
51+
}{
52+
{
53+
name: "valid",
54+
args: args{
55+
size: "300x800",
56+
},
57+
want: 300,
58+
want1: 800,
59+
wantErr: false,
60+
},
61+
{
62+
name: "empty",
63+
args: args{
64+
size: "",
65+
},
66+
want: 0,
67+
want1: 0,
68+
wantErr: false,
69+
},
70+
{
71+
name: "invalid",
72+
args: args{
73+
size: "test",
74+
},
75+
want: 0,
76+
want1: 0,
77+
wantErr: false,
78+
},
79+
{
80+
name: "invalid_height",
81+
args: args{
82+
size: "200xtest",
83+
},
84+
want: 0,
85+
want1: 0,
86+
wantErr: true,
87+
},
88+
{
89+
name: "invalid_width",
90+
args: args{
91+
size: "testx200",
92+
},
93+
want: 0,
94+
want1: 0,
95+
wantErr: true,
96+
},
97+
{
98+
name: "invalid_separator",
99+
args: args{
100+
size: "200y200",
101+
},
102+
want: 0,
103+
want1: 0,
104+
wantErr: false,
105+
},
106+
}
107+
for _, tt := range tests {
108+
t.Run(tt.name, func(t *testing.T) {
109+
got, got1, err := splitSize(tt.args.size)
110+
if (err != nil) != tt.wantErr {
111+
t.Errorf("splitSize() error = %v, wantErr %v", err, tt.wantErr)
112+
return
113+
}
114+
if got != tt.want {
115+
t.Errorf("splitSize() got = %v, want %v", got, tt.want)
116+
}
117+
if got1 != tt.want1 {
118+
t.Errorf("splitSize() got1 = %v, want %v", got1, tt.want1)
119+
}
120+
})
121+
}
122+
}
123+
124+
func TestYieldlabAdapter_makeEndpointURL_invalidEndpoint(t *testing.T) {
125+
bid := NewYieldlabBidder("test$:/something§")
126+
_, err := bid.makeEndpointURL(nil, nil)
127+
assert.Error(t, err)
27128
}

0 commit comments

Comments
 (0)