Skip to content

Commit 7ccd4b3

Browse files
Add Stripe-Request-Trigger header (#2288)
* add "prepare" to justfile * add Stripe-Request-Trigger header * remove new generated code
1 parent d1fd47a commit 7ccd4b3

4 files changed

Lines changed: 185 additions & 22 deletions

File tree

event_notification.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package stripe
22

33
import (
44
"context"
5+
"fmt"
56
"net/http"
67
"time"
78
)
@@ -37,6 +38,8 @@ func (n *V2CoreEventNotification) fetchEvent(ctx context.Context) (V2CoreEvent,
3738
// TODO: usage?
3839
params := &V2CoreEventRetrieveParams{}
3940
params.SetStripeContextFrom(n.Context)
41+
params.Headers = make(http.Header)
42+
params.Headers.Set("Stripe-Request-Trigger", fmt.Sprintf("event=%s", n.ID))
4043

4144
return n.client.V2CoreEvents.Retrieve(ctx, n.ID, params)
4245
}
@@ -74,6 +77,8 @@ func (n *UnknownEventNotification) FetchRelatedObject(ctx context.Context) (*API
7477
obj := &APIResource{}
7578
params := &eventNotificationParams{Params: Params{Context: ctx}}
7679
params.SetStripeContextFrom(n.Context)
80+
params.Headers = make(http.Header)
81+
params.Headers.Set("Stripe-Request-Trigger", fmt.Sprintf("event=%s", n.ID))
7782

7883
err := n.client.backend.Call(http.MethodGet, n.RelatedObject.URL, n.client.key, params, obj)
7984
return obj, err

justfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ export PATH := home_directory() + "/go/bin:" + env('PATH')
88
_default:
99
just --list --unsorted
1010

11+
# ⭐ run format, lint, and tests to prepare for CI
12+
prepare: format lint test
13+
1114
# ⭐ run all unit tests, or pass a package name (./invoice) to only run those tests
1215
test *args="./...":
1316
go run scripts/test_with_stripe_mock/main.go -race {{ args }}

stripe_client_test.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"encoding/json"
77
"fmt"
88
"net/http"
9+
"net/http/httptest"
910
"testing"
1011
"time"
1112

@@ -198,7 +199,14 @@ func TestParseUnknownEventNotificationWithRelatedObject(t *testing.T) {
198199
}`
199200

200201
// Create mock server that expects a GET to /v1/related_objects/ro_123
201-
server := MockServerWithStripeContext(t, http.MethodGet, "/v1/related_objects/ro_123", "ctx_123", nil, relatedObjectResp)
202+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
203+
assert.Equal(t, http.MethodGet, r.Method)
204+
assert.Equal(t, "/v1/related_objects/ro_123", r.URL.Path)
205+
assert.Equal(t, "Bearer "+TestAPIKey, r.Header.Get("Authorization"))
206+
assert.Equal(t, "ctx_123", r.Header.Get("Stripe-Context"))
207+
assert.Equal(t, "event=evt_test_webhook", r.Header.Get("Stripe-Request-Trigger"))
208+
w.Write([]byte(relatedObjectResp))
209+
}))
202210
defer server.Close()
203211

204212
// Create client with custom backend pointing to mock server
@@ -262,7 +270,14 @@ func TestFetchEventHTTPCall(t *testing.T) {
262270
}`
263271

264272
// Create mock server that expects a GET to /v2/core/events/evt_123
265-
server := MockServerWithStripeContext(t, http.MethodGet, "/v2/core/events/evt_123", "ctx_123", nil, mockEventResponse)
273+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
274+
assert.Equal(t, http.MethodGet, r.Method)
275+
assert.Equal(t, "/v2/core/events/evt_123", r.URL.Path)
276+
assert.Equal(t, "Bearer "+TestAPIKey, r.Header.Get("Authorization"))
277+
assert.Equal(t, "ctx_123", r.Header.Get("Stripe-Context"))
278+
assert.Equal(t, "event=evt_123", r.Header.Get("Stripe-Request-Trigger"))
279+
w.Write([]byte(mockEventResponse))
280+
}))
266281
defer server.Close()
267282

268283
// Create client with custom backend pointing to mock server
@@ -319,7 +334,13 @@ func TestFetchRelatedObject(t *testing.T) {
319334
}`
320335

321336
// Create mock server that expects a GET to /v1/billing/meters/bm_123
322-
server := MockServer(t, http.MethodGet, "/v1/billing/meters/bm_123", nil, mockRelatedObjectResponse)
337+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
338+
assert.Equal(t, http.MethodGet, r.Method)
339+
assert.Equal(t, "/v1/billing/meters/bm_123", r.URL.Path)
340+
assert.Equal(t, "Bearer "+TestAPIKey, r.Header.Get("Authorization"))
341+
assert.Equal(t, "event=evt_123", r.Header.Get("Stripe-Request-Trigger"))
342+
w.Write([]byte(mockRelatedObjectResponse))
343+
}))
323344
defer server.Close()
324345

325346
// Create client with custom backend pointing to mock server
@@ -385,7 +406,14 @@ func TestFetchRelatedObjectUnknownEvent(t *testing.T) {
385406

386407
// Create mock server that expects a GET to /v1/billing/meters/bm_123
387408
// it also checks that stripe-context is correct
388-
server := MockServerWithStripeContext(t, http.MethodGet, "/v1/billing/meters/bm_123", "ctx_123", nil, mockRelatedObjectResponse)
409+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
410+
assert.Equal(t, http.MethodGet, r.Method)
411+
assert.Equal(t, "/v1/billing/meters/bm_123", r.URL.Path)
412+
assert.Equal(t, "Bearer "+TestAPIKey, r.Header.Get("Authorization"))
413+
assert.Equal(t, "ctx_123", r.Header.Get("Stripe-Context"))
414+
assert.Equal(t, "event=evt_123", r.Header.Get("Stripe-Request-Trigger"))
415+
w.Write([]byte(mockRelatedObjectResponse))
416+
}))
389417
defer server.Close()
390418

391419
// Create client with custom backend pointing to mock server

0 commit comments

Comments
 (0)