@@ -2,141 +2,161 @@ package openrtb
22
33import (
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
141161var simpleBanner []byte = []byte (`
142162{
0 commit comments