Skip to content

Commit 36b1c7c

Browse files
authored
ThinEvent reason and livemode (#1516)
* added test for parsing v2 thin events with livemode and reason * added attr_reader to ThinEvent for livemode and reason * added EventReason and EventReasonRequest type to thin_event.rb
1 parent da19166 commit 36b1c7c

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

lib/stripe/thin_event.rb

+22-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,26 @@
11
# frozen_string_literal: true
22

33
module Stripe
4+
class EventReasonRequest
5+
attr_reader :id, :idempotency_key
6+
7+
def initialize(event_reason_request_payload = {})
8+
@id = event_reason_request_payload[:id]
9+
@idempotency_key = event_reason_request_payload[:idempotency_key]
10+
end
11+
end
12+
13+
class EventReason
14+
attr_reader :type, :request
15+
16+
def initialize(event_reason_payload = {})
17+
@type = event_reason_payload[:type]
18+
@request = EventReasonRequest.new(event_reason_payload[:request])
19+
end
20+
end
21+
422
class ThinEvent
5-
attr_reader :id, :type, :created, :context, :related_object
23+
attr_reader :id, :type, :created, :context, :related_object, :livemode, :reason
624

725
def initialize(event_payload = {})
826
@id = event_payload[:id]
@@ -11,7 +29,9 @@ def initialize(event_payload = {})
1129
@context = event_payload[:context]
1230
@livemode = event_payload[:livemode]
1331
@related_object = event_payload[:related_object]
14-
@reason = event_payload[:reason]
32+
return if event_payload[:reason].nil?
33+
34+
@reason = EventReason.new(event_payload[:reason])
1535
end
1636
end
1737
end

test/stripe/v2_event_test.rb

+34
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,26 @@ def retrieve_event(evt_id)
3636
},
3737
}.to_json
3838

39+
@v2_push_payload_with_livemode_and_reason = {
40+
"id" => "evt_234",
41+
"object" => "v2.core.event",
42+
"type" => "v1.billing.meter.error_report_triggered",
43+
"created" => "2022-02-15T00:27:45.330Z",
44+
"related_object" => {
45+
"id" => "mtr_123",
46+
"type" => "billing.meter",
47+
"url" => "/v1/billing/meters/mtr_123",
48+
},
49+
"livemode" => true,
50+
"reason" => {
51+
"type" => "a.b.c",
52+
"request" => {
53+
"id" => "r_123",
54+
"idempotency_key" => "key",
55+
},
56+
},
57+
}.to_json
58+
3959
@v2_pull_payload = {
4060
"id" => "evt_234",
4161
"object" => "v2.core.event",
@@ -76,6 +96,20 @@ def retrieve_event(evt_id)
7696
assert_equal "evt_234", event.id
7797
assert_equal "v1.billing.meter.error_report_triggered", event.type
7898
assert_equal "2022-02-15T00:27:45.330Z", event.created
99+
assert_nil event.reason
100+
end
101+
102+
should "parse v2 events with livemode and reason" do
103+
event = parse_signed_event(@v2_push_payload_with_livemode_and_reason)
104+
assert event.is_a?(Stripe::ThinEvent)
105+
assert_equal "evt_234", event.id
106+
assert_equal "v1.billing.meter.error_report_triggered", event.type
107+
assert_equal "2022-02-15T00:27:45.330Z", event.created
108+
assert_true event.livemode
109+
assert_not_nil event.reason
110+
assert_equal "a.b.c", event.reason.type
111+
assert_equal "r_123", event.reason.request.id
112+
assert_equal "key", event.reason.request.idempotency_key
79113
end
80114

81115
should "raise a JSON::ParserError from an invalid JSON payload" do

0 commit comments

Comments
 (0)