Skip to content

Commit e47ae75

Browse files
Fix event data unmarshaling (#2039)
Fix event unmarshaling
1 parent 8550730 commit e47ae75

File tree

3 files changed

+140
-4
lines changed

3 files changed

+140
-4
lines changed

.vscode/settings.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
22
// Show the repo name in the top window bar.
3-
"window.title": "${rootName}${separator}${activeEditorMedium}"
4-
}
3+
"window.title": "${rootName}${separator}${activeEditorMedium}",
4+
"go.alternateTools": {
5+
"go": "~/.local/share/mise/installs/go/latest/bin/go"
6+
}
7+
}

v2/core/event/client_test.go

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package event_test
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"testing"
7+
"time"
8+
9+
"fmt"
10+
11+
assert "github.com/stretchr/testify/require"
12+
stripe "github.com/stripe/stripe-go/v82"
13+
"github.com/stripe/stripe-go/v82/mock"
14+
)
15+
16+
func TestEventGet(t *testing.T) {
17+
timeNow := time.Now()
18+
params := stripe.V2CoreEventParams{}
19+
testServer, sc := mock.Server(t, string(http.MethodGet), "/v2/core/events/evt_123", nil, func(p *stripe.V2CoreEventParams) []byte {
20+
data, err := json.Marshal(stripe.V1BillingMeterErrorReportTriggeredEvent{
21+
V2RawEvent: stripe.V2RawEvent{
22+
V2BaseEvent: stripe.V2BaseEvent{
23+
Created: timeNow,
24+
ID: "evt_123",
25+
Type: "v1.billing.meter.error_report_triggered",
26+
},
27+
RelatedObject: &stripe.RelatedObject{
28+
ID: "ro_123",
29+
},
30+
},
31+
Data: stripe.V1BillingMeterErrorReportTriggeredEventData{
32+
DeveloperMessageSummary: "This is a developer message",
33+
},
34+
RelatedObject: stripe.RelatedObject{
35+
ID: "ro_123",
36+
},
37+
})
38+
assert.NoError(t, err)
39+
return data
40+
})
41+
defer testServer.Close()
42+
43+
event, err := sc.V2CoreEvents.Get("evt_123", &params)
44+
assert.Nil(t, err)
45+
v1BillingEvent, ok := event.(*stripe.V1BillingMeterErrorReportTriggeredEvent)
46+
assert.True(t, ok)
47+
assert.Equal(t, v1BillingEvent.ID, "evt_123")
48+
assert.Equal(t, v1BillingEvent.Type, "v1.billing.meter.error_report_triggered")
49+
assert.True(t, v1BillingEvent.Created.Equal(timeNow))
50+
assert.Equal(t, v1BillingEvent.Data.DeveloperMessageSummary, "This is a developer message")
51+
assert.Equal(t, v1BillingEvent.RelatedObject.ID, "ro_123")
52+
}
53+
54+
func TestEventAll(t *testing.T) {
55+
timeNow := time.Now()
56+
params := &stripe.V2CoreEventListParams{}
57+
testServer, sc := mock.Server(t, string(http.MethodGet), "/v2/core/events", params, func(p *stripe.V2CoreEventListParams) []byte {
58+
data, err := json.Marshal(stripe.V2Page[stripe.V2Event]{
59+
Data: []stripe.V2Event{
60+
&stripe.V1BillingMeterErrorReportTriggeredEvent{
61+
V2RawEvent: stripe.V2RawEvent{
62+
V2BaseEvent: stripe.V2BaseEvent{
63+
Created: timeNow,
64+
ID: "evt_1",
65+
Type: "v1.billing.meter.error_report_triggered",
66+
},
67+
RelatedObject: &stripe.RelatedObject{
68+
ID: "ro_123",
69+
},
70+
},
71+
Data: stripe.V1BillingMeterErrorReportTriggeredEventData{
72+
DeveloperMessageSummary: "This is a developer message",
73+
},
74+
RelatedObject: stripe.RelatedObject{
75+
ID: "ro_123",
76+
},
77+
},
78+
&stripe.V1BillingMeterNoMeterFoundEvent{
79+
V2RawEvent: stripe.V2RawEvent{
80+
V2BaseEvent: stripe.V2BaseEvent{
81+
Created: timeNow,
82+
ID: "evt_2",
83+
Type: "v1.billing.meter.no_meter_found",
84+
},
85+
},
86+
Data: stripe.V1BillingMeterNoMeterFoundEventData{
87+
DeveloperMessageSummary: "This is another developer message",
88+
},
89+
},
90+
&stripe.V1BillingMeterNoMeterFoundEvent{
91+
V2RawEvent: stripe.V2RawEvent{
92+
V2BaseEvent: stripe.V2BaseEvent{
93+
Created: timeNow,
94+
ID: "evt_3",
95+
Type: "v1.billing.meter.no_meter_found",
96+
},
97+
},
98+
Data: stripe.V1BillingMeterNoMeterFoundEventData{
99+
DeveloperMessageSummary: "This is yet another developer message",
100+
},
101+
},
102+
},
103+
})
104+
assert.NoError(t, err)
105+
return data
106+
})
107+
defer testServer.Close()
108+
cnt := 1
109+
sc.V2CoreEvents.All(params)(func(event stripe.V2Event, err error) bool {
110+
assert.Nil(t, err)
111+
assert.NotNil(t, event)
112+
if cnt == 1 {
113+
v1BillingEvent, ok := event.(*stripe.V1BillingMeterErrorReportTriggeredEvent)
114+
assert.True(t, ok)
115+
assert.Equal(t, v1BillingEvent.ID, "evt_1")
116+
assert.Equal(t, v1BillingEvent.Type, "v1.billing.meter.error_report_triggered")
117+
assert.True(t, v1BillingEvent.Created.Equal(timeNow))
118+
assert.Equal(t, v1BillingEvent.Data.DeveloperMessageSummary, "This is a developer message")
119+
assert.Equal(t, v1BillingEvent.RelatedObject.ID, "ro_123")
120+
} else {
121+
v1BillingEvent, ok := event.(*stripe.V1BillingMeterNoMeterFoundEvent)
122+
assert.True(t, ok)
123+
assert.Equal(t, v1BillingEvent.ID, fmt.Sprintf("evt_%d", cnt))
124+
assert.Equal(t, v1BillingEvent.Type, "v1.billing.meter.no_meter_found")
125+
assert.True(t, v1BillingEvent.Created.Equal(timeNow))
126+
assert.Equal(t, v1BillingEvent.Data.DeveloperMessageSummary, fmt.Sprintf("This is %s developer message", map[int]string{2: "another", 3: "yet another"}[cnt]))
127+
}
128+
cnt++
129+
130+
return true
131+
})
132+
assert.Equal(t, cnt, 4)
133+
}

v2_events.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,14 @@ func ConvertRawEvent(event *V2RawEvent, backend Backend, key string) (V2Event, e
181181
err := backend.Call(http.MethodGet, event.RelatedObject.URL, key, nil, v)
182182
return v, err
183183
}
184-
if err := json.Unmarshal(*event.Data, result); err != nil {
184+
if err := json.Unmarshal(*event.Data, &result.Data); err != nil {
185185
return nil, err
186186
}
187187
return result, nil
188188
case "v1.billing.meter.no_meter_found":
189189
result := &V1BillingMeterNoMeterFoundEvent{}
190190
result.V2BaseEvent = event.V2BaseEvent
191-
if err := json.Unmarshal(*event.Data, result); err != nil {
191+
if err := json.Unmarshal(*event.Data, &result.Data); err != nil {
192192
return nil, err
193193
}
194194
return result, nil

0 commit comments

Comments
 (0)