-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathimp_test.go
155 lines (149 loc) · 2.7 KB
/
imp_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package gortb
import (
"testing"
"encoding/json"
)
func TestImp(t *testing.T) {
tests := []struct {
name string
imp *Imp
wantErr error
}{
{
name: "valid banner impression",
imp: &Imp{
ID: "test-imp-1",
Banner: &Banner{},
},
wantErr: nil,
},
{
name: "valid video impression",
imp: &Imp{
ID: "test-imp-2",
Video: &Video{},
},
wantErr: nil,
},
{
name: "valid audio impression",
imp: &Imp{
ID: "test-imp-3",
Audio: &Audio{},
},
wantErr: nil,
},
{
name: "valid native impression",
imp: &Imp{
ID: "test-imp-4",
Native: &Native{},
},
wantErr: nil,
},
{
name: "missing ID",
imp: &Imp{
Banner: &Banner{},
},
wantErr: ErrMissingID,
},
{
name: "invalid instl value",
imp: &Imp{
ID: "test-imp-5",
Instl: 2,
Banner: &Banner{},
},
wantErr: ErrInvalidInstl,
},
{
name: "invalid clickbrowser value",
imp: &Imp{
ID: "test-imp-6",
ClickBrowser: 2,
Banner: &Banner{},
},
wantErr: ErrInvalidClickBrowser,
},
{
name: "invalid secure value",
imp: &Imp{
ID: "test-imp-7",
Secure: 2,
Banner: &Banner{},
},
wantErr: ErrInvalidSecure,
},
{
name: "negative bidfloor",
imp: &Imp{
ID: "test-imp-8",
BidFloor: -1.0,
Banner: &Banner{},
},
wantErr: ErrInvalidBidFloor,
},
{
name: "missing bidfloorcur with non-zero bidfloor",
imp: &Imp{
ID: "test-imp-9",
BidFloor: 1.0,
BidFloorCur: "",
Banner: &Banner{},
},
wantErr: ErrMissingBidFloorCur,
},
{
name: "no media present",
imp: &Imp{
ID: "test-imp-10",
},
wantErr: ErrNoMediaPresent,
},
{
name: "multiple media present",
imp: &Imp{
ID: "test-imp-11",
Banner: &Banner{},
Video: &Video{},
},
wantErr: ErrMultipleMedia,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.imp.Validate()
if tt.wantErr != nil {
if err == nil {
t.Errorf("Imp.Validate() error = nil, wantErr = %v", tt.wantErr)
return
}
if err.Error() != tt.wantErr.Error() {
t.Errorf("Imp.Validate() error = %v, wantErr = %v", err, tt.wantErr)
}
return
}
if err != nil {
t.Errorf("Imp.Validate() error = %v, wantErr = nil", err)
}
})
}
}
func TestImpWithJSON(t *testing.T) {
jsonData := `{
"id": "test-imp-1",
"banner": {},
"bidfloor": 1.0,
"bidfloorcur": "USD"
}`
var imp Imp
err := json.Unmarshal([]byte(jsonData), &imp)
if err != nil {
t.Fatalf("Failed to unmarshal JSON: %v", err)
}
err = imp.Validate()
if err != nil {
t.Errorf("Imp.Validate() error = %v, wantErr = nil", err)
}
}