Skip to content

Commit 5d676c3

Browse files
author
Eggya Chiquita
committed
update request & video spec
1 parent b3cc93b commit 5d676c3

File tree

2 files changed

+206
-190
lines changed

2 files changed

+206
-190
lines changed

request_test.go

Lines changed: 136 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -2,141 +2,161 @@ package openrtb
22

33
import (
44
"bytes"
5-
"testing"
6-
7-
"github.com/stretchr/testify/assert"
5+
. "github.com/onsi/ginkgo"
6+
. "github.com/onsi/gomega"
87
)
98

10-
func TestParseRequestBytes_Blank(t *testing.T) {
11-
req, err := ParseRequestBytes([]byte("{}"))
12-
assert.Nil(t, err)
13-
assert.IsType(t, &Request{}, req)
14-
}
9+
var _ = Describe("Request", func() {
10+
var subject *Request
1511

16-
func TestParseRequestBytes_SimpleBanner(t *testing.T) {
17-
req, err := ParseRequestBytes(simpleBanner)
18-
assert.Nil(t, err)
19-
assert.IsType(t, &Request{}, req)
12+
BeforeEach(func() { subject = new(Request) })
2013

21-
assert.Equal(t, *req.At, 2)
22-
assert.Equal(t, *req.Id, "1234534625254")
23-
assert.Equal(t, len(req.Badv), 2)
24-
assert.Equal(t, len(req.Bcat), 0)
14+
Describe("ParseRequest()", func() {
15+
req, err := ParseRequest(bytes.NewBuffer(expandableCreative))
16+
Expect(err).NotTo(HaveOccurred())
17+
Expect(req).To(BeAssignableToTypeOf(&Request{}))
18+
})
2519

26-
assert.Equal(t, len(req.Imp), 1)
27-
assert.Equal(t, *req.Imp[0].Banner.W, 300)
28-
assert.Equal(t, *req.Imp[0].Banner.H, 250)
20+
Describe("ParseRequestBytes()", func() {
21+
It("should return blank request with defaults when blank", func() {
22+
req, err := ParseRequestBytes([]byte("{}"))
23+
Expect(err).NotTo(HaveOccurred())
24+
Expect(req).To(BeAssignableToTypeOf(&Request{}))
25+
})
2926

30-
assert.Equal(t, *req.Site.Name, "Site ABCD")
31-
assert.Equal(t, *req.Site.Publisher.Name, "Publisher A")
32-
assert.Equal(t, *req.Device.Ip, "64.124.253.1")
33-
assert.Equal(t, *req.User.Buyeruid, "5df678asd8987656asdf78987654")
34-
}
27+
It("should return accordingly when with simple banner", func() {
28+
req, err := ParseRequestBytes(simpleBanner)
29+
Expect(err).NotTo(HaveOccurred())
30+
Expect(req).To(BeAssignableToTypeOf(&Request{}))
3531

36-
func TestParseRequestBytes_ExpandableCreative(t *testing.T) {
37-
req, err := ParseRequestBytes(expandableCreative)
38-
assert.Nil(t, err)
39-
assert.IsType(t, &Request{}, req)
32+
Expect(*req.At).To(Equal(2))
33+
Expect(*req.Id).To(Equal("1234534625254"))
4034

41-
assert.Equal(t, *req.At, 2)
42-
assert.Equal(t, *req.Tmax, 120)
43-
assert.Equal(t, req.Imp[0].Banner.Expdir, []int{2, 4})
44-
assert.Equal(t, *req.Site.Privacypolicy, 1)
45-
assert.Equal(t, *req.Device.Flashver, "10.1")
46-
assert.Equal(t, len(req.User.Data), 1)
47-
assert.Equal(t, *req.User.Data[0].Id, "6")
48-
assert.Equal(t, len(req.User.Data[0].Segment), 3)
49-
assert.Equal(t, *req.User.Data[0].Segment[2].Id, "23423424")
50-
}
35+
Expect(len(req.Badv)).To(Equal(2))
36+
Expect(len(req.Bcat)).To(Equal(0))
37+
Expect(len(req.Imp)).To(Equal(1))
5138

52-
func TestParseRequest_ExpandableCreative(t *testing.T) {
53-
req, err := ParseRequest(bytes.NewBuffer(expandableCreative))
54-
assert.Nil(t, err)
55-
assert.IsType(t, &Request{}, req)
56-
}
39+
Expect(*req.Imp[0].Banner.W).To(Equal(300))
40+
Expect(*req.Imp[0].Banner.H).To(Equal(250))
41+
Expect(*req.Site.Name).To(Equal("Site ABCD"))
42+
Expect(*req.Site.Publisher.Name).To(Equal("Publisher A"))
43+
Expect(*req.Device.Ip).To(Equal("64.124.253.1"))
44+
Expect(*req.User.Buyeruid).To(Equal("5df678asd8987656asdf78987654"))
45+
})
5746

58-
func TestRequest_Valid(t *testing.T) {
59-
r := &Request{}
60-
s := &Site{}
61-
a := &App{}
62-
i := &Impression{}
63-
b := &Banner{}
47+
It("should return accordingly when with expandable creatives", func(){
48+
req, err := ParseRequestBytes(expandableCreative)
49+
Expect(err).NotTo(HaveOccurred())
50+
Expect(req).To(BeAssignableToTypeOf(&Request{}))
6451

65-
// blank Request
66-
ok, err := r.Valid()
67-
assert.Equal(t, ok, false)
68-
if err != nil {
69-
assert.Equal(t, err.Error(), "openrtb parse: request ID missing")
70-
}
52+
Expect(*req.At).To(Equal(2))
53+
Expect(*req.Tmax).To(Equal(120))
54+
Expect(req.Imp[0].Banner.Expdir).To(Equal([]int{2,4}))
55+
Expect(*req.Site.Privacypolicy).To(Equal(1))
56+
Expect(*req.Device.Flashver).To(Equal("10.1"))
57+
Expect(*req.User.Data[0].Id).To(Equal("6"))
58+
Expect(*req.User.Data[0].Segment[2].Id).To(Equal("23423424"))
7159

72-
// with ID
73-
r.SetId("RAND_ID")
74-
ok, err = r.Valid()
75-
assert.Equal(t, ok, false)
76-
if err != nil {
77-
assert.Equal(t, err.Error(), "openrtb parse: no impressions")
78-
}
60+
Expect(len(req.User.Data)).To(Equal(1))
61+
Expect(len(req.User.Data[0].Segment)).To(Equal(3))
62+
})
63+
})
7964

80-
// with Site
81-
r.SetSite(s)
82-
ok, err = r.Valid()
83-
assert.Equal(t, ok, false)
84-
if err != nil {
85-
assert.Equal(t, err.Error(), "openrtb parse: no impressions")
86-
}
65+
Describe("Valid()", func() {
8766

88-
// with Site & App
89-
r.SetApp(a)
90-
ok, err = r.Valid()
91-
assert.Equal(t, ok, false)
92-
if err != nil {
93-
assert.Equal(t, err.Error(), "openrtb parse: no impressions")
94-
}
67+
var (
68+
site *Site
69+
app *App
70+
impression *Impression
71+
banner *Banner
72+
)
9573

96-
// with Impression
97-
i.SetId("IMPID").SetBanner(b).WithDefaults()
98-
r.Imp = []Impression{*i}
99-
ok, err = r.Valid()
100-
assert.Equal(t, ok, false)
101-
if err != nil {
102-
assert.Equal(t, err.Error(), "openrtb parse: request has site and app")
103-
}
74+
BeforeEach(func() {
75+
site = new(Site)
76+
app = new(App)
77+
impression = new(Impression)
78+
banner = new(Banner)
79+
})
10480

105-
// with valid attrs
106-
r.App = nil
107-
ok, err = r.Valid()
108-
assert.Equal(t, ok, true)
109-
}
81+
It("should return error messages when attributes missing", func(){
82+
ok, err := subject.Valid()
83+
Expect(err.Error()).To(Equal("openrtb parse: request ID missing"))
11084

111-
func TestRequest_WithDefaults(t *testing.T) {
112-
s := &Site{}
113-
a := &App{}
114-
d := &Device{}
115-
i := &Impression{}
116-
b := &Banner{}
117-
v := &Video{}
85+
subject.SetId("RAND_ID") // With ID
86+
ok, err = subject.Valid()
87+
Expect(err.Error()).To(Equal("openrtb parse: no impressions"))
11888

119-
i.SetBanner(b).SetVideo(v)
120-
r := &Request{Site: s, App: a, Device: d, Imp: []Impression{*i}}
89+
subject.SetSite(site) // With Site
90+
ok, err = subject.Valid()
91+
Expect(err.Error()).To(Equal("openrtb parse: no impressions"))
12192

122-
req := r.WithDefaults()
123-
assert.Equal(t, *req.At, 2)
124-
assert.Equal(t, *req.App.Privacypolicy, 0)
125-
assert.Equal(t, *req.App.Paid, 0)
126-
assert.Equal(t, *req.Site.Privacypolicy, 0)
127-
assert.Equal(t, *req.Device.Dnt, 0)
128-
assert.Equal(t, *req.Device.Js, 0)
129-
assert.Equal(t, *req.Device.Connectiontype, CONN_TYPE_UNKNOWN)
130-
assert.Equal(t, *req.Device.Devicetype, DEVICE_TYPE_UNKNOWN)
131-
assert.Equal(t, *req.Imp[0].Instl, 0)
132-
assert.Equal(t, *req.Imp[0].Bidfloor, 0)
133-
assert.Equal(t, *req.Imp[0].Bidfloorcur, "USD")
134-
assert.Equal(t, *req.Imp[0].Banner.Topframe, 0)
135-
assert.Equal(t, *req.Imp[0].Banner.Pos, AD_POS_UNKNOWN)
136-
assert.Equal(t, *req.Imp[0].Video.Sequence, 1)
137-
assert.Equal(t, *req.Imp[0].Video.Boxingallowed, 1)
138-
assert.Equal(t, *req.Imp[0].Video.Pos, AD_POS_UNKNOWN)
139-
}
93+
subject.SetApp(app) // With App
94+
ok, err = subject.Valid()
95+
Expect(err.Error()).To(Equal("openrtb parse: no impressions"))
96+
97+
// With Impression
98+
impression.SetId("IMPID").SetBanner(banner).WithDefaults()
99+
subject.Imp = []Impression{*impression}
100+
ok, err = subject.Valid()
101+
Expect(err.Error()).To(Equal("openrtb parse: request has site and app"))
102+
103+
// with valid attrs
104+
subject.App = nil
105+
ok, err = subject.Valid()
106+
Expect(err).NotTo(HaveOccurred())
107+
Expect(ok).To(BeTrue())
108+
})
109+
110+
})
111+
112+
Describe("WithDefaults()", func() {
113+
114+
var (
115+
site *Site
116+
app *App
117+
device *Device
118+
impression *Impression
119+
banner *Banner
120+
video *Video
121+
)
122+
123+
BeforeEach(func() {
124+
site = new(Site)
125+
app = new(App)
126+
device = new(Device)
127+
impression = new(Impression)
128+
banner = new(Banner)
129+
video = new(Video)
130+
131+
impression.SetBanner(banner).SetVideo(video)
132+
subject.Site = site
133+
subject.App = app
134+
subject.Device = device
135+
subject.Imp = []Impression{*impression}
136+
})
137+
138+
It("should return blank request with default values", func(){
139+
request := subject.WithDefaults()
140+
Expect(*request.At).To(Equal(2))
141+
Expect(*request.App.Privacypolicy).To(Equal(0))
142+
Expect(*request.App.Paid).To(Equal(0))
143+
Expect(*request.Site.Privacypolicy).To(Equal(0))
144+
Expect(*request.Device.Dnt).To(Equal(0))
145+
Expect(*request.Device.Js).To(Equal(0))
146+
Expect(*request.Device.Connectiontype).To(Equal(CONN_TYPE_UNKNOWN))
147+
Expect(*request.Device.Devicetype).To(Equal(DEVICE_TYPE_UNKNOWN))
148+
Expect(*request.Imp[0].Instl).To(Equal(0))
149+
Expect(*request.Imp[0].Bidfloor).To(Equal(float32(0)))
150+
Expect(*request.Imp[0].Bidfloorcur).To(Equal("USD"))
151+
Expect(*request.Imp[0].Banner.Topframe).To(Equal(0))
152+
Expect(*request.Imp[0].Banner.Pos).To(Equal(AD_POS_UNKNOWN))
153+
Expect(*request.Imp[0].Video.Sequence).To(Equal(1))
154+
Expect(*request.Imp[0].Video.Boxingallowed).To(Equal(1))
155+
Expect(*request.Imp[0].Video.Pos).To(Equal(AD_POS_UNKNOWN))
156+
})
157+
})
158+
159+
})
140160

141161
var simpleBanner []byte = []byte(`
142162
{

0 commit comments

Comments
 (0)