oel-brenner-mousetrap 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Mousetrap::Plan do
4
+ # name: Test
5
+ # billingFrequencyQuantity: "1"
6
+ # code: TEST
7
+ # recurringChargeAmount: "42.00"
8
+ # createdDatetime: "2009-08-25T04:24:34+00:00"
9
+ # id: 5fbb9a84-e27f-102c-a92d-40402145ee8b
10
+ # isActive: "1"
11
+ # billingFrequency: monthly
12
+ # description: Test
13
+ # trialDays: "0"
14
+ # setupChargeCode: TEST_SETUP
15
+ # recurringChargeCode: TEST_RECURRING
16
+ # billingFrequencyUnit: months
17
+ # setupChargeAmount: "0.00"
18
+ # billingFrequencyPer: month
19
+
20
+ describe ".all" do
21
+ before do
22
+ Mousetrap::Plan.stub :build_resources_from
23
+ end
24
+
25
+ it "gets all plans" do
26
+ Mousetrap::Plan.should_receive(:get_resources).with('plans').and_return('some hash')
27
+ Mousetrap::Plan.all
28
+ end
29
+
30
+ it "handles no-plans case" do
31
+ Mousetrap::Plan.stub :get_resources => { 'plans' => nil }
32
+ Mousetrap::Plan.all.should == []
33
+ end
34
+
35
+ it "builds resources from the response" do
36
+ Mousetrap::Plan.stub :get_resources => { 'plans' => 'some hash' }
37
+ Mousetrap::Plan.should_receive(:build_resources_from).with({ 'plans' => 'some hash' })
38
+ Mousetrap::Plan.all
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,188 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ module Mousetrap
4
+ class Widget < Resource
5
+ attr_accessor :id
6
+ attr_accessor :code
7
+
8
+
9
+ protected
10
+
11
+ def self.attributes_from_api(attributes)
12
+ {
13
+ :id => attributes['id'],
14
+ :code => attributes['code'],
15
+ }
16
+ end
17
+
18
+ def self.plural_resource_name
19
+ 'widgets'
20
+ end
21
+
22
+ def self.singular_resource_name
23
+ 'widget'
24
+ end
25
+ end
26
+ end
27
+
28
+ describe Mousetrap::Resource do
29
+ before do
30
+ Mousetrap.product_code = 'my_product_code'
31
+ end
32
+
33
+ subject { Mousetrap::Resource }
34
+
35
+ describe "class" do
36
+ it "sets the base URI" do
37
+ subject.default_options[:base_uri].should == 'https://cheddargetter.com'
38
+ end
39
+
40
+ it "set the header to our client name" do
41
+ subject.headers['User-Agent'].should == 'Mousetrap Ruby Client'
42
+ end
43
+ end
44
+
45
+ describe ".[]" do
46
+ before do
47
+ customer_hash = Factory.attributes_for :existing_customer
48
+ customer_hash = HashWithIndifferentAccess.new customer_hash
49
+ @code = customer_hash[:code]
50
+ @server_response_hash = { 'widgets' => { 'widget' => customer_hash } }
51
+ Mousetrap::Widget.stub(:get_resource => @server_response_hash)
52
+ end
53
+
54
+ it "gets a resource with widget code" do
55
+ Mousetrap::Widget.should_receive(:get_resource).with('widgets', @code).and_return(@server_response_hash)
56
+ Mousetrap::Widget[@code]
57
+ end
58
+
59
+ context "returned widget instance" do
60
+ subject { Mousetrap::Widget[@code] }
61
+ it { should be_instance_of(Mousetrap::Widget) }
62
+ it { should_not be_new_record }
63
+ it { subject.code.should == @code }
64
+ end
65
+
66
+ context "when there's errors" do
67
+ it "handles kludgy 'Resource not found' response" do
68
+ Mousetrap::Widget.stub :get_resource => {
69
+ 'error' => 'Resource not found: Customer not found for code=cantfindme within productCode=MOUSETRAP_TEST'
70
+ }
71
+ Mousetrap::Widget['cantfindme'].should be_nil
72
+ end
73
+
74
+ it "raises error if response has one" do
75
+ expect do
76
+ Mousetrap::Widget.stub :get_resource => { 'error' => 'some other error' }
77
+ Mousetrap::Widget['some_resource_code'].should be_nil
78
+ end.to raise_error(RuntimeError, 'some other error')
79
+ end
80
+ end
81
+ end
82
+
83
+ describe ".destroy_all" do
84
+ it "destroys each resource" do
85
+ all_widgets = [stub, stub, stub]
86
+ Mousetrap::Widget.stub :all => all_widgets
87
+ all_widgets.each { |w| w.should_receive :destroy }
88
+ Mousetrap::Widget.destroy_all
89
+ end
90
+ end
91
+
92
+ describe ".exists?" do
93
+ it "gets by code" do
94
+ Mousetrap::Widget.should_receive(:[]).with('some_resource_code')
95
+ Mousetrap::Widget.exists? 'some_resource_code'
96
+ end
97
+
98
+ it "returns true when resource exists" do
99
+ Mousetrap::Widget.stub :[] => stub('some_widget')
100
+ Mousetrap::Widget.exists?('some_resource_code').should be_true
101
+ end
102
+
103
+ it "returns false when resource doesn't exist" do
104
+ Mousetrap::Widget.stub :[] => nil
105
+ Mousetrap::Widget.exists?('some_resource_code').should be_false
106
+ end
107
+ end
108
+
109
+ describe '#destroy' do
110
+ context "for existing records" do
111
+ it 'destroys' do
112
+ widget = Mousetrap::Widget.new
113
+ widget.stub :new_record? => false
114
+ widget.should_receive(:member_action).with('delete')
115
+ widget.destroy
116
+ end
117
+ end
118
+
119
+ context "for new records" do
120
+ it "does nothing" do
121
+ widget = Mousetrap::Widget.new
122
+ widget.stub :new_record? => true
123
+ Mousetrap::Customer.should_not_receive(:member_action)
124
+ widget.destroy
125
+ end
126
+ end
127
+ end
128
+
129
+ describe "#exists?" do
130
+ it "calls .exists? with code" do
131
+ Mousetrap::Widget.should_receive(:exists?).with('some_resource_code')
132
+ r = Mousetrap::Widget.new :code => 'some_resource_code'
133
+ r.exists?
134
+ end
135
+ end
136
+
137
+ describe '#new?' do
138
+ it 'is true if id is nil' do
139
+ s = Mousetrap::Widget.new
140
+ s.should be_new
141
+ end
142
+
143
+ it 'is false if id exists' do
144
+ s = Mousetrap::Widget.new
145
+ s.stub :id => 'some_id'
146
+ s.should_not be_new
147
+ end
148
+ end
149
+
150
+ describe "protected methods" do
151
+ describe ".delete_resource" do
152
+ it "gets /xml/<resource>/delete/productCode/<my_product_code>/code/<resource_code>" do
153
+ subject.should_receive(:post).with('/xml/widgets/delete/productCode/my_product_code/code/some_resource_code')
154
+ subject.delete_resource 'widgets', 'some_resource_code'
155
+ end
156
+ end
157
+
158
+ describe ".get_resource" do
159
+ it "gets /xml/<resource>/get/productCode/<my_product_code>/code/<resource_code>" do
160
+ subject.should_receive(:get).with('/xml/widgets/get/productCode/my_product_code/code/some%2Bresource%2Bcode')
161
+ subject.get_resource 'widgets', 'some+resource+code'
162
+ end
163
+ end
164
+
165
+ describe ".get_resources" do
166
+ it "gets /xml/<resource>/get/productCode/<my_product_code>" do
167
+ subject.should_receive(:get).with('/xml/widgets/get/productCode/my_product_code')
168
+ subject.get_resources 'widgets'
169
+ end
170
+ end
171
+
172
+ describe ".post_resource" do
173
+ it "posts to /xml/<resource>/<action>/productCode/<product_code>" do
174
+ subject.should_receive(:post).with('/xml/widgets/some_action/productCode/my_product_code', :body => 'some_hash')
175
+ subject.post_resource 'widgets', 'some_action', 'some_hash'
176
+ end
177
+ end
178
+
179
+ describe ".put_resource" do
180
+ it "puts to /xml/<resource>/<action>/productCode/<product_code>/code/<resource_code>" do
181
+ subject.should_receive(:post).with(
182
+ '/xml/widgets/some_action/productCode/my_product_code/code/some_widget_code',
183
+ :body => 'some_hash')
184
+ subject.put_resource 'widgets', 'some_action', 'some_widget_code', 'some_hash'
185
+ end
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,152 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Mousetrap::Subscription do
4
+ include Fixtures
5
+
6
+ describe '.[]' do
7
+ it 'raises NotImplementedError' do
8
+ expect do
9
+ Mousetrap::Subscription['some_code']
10
+ end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
11
+ end
12
+ end
13
+
14
+ describe '.all' do
15
+ it 'raises NotImplementedError' do
16
+ expect do
17
+ Mousetrap::Subscription.all
18
+ end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
19
+ end
20
+ end
21
+
22
+ describe '.destroy_all' do
23
+ it 'raises NotImplementedError' do
24
+ expect do
25
+ Mousetrap::Subscription.destroy_all
26
+ end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
27
+ end
28
+ end
29
+
30
+ describe '.exists?' do
31
+ it 'raises NotImplementedError' do
32
+ expect do
33
+ Mousetrap::Subscription.exists?('some_code')
34
+ end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
35
+ end
36
+ end
37
+
38
+ describe "plan" do
39
+ it 'has the correct planCode populated' do
40
+ Mousetrap::Subscription.new_from_api(multiple_subscriptions.first).plan.code.should == "PLUS"
41
+ end
42
+
43
+ it 'exists' do
44
+ Mousetrap::Subscription.new_from_api(multiple_subscriptions.first).plan.should_not be_nil
45
+ end
46
+ end
47
+
48
+ describe '#destroy' do
49
+ it "raises a NotImplementedError" do
50
+ expect do
51
+ Mousetrap::Subscription.new.destroy
52
+ end.to raise_error(NotImplementedError)
53
+ end
54
+ end
55
+
56
+ describe '.attributes_for_api' do
57
+ context "when month is set" do
58
+ it 'coerces the month to 2 digits' do
59
+ Mousetrap::Subscription.attributes_for_api(
60
+ :credit_card_expiration_month => 2
61
+ )[:ccExpMonth].should == '02'
62
+ end
63
+ end
64
+
65
+ context "when month is not set" do
66
+ it "is nil" do
67
+ Mousetrap::Subscription.attributes_for_api(
68
+ :credit_card_expiration_month => nil
69
+ )[:ccExpMonth].should == nil
70
+ end
71
+ end
72
+ end
73
+
74
+ describe '#exists?' do
75
+ it 'raises NotImplementedError' do
76
+ expect do
77
+ s = Mousetrap::Subscription.new
78
+ s.exists?
79
+ end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
80
+ end
81
+ end
82
+
83
+ describe '.update' do
84
+ before do
85
+ Mousetrap::Subscription.stub :put_resource => { 'some' => 'hash' }
86
+ end
87
+
88
+ let (:mutated_attributes) do
89
+ {
90
+ :with => 'something',
91
+ :without => nil,
92
+ :also_without => ''
93
+ }
94
+ end
95
+
96
+ def do_update
97
+ Mousetrap::Subscription.update('some customer code', 'some attributes')
98
+ end
99
+
100
+ it "transforms the attribute names for CheddarGetter" do
101
+ Mousetrap::Subscription.should_receive(:attributes_for_api).with('some attributes').and_return({})
102
+ do_update
103
+ end
104
+
105
+ it "deletes unfilled attribute entries" do
106
+
107
+ Mousetrap::Subscription.stub :attributes_for_api => mutated_attributes
108
+
109
+ Mousetrap::Subscription.should_receive(:put_resource).with(
110
+ 'customers',
111
+ 'edit-subscription',
112
+ 'some customer code',
113
+ { :with => 'something' }
114
+ )
115
+
116
+ do_update
117
+ end
118
+
119
+ it "calls put_resource" do
120
+ Mousetrap::Subscription.stub :attributes_for_api => mutated_attributes
121
+
122
+ Mousetrap::Subscription.should_receive(:put_resource).with(
123
+ 'customers',
124
+ 'edit-subscription',
125
+ 'some customer code',
126
+ { :with => 'something' }
127
+ )
128
+
129
+ do_update
130
+ end
131
+
132
+ it "raises a CheddarGetter error if returned" do
133
+ Mousetrap::Subscription.stub \
134
+ :attributes_for_api => mutated_attributes,
135
+ :put_resource => { 'error' => 'some error message' }
136
+
137
+ expect { do_update }.to raise_error('some error message')
138
+ end
139
+ end
140
+ end
141
+
142
+
143
+ __END__
144
+
145
+ subscription:
146
+ ccExpirationDate: "2010-01-31T00:00:00+00:00"
147
+ gatewayToken:
148
+ createdDatetime: "2009-08-27T15:55:51+00:00"
149
+ ccType: visa
150
+ id: 46ad3f1c-e472-102c-a92d-40402145ee8b
151
+ ccLastFour: "1111"
152
+ canceledDatetime:
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Mousetrap do
4
+ subject { Mousetrap }
5
+
6
+ it "stores product code" do
7
+ subject.product_code = 'my_product_code'
8
+ subject.product_code.should == 'my_product_code'
9
+ end
10
+
11
+ describe "#authenticate" do
12
+ it "sets basic auth based on the supplied user and password" do
13
+ Mousetrap::Resource.should_receive(:basic_auth).with('lark@example.com', 'abc123')
14
+ subject.authenticate 'lark@example.com', 'abc123'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format nested
@@ -0,0 +1,23 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'mousetrap'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+ require 'factory_girl'
7
+ require 'active_support'
8
+
9
+ # Requires supporting files with custom matchers and macros, etc,
10
+ # in ./support/ and its subdirectories.
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
12
+
13
+ module Mousetrap
14
+ class Resource
15
+ def self.get(*args)
16
+ raise 'You must stub this, or should_receive at a higher level.'
17
+ end
18
+
19
+ def self.post(*args)
20
+ raise 'You must stub this, or should_receive at a higher level.'
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,189 @@
1
+ module Fixtures
2
+ def full_customer
3
+ {
4
+ "company"=>nil,
5
+ "lastName"=>"LasterName1255024322",
6
+ "code"=>"1255024322",
7
+ "gatewayToken"=>nil,
8
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
9
+ "modifiedDatetime"=>"2009-10-08T17:55:30+00:00",
10
+ "subscriptions"=> {
11
+ "subscription" => [
12
+ {
13
+ "ccExpirationDate"=>"2010-01-31T00:00:00+00:00",
14
+ "plans"=> {
15
+ "plan"=> {
16
+ "name"=>"Plus",
17
+ "billingFrequencyQuantity"=>"1",
18
+ "code"=>"PLUS",
19
+ "recurringChargeAmount"=>"49.00",
20
+ "createdDatetime"=>"2009-10-06T14:54:24+00:00",
21
+ "id"=>"51a912d0-03d8-102d-a92d-40402145ee8b",
22
+ "isActive"=>"1",
23
+ "billingFrequency"=>"monthly",
24
+ "description"=>nil,
25
+ "trialDays"=>"0",
26
+ "setupChargeCode"=>"PLUS_SETUP",
27
+ "recurringChargeCode"=>"PLUS_RECURRING",
28
+ "billingFrequencyUnit"=>"months",
29
+ "setupChargeAmount"=>"49.00",
30
+ "billingFrequencyPer"=>"month"}},
31
+ "gatewayToken"=>nil,
32
+ "createdDatetime"=>"2009-10-08T17:55:31+00:00",
33
+ "ccType"=>"visa",
34
+ "id"=>"f426d5ae-0583-102d-a92d-40402145ee8b",
35
+ "ccLastFour"=>"2222",
36
+ "canceledDatetime"=>nil,
37
+ "invoices"=>
38
+ {"invoice"=>
39
+ {"number"=>"12",
40
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
41
+ "type"=>"subscription",
42
+ "billingDatetime"=>"2009-11-08T17:55:30+00:00",
43
+ "id"=>"f3142928-0583-102d-a92d-40402145ee8b"}}},
44
+
45
+ {"ccExpirationDate"=>"2010-01-31T00:00:00+00:00",
46
+ "plans"=>
47
+ {"plan"=>
48
+ {"name"=>"Basic",
49
+ "billingFrequencyQuantity"=>"1",
50
+ "code"=>"BASIC",
51
+ "recurringChargeAmount"=>"24.00",
52
+ "createdDatetime"=>"2009-10-06T14:53:49+00:00",
53
+ "id"=>"3cd2e840-03d8-102d-a92d-40402145ee8b",
54
+ "isActive"=>"1",
55
+ "billingFrequency"=>"monthly",
56
+ "description"=>nil,
57
+ "trialDays"=>"0",
58
+ "setupChargeCode"=>"BASIC_SETUP",
59
+ "recurringChargeCode"=>"BASIC_RECURRING",
60
+ "billingFrequencyUnit"=>"months",
61
+ "setupChargeAmount"=>"24.00",
62
+ "billingFrequencyPer"=>"month"}},
63
+ "gatewayToken"=>nil,
64
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
65
+ "ccType"=>"visa",
66
+ "id"=>"f30e0e94-0583-102d-a92d-40402145ee8b",
67
+ "ccLastFour"=>"2222",
68
+ "canceledDatetime"=>nil,
69
+ "invoices"=>
70
+ {"invoice"=>
71
+ {"number"=>"11",
72
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
73
+ "transactions"=>
74
+ {"transaction"=>
75
+ {"response"=>"approved",
76
+ "code"=>"",
77
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
78
+ "memo"=>"This is a simulated transaction",
79
+ "id"=>"f327b178-0583-102d-a92d-40402145ee8b",
80
+ "parentId"=>nil,
81
+ "amount"=>"24.00",
82
+ "transactedDatetime"=>"2009-10-08T17:55:30+00:00",
83
+ "gatewayAccount"=>
84
+ {"id"=>""},
85
+ "charges"=>
86
+ {"charge"=>
87
+ {"code"=>"BASIC_SETUP",
88
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
89
+ "type"=>"setup",
90
+ "quantity"=>"1",
91
+ "id"=>"f325406e-0583-102d-a92d-40402145ee8b",
92
+ "description"=>nil,
93
+ "eachAmount"=>"24.00"}}}},
94
+ "type"=>"setup",
95
+ "billingDatetime"=>"2009-10-08T17:55:30+00:00",
96
+ "id"=>"f3125468-0583-102d-a92d-40402145ee8b"}}}]},
97
+ "id"=>"f30cd614-0583-102d-a92d-40402145ee8b",
98
+ "firstName"=>"FirsterName1",
99
+ "email"=>"example1@example.com"}
100
+ end
101
+
102
+ def multiple_subscriptions
103
+ [
104
+ {"ccExpirationDate"=>"2010-01-31T00:00:00+00:00",
105
+ "plans"=>
106
+ {"plan"=>
107
+ {"name"=>"Plus",
108
+ "billingFrequencyQuantity"=>"1",
109
+ "code"=>"PLUS",
110
+ "recurringChargeAmount"=>"49.00",
111
+ "createdDatetime"=>"2009-10-06T14:54:24+00:00",
112
+ "id"=>"51a912d0-03d8-102d-a92d-40402145ee8b",
113
+ "isActive"=>"1",
114
+ "billingFrequency"=>"monthly",
115
+ "description"=>nil,
116
+ "trialDays"=>"0",
117
+ "setupChargeCode"=>"PLUS_SETUP",
118
+ "recurringChargeCode"=>"PLUS_RECURRING",
119
+ "billingFrequencyUnit"=>"months",
120
+ "setupChargeAmount"=>"49.00",
121
+ "billingFrequencyPer"=>"month"}},
122
+ "gatewayToken"=>nil,
123
+ "createdDatetime"=>"2009-10-08T17:55:31+00:00",
124
+ "ccType"=>"visa",
125
+ "id"=>"f426d5ae-0583-102d-a92d-40402145ee8b",
126
+ "ccLastFour"=>"2222",
127
+ "canceledDatetime"=>nil,
128
+ "invoices"=>
129
+ {"invoice"=>
130
+ {"number"=>"12",
131
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
132
+ "type"=>"subscription",
133
+ "billingDatetime"=>"2009-11-08T17:55:30+00:00",
134
+ "id"=>"f3142928-0583-102d-a92d-40402145ee8b"}}},
135
+
136
+ {"ccExpirationDate"=>"2010-01-31T00:00:00+00:00",
137
+ "plans"=>
138
+ {"plan"=>
139
+ {"name"=>"Basic",
140
+ "billingFrequencyQuantity"=>"1",
141
+ "code"=>"BASIC",
142
+ "recurringChargeAmount"=>"24.00",
143
+ "createdDatetime"=>"2009-10-06T14:53:49+00:00",
144
+ "id"=>"3cd2e840-03d8-102d-a92d-40402145ee8b",
145
+ "isActive"=>"1",
146
+ "billingFrequency"=>"monthly",
147
+ "description"=>nil,
148
+ "trialDays"=>"0",
149
+ "setupChargeCode"=>"BASIC_SETUP",
150
+ "recurringChargeCode"=>"BASIC_RECURRING",
151
+ "billingFrequencyUnit"=>"months",
152
+ "setupChargeAmount"=>"24.00",
153
+ "billingFrequencyPer"=>"month"}},
154
+ "gatewayToken"=>nil,
155
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
156
+ "ccType"=>"visa",
157
+ "id"=>"f30e0e94-0583-102d-a92d-40402145ee8b",
158
+ "ccLastFour"=>"2222",
159
+ "canceledDatetime"=>nil,
160
+ "invoices"=>
161
+ {"invoice"=>
162
+ {"number"=>"11",
163
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
164
+ "transactions"=>
165
+ {"transaction"=>
166
+ {"response"=>"approved",
167
+ "code"=>"",
168
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
169
+ "memo"=>"This is a simulated transaction",
170
+ "id"=>"f327b178-0583-102d-a92d-40402145ee8b",
171
+ "parentId"=>nil,
172
+ "amount"=>"24.00",
173
+ "transactedDatetime"=>"2009-10-08T17:55:30+00:00",
174
+ "gatewayAccount"=>
175
+ {"id"=>""},
176
+ "charges"=>
177
+ {"charge"=>
178
+ {"code"=>"BASIC_SETUP",
179
+ "createdDatetime"=>"2009-10-08T17:55:30+00:00",
180
+ "type"=>"setup",
181
+ "quantity"=>"1",
182
+ "id"=>"f325406e-0583-102d-a92d-40402145ee8b",
183
+ "description"=>nil,
184
+ "eachAmount"=>"24.00"}}}},
185
+ "type"=>"setup",
186
+ "billingDatetime"=>"2009-10-08T17:55:30+00:00",
187
+ "id"=>"f3125468-0583-102d-a92d-40402145ee8b"}}}]
188
+ end
189
+ end