codehog-google-checkout 1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +25 -0
- data/Isolate +13 -0
- data/MIT-LICENSE.txt +23 -0
- data/Manifest.txt +42 -0
- data/README.txt +148 -0
- data/Rakefile +35 -0
- data/examples/google_notifications_controller.rb +159 -0
- data/lib/duck_punches/hpricot.rb +24 -0
- data/lib/google-checkout.rb +61 -0
- data/lib/google-checkout/cart.rb +357 -0
- data/lib/google-checkout/command.rb +191 -0
- data/lib/google-checkout/notification.rb +226 -0
- data/spec/fixtures/google/checkout-shopping-cart.xml +22 -0
- data/spec/fixtures/google/commands/add-merchant-order-number.xml +5 -0
- data/spec/fixtures/google/commands/add-tracking-data.xml +8 -0
- data/spec/fixtures/google/commands/archive-order.xml +3 -0
- data/spec/fixtures/google/commands/authorize-order.xml +2 -0
- data/spec/fixtures/google/commands/cancel-order.xml +5 -0
- data/spec/fixtures/google/commands/charge-order.xml +4 -0
- data/spec/fixtures/google/commands/deliver-order.xml +9 -0
- data/spec/fixtures/google/commands/process-order.xml +2 -0
- data/spec/fixtures/google/commands/refund-order.xml +6 -0
- data/spec/fixtures/google/commands/send-buyer-message.xml +7 -0
- data/spec/fixtures/google/commands/unarchive-order.xml +2 -0
- data/spec/fixtures/google/notifications/authorization-amount-notification.xml +10 -0
- data/spec/fixtures/google/notifications/charge-amount-notification.xml +8 -0
- data/spec/fixtures/google/notifications/chargeback-amount-notification.xml +8 -0
- data/spec/fixtures/google/notifications/new-order-notification.xml +85 -0
- data/spec/fixtures/google/notifications/order-state-change-notification.xml +11 -0
- data/spec/fixtures/google/notifications/refund-amount-notification.xml +8 -0
- data/spec/fixtures/google/notifications/risk-information-notification.xml +23 -0
- data/spec/fixtures/google/responses/checkout-redirect.xml +5 -0
- data/spec/fixtures/google/responses/error.xml +5 -0
- data/spec/fixtures/google/responses/request-received.xml +3 -0
- data/spec/google-checkout/cart_spec.rb +165 -0
- data/spec/google-checkout/command_spec.rb +131 -0
- data/spec/google-checkout/notification_spec.rb +181 -0
- data/spec/google-checkout/response_spec.rb +49 -0
- data/spec/google-checkout_spec.rb +15 -0
- data/spec/spec_helper.rb +47 -0
- data/support/cacert.pem +7815 -0
- metadata +203 -0
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<refund-amount-notification xmlns="http://checkout.google.com/schema/2"
|
3
|
+
serial-number="bea6bc1b-e1e2-44fe-80ff-0180e33a2614">
|
4
|
+
<google-order-number>841171949013218</google-order-number>
|
5
|
+
<latest-refund-amount currency="USD">226.06</latest-refund-amount>
|
6
|
+
<total-refund-amount currency="USD">226.06</total-refund-amount>
|
7
|
+
<timestamp>2006-03-18T20:25:31</timestamp>
|
8
|
+
</refund-amount-notification>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<risk-information-notification xmlns="http://checkout.google.com/schema/2"
|
3
|
+
serial-number="bea6bc1b-e1e2-44fe-80ff-0180e33a2614">
|
4
|
+
<google-order-number>841171949013218</google-order-number>
|
5
|
+
<risk-information>
|
6
|
+
<eligible-for-protection>true</eligible-for-protection>
|
7
|
+
<billing-address id="BuyerBillingAddress">
|
8
|
+
<contact-name>John Smith</contact-name>
|
9
|
+
<email>johnsmith@example.com</email>
|
10
|
+
<address1>10 Example Road</address1>
|
11
|
+
<city>Sampleville</city>
|
12
|
+
<region>CA</region>
|
13
|
+
<postal-code>94141</postal-code>
|
14
|
+
<country-code>US</country-code>
|
15
|
+
</billing-address>
|
16
|
+
<avs-response>Y</avs-response>
|
17
|
+
<cvn-response>M</cvn-response>
|
18
|
+
<partial-cc-number>3719</partial-cc-number>
|
19
|
+
<ip-address>10.11.12.13</ip-address>
|
20
|
+
<buyer-account-age>6</buyer-account-age>
|
21
|
+
</risk-information>
|
22
|
+
<timestamp>2006-01-15T10:44:06</timestamp>
|
23
|
+
</risk-information-notification>
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe GoogleCheckout, "Cart (generic)" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
7
|
+
:name => "PeepCode Screencast",
|
8
|
+
:description => "A few screencasts",
|
9
|
+
:price => 9.00
|
10
|
+
})
|
11
|
+
GoogleCheckout.use_sandbox
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should generate proper live buy button_url" do
|
15
|
+
GoogleCheckout.use_production
|
16
|
+
@cart.button_url.should match(%r{https://checkout\.google\.com/buttons/buy\.gif})
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should generate proper live checkout button_url" do
|
20
|
+
GoogleCheckout.use_production
|
21
|
+
@cart.button_url(:buy_or_checkout => :checkout).should match(%r{https://checkout\.google\.com/buttons/checkout\.gif})
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should generate proper sandbox buy button_url" do
|
25
|
+
@cart.button_url.should match(%r{https://sandbox\.google\.com/buttons/buy\.gif})
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should generate proper sandbox checkout button_url" do
|
29
|
+
@cart.button_url(:buy_or_checkout => :checkout).should match(%r{https://sandbox\.google\.com/checkout/buttons/checkout\.gif})
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should generate checkout button" do
|
33
|
+
@cart.checkout_button.should match(/buy\.gif/)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe GoogleCheckout, "Cart (currency)" do
|
39
|
+
|
40
|
+
it "should show correct currency if all items use the same currency" do
|
41
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
42
|
+
:name => "PeepCode Screencast",
|
43
|
+
:description => "A few screencasts",
|
44
|
+
:price => 9.00,
|
45
|
+
:currency => "CAD"
|
46
|
+
})
|
47
|
+
@cart.currency.should == "CAD"
|
48
|
+
@cart.add_item(
|
49
|
+
:name => "PeepCode Screencast 2",
|
50
|
+
:description => "A few more casts",
|
51
|
+
:price => 9.00,
|
52
|
+
:currency => "CAD"
|
53
|
+
)
|
54
|
+
@cart.currency.should == "CAD"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should show correct currency if all items use the same currency" do
|
58
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
59
|
+
:name => "PeepCode Screencast",
|
60
|
+
:description => "A few screencasts",
|
61
|
+
:price => 9.00,
|
62
|
+
:currency => "JPY"
|
63
|
+
})
|
64
|
+
@cart.currency.should == "JPY"
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should show USD for empty cart" do
|
68
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key")
|
69
|
+
@cart.currency.should == "USD"
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should throw an exception if currencies are mixed" do
|
73
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
74
|
+
:name => "PeepCode Screencast",
|
75
|
+
:description => "A few screencasts",
|
76
|
+
:price => 9.00,
|
77
|
+
:currency => "CAD"
|
78
|
+
})
|
79
|
+
@cart.currency.should == "CAD"
|
80
|
+
@cart.add_item(
|
81
|
+
:name => "PeepCode Screencast 2",
|
82
|
+
:description => "A few more casts",
|
83
|
+
:price => 9.00,
|
84
|
+
:currency => "USD"
|
85
|
+
)
|
86
|
+
lambda { @cart.currency }.should raise_exception(RuntimeError, "Mixing currency not allowed")
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
it "should show USD if no currency provided" do
|
91
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
92
|
+
:name => "PeepCode Screencast",
|
93
|
+
:description => "A few screencasts",
|
94
|
+
:price => 9.00
|
95
|
+
})
|
96
|
+
@cart.currency.should == "USD"
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
describe GoogleCheckout, "Cart Post" do
|
103
|
+
|
104
|
+
before(:each) do
|
105
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
106
|
+
:name => "PeepCode Screencast",
|
107
|
+
:description => "One screencast",
|
108
|
+
:price => 9.00
|
109
|
+
})
|
110
|
+
GoogleCheckout.use_sandbox
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should get merchant_id" do
|
114
|
+
@cart.merchant_id.should == 'my_id'
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should get merchant_key" do
|
118
|
+
@cart.merchant_key.should == 'my_key'
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should post request to Google" do
|
122
|
+
# :null_object means eat all other methods and return self
|
123
|
+
net_http = mock("net_http", {:null_object => true})
|
124
|
+
Net::HTTP.should_receive(:new).and_return(net_http)
|
125
|
+
|
126
|
+
success_response = Net::HTTPSuccess.new(Net::HTTP.version_1_2, 200, "OK")
|
127
|
+
success_response.should_receive(:body).and_return(read_xml_fixture('responses/checkout-redirect'))
|
128
|
+
net_http.should_receive(:request).and_return(success_response)
|
129
|
+
|
130
|
+
response = @cart.post
|
131
|
+
response.should be_kind_of(GoogleCheckout::CheckoutRedirect)
|
132
|
+
response.serial_number.should == 'bea6bc1b-e1e2-44fe-80ff-0180e33a2614'
|
133
|
+
response.redirect_url.should == 'https://checkout.google.com/buy?foo=bar&id=8572098456'
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should set merchant private data" do
|
137
|
+
@cart.merchant_private_data = {"merchant-order-number" => "1234-5678-9012"}
|
138
|
+
@cart.merchant_private_data["merchant-order-number"].should == "1234-5678-9012"
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should include merchant private in the generated xml" do
|
142
|
+
@cart.merchant_private_data = {"merchant-order-number" => "1234-5678-9012"}
|
143
|
+
@cart.to_xml.should match(/<merchant-order-number>1234-5678-9012<\/merchant-order-number>/)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should not include merchant private data if none is set" do
|
147
|
+
@cart.to_xml.should_not match(/<merchant-private-data>/)
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should include merchant-item-id in XML if :item_id was passed with the item" do
|
151
|
+
@cart.add_item({
|
152
|
+
:name => "Item",
|
153
|
+
:description => "Item description",
|
154
|
+
:price => "1.00",
|
155
|
+
:quantity => 1,
|
156
|
+
:item_id => "ITEM-007"
|
157
|
+
})
|
158
|
+
@cart.to_xml.should match(%r{<merchant-item-id>ITEM-007</merchant-item-id>})
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should generate XML"
|
162
|
+
|
163
|
+
it "should receive error when placing false request"
|
164
|
+
|
165
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe "basic command", :shared => true do
|
4
|
+
|
5
|
+
it "should include XML header" do
|
6
|
+
@order.to_xml.should match(/^<\?xml version=\"1\.0\" encoding=\"UTF-8\"\?>/)
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
describe GoogleCheckout, "Command class" do
|
12
|
+
|
13
|
+
it "should read SSL certs" do
|
14
|
+
GoogleCheckout::Command.x509_store.should be_kind_of(OpenSSL::X509::Store)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe GoogleCheckout, "Command instance" do
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
@command = GoogleCheckout::Command.new("my_id", "my_key")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should generate sandbox url" do
|
26
|
+
GoogleCheckout.use_sandbox
|
27
|
+
@command.url.should match(/sandbox/)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should generate production url" do
|
31
|
+
GoogleCheckout.use_production
|
32
|
+
@command.url.should match(/checkout\.google\.com/)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe GoogleCheckout, "Charge Order" do
|
38
|
+
|
39
|
+
before(:each) do
|
40
|
+
@order = GoogleCheckout::ChargeOrder.new("my_id", "my_key", "1234567890")
|
41
|
+
GoogleCheckout.use_sandbox
|
42
|
+
@order.amount = 123.45
|
43
|
+
end
|
44
|
+
|
45
|
+
it_should_behave_like "basic command"
|
46
|
+
|
47
|
+
it "should retrieve order number" do
|
48
|
+
@order.google_order_number.should == '1234567890'
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should get merchant_id" do
|
52
|
+
@order.merchant_id.should == 'my_id'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should get merchant_key" do
|
56
|
+
@order.merchant_key.should == 'my_key'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should generate XML" do
|
60
|
+
@order.to_xml.should match(/amount currency="USD"/)
|
61
|
+
@order.to_xml.should match(/123\.45<\/amount>/)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should post request to Google successfully" do
|
65
|
+
# :null_object means eat all other methods and return self
|
66
|
+
net_http = mock("net_http", { :null_object => true })
|
67
|
+
Net::HTTP.should_receive(:new).and_return(net_http)
|
68
|
+
|
69
|
+
success_response = Net::HTTPSuccess.new(Net::HTTP.version_1_2, 200, "OK")
|
70
|
+
success_response.should_receive(:body).and_return(read_xml_fixture('responses/request-received'))
|
71
|
+
net_http.should_receive(:request).and_return(success_response)
|
72
|
+
|
73
|
+
response = @order.post
|
74
|
+
response.should be_kind_of(GoogleCheckout::RequestReceived)
|
75
|
+
response.should_not be_error
|
76
|
+
response.serial_number.should == 'bea6bc1b-e1e2-44fe-80ff-0180e33a2614'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should post request to Google and return error" do
|
80
|
+
# :null_object means eat all other methods and return self
|
81
|
+
net_http = mock("net_http", { :null_object => true })
|
82
|
+
Net::HTTP.should_receive(:new).and_return(net_http)
|
83
|
+
|
84
|
+
# NOTE HTTP response code is irrelevant here.
|
85
|
+
error_response = Net::HTTPSuccess.new(Net::HTTP.version_1_2, 200, "OK")
|
86
|
+
error_response.should_receive(:body).and_return(read_xml_fixture('responses/error'))
|
87
|
+
net_http.should_receive(:request).and_return(error_response)
|
88
|
+
|
89
|
+
lambda { @order.post }.should raise_error(GoogleCheckout::APIError)
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
describe GoogleCheckout, "Checkout API Request (with Cart)" do
|
95
|
+
|
96
|
+
it "should use HTTP Basic Auth"
|
97
|
+
|
98
|
+
it "should use proper content type"
|
99
|
+
|
100
|
+
it "should use proper accept type"
|
101
|
+
|
102
|
+
it "should report success of request"
|
103
|
+
|
104
|
+
it "should report error and error message"
|
105
|
+
|
106
|
+
it "should return redirect url"
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
describe GoogleCheckout, "Send Buyer Email" do
|
112
|
+
|
113
|
+
before(:each) do
|
114
|
+
@command = GoogleCheckout::SendBuyerMessage.new("my_id", "my_key", "1234567890", "Thanks for the order!")
|
115
|
+
end
|
116
|
+
|
117
|
+
# <send-buyer-message xmlns="http://checkout.google.com/schema/2"
|
118
|
+
# google-order-number="841171949013218">
|
119
|
+
# <message>Due to high volume, your order will ship
|
120
|
+
# next week. Thank you for your patience.</message>
|
121
|
+
# <send-email>true</send-email>
|
122
|
+
# </send-buyer-message>
|
123
|
+
|
124
|
+
it "should post email to the buyer" do
|
125
|
+
xml = @command.to_xml
|
126
|
+
xml.should match(%r{google-order-number="1234567890"})
|
127
|
+
xml.should match(%r{<message>Thanks for the order!</message>})
|
128
|
+
xml.should match(%r{<send-email>true</send-email>})
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe "basic notification", :shared => true do
|
4
|
+
|
5
|
+
it "should get serial number" do
|
6
|
+
@notification.serial_number.should == 'bea6bc1b-e1e2-44fe-80ff-0180e33a2614'
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should get google order number" do
|
10
|
+
@notification.google_order_number.should == '841171949013218'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should generate acknowledgment XML" do
|
14
|
+
@notification.acknowledgment_xml.should match(/notification-acknowledgment/)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe GoogleCheckout, "New Order Notification" do
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/new-order-notification'))
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should identify type of notification" do
|
26
|
+
@notification.should be_kind_of(GoogleCheckout::NewOrderNotification)
|
27
|
+
end
|
28
|
+
|
29
|
+
it_should_behave_like "basic notification"
|
30
|
+
|
31
|
+
it "should find fulfillment order state" do
|
32
|
+
@notification.fulfillment_order_state.should == 'NEW'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should find financial order state" do
|
36
|
+
@notification.financial_order_state.should == 'REVIEWING'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should use financial state shortcut" do
|
40
|
+
@notification.state.should == "REVIEWING"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should create Money object from order total" do
|
44
|
+
@notification.order_total.should be_kind_of(Money)
|
45
|
+
@notification.order_total.cents.should == 19098
|
46
|
+
@notification.order_total.currency.iso_code.should == 'USD'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should throw error when accessing non-existent value" do
|
50
|
+
lambda { @notification.there_is_no_field_with_this_name }.should raise_error(NoMethodError)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should find sub-keys of merchant-private-data as if they were at the root" do
|
54
|
+
@notification.peepcode_order_number.should == '1234-5678-9012'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should find total tax" do
|
58
|
+
@notification.total_tax.should be_kind_of(Money)
|
59
|
+
@notification.total_tax.cents.should == 0
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should find email marketing allowed" do
|
63
|
+
@notification.email_allowed.should be_false
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should get email or buyer-shipping-address/email or buyer-billing-address/email"
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
describe GoogleCheckout, "Order State Change Notification" do
|
72
|
+
|
73
|
+
before(:each) do
|
74
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/order-state-change-notification'))
|
75
|
+
end
|
76
|
+
|
77
|
+
it_should_behave_like "basic notification"
|
78
|
+
|
79
|
+
it "should identify type of notification" do
|
80
|
+
@notification.should be_kind_of(GoogleCheckout::OrderStateChangeNotification)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should find new financial state" do
|
84
|
+
@notification.new_financial_order_state.should == 'CHARGING'
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should find new fulfillment state" do
|
88
|
+
@notification.new_fulfillment_order_state.should == 'NEW'
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should use financial state shortcut" do
|
92
|
+
@notification.state.should == 'CHARGING'
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
describe GoogleCheckout, "Risk Information Notification" do
|
98
|
+
|
99
|
+
before(:each) do
|
100
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/risk-information-notification'))
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should identify type of notification" do
|
104
|
+
@notification.should be_kind_of(GoogleCheckout::RiskInformationNotification)
|
105
|
+
end
|
106
|
+
|
107
|
+
it_should_behave_like "basic notification"
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
describe GoogleCheckout, "Charge Amount Notification" do
|
112
|
+
|
113
|
+
before(:each) do
|
114
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/charge-amount-notification'))
|
115
|
+
end
|
116
|
+
|
117
|
+
it_should_behave_like "basic notification"
|
118
|
+
|
119
|
+
it "should identify type of notification" do
|
120
|
+
@notification.should be_kind_of(GoogleCheckout::ChargeAmountNotification)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should get latest charge amount" do
|
124
|
+
@notification.latest_charge_amount.should be_kind_of(Money)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should get total charge amount" do
|
128
|
+
@notification.total_charge_amount.should be_kind_of(Money)
|
129
|
+
@notification.total_charge_amount.cents.should == 22606
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
describe GoogleCheckout, "Authorization Amount Notification" do
|
135
|
+
|
136
|
+
before(:each) do
|
137
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/authorization-amount-notification'))
|
138
|
+
end
|
139
|
+
|
140
|
+
it_should_behave_like "basic notification"
|
141
|
+
|
142
|
+
it "should identify type of notification" do
|
143
|
+
@notification.should be_kind_of(GoogleCheckout::AuthorizationAmountNotification)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
describe GoogleCheckout, "Chargeback Amount Notification" do
|
149
|
+
|
150
|
+
before(:each) do
|
151
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/chargeback-amount-notification'))
|
152
|
+
end
|
153
|
+
|
154
|
+
it_should_behave_like "basic notification"
|
155
|
+
|
156
|
+
it "identifies type of notification" do
|
157
|
+
@notification.should be_kind_of(GoogleCheckout::ChargebackAmountNotification)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "parses chargeback amounts as money objects" do
|
161
|
+
@notification.latest_chargeback_amount.cents.should == 22606
|
162
|
+
@notification.total_chargeback_amount.cents.should == 22606
|
163
|
+
@notification.latest_chargeback_amount.currency.iso_code.should == "USD"
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
describe GoogleCheckout, "Refund Amount Notification" do
|
169
|
+
|
170
|
+
before(:each) do
|
171
|
+
@notification = GoogleCheckout::Notification.parse(read_xml_fixture('notifications/refund-amount-notification'))
|
172
|
+
end
|
173
|
+
|
174
|
+
it_should_behave_like "basic notification"
|
175
|
+
|
176
|
+
it "should identify type of notification" do
|
177
|
+
@notification.should be_kind_of(GoogleCheckout::RefundAmountNotification)
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|