mlins-google-checkout 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +14 -0
- data/MIT-LICENSE.txt +23 -0
- data/README.txt +143 -0
- data/Rakefile +34 -0
- data/VERSION.yml +4 -0
- data/examples/google_notifications_controller.rb +159 -0
- data/lib/duck_punches/hpricot.rb +24 -0
- data/lib/google-checkout.rb +65 -0
- data/lib/google-checkout/cart.rb +302 -0
- data/lib/google-checkout/command.rb +191 -0
- data/lib/google-checkout/geography.rb +7 -0
- data/lib/google-checkout/geography/area.rb +11 -0
- data/lib/google-checkout/geography/postal.rb +26 -0
- data/lib/google-checkout/geography/us_country.rb +24 -0
- data/lib/google-checkout/geography/us_state.rb +22 -0
- data/lib/google-checkout/geography/us_zip.rb +22 -0
- data/lib/google-checkout/geography/world.rb +12 -0
- data/lib/google-checkout/merchant_calculation.rb +30 -0
- data/lib/google-checkout/notification.rb +212 -0
- data/lib/google-checkout/shipping.rb +8 -0
- data/lib/google-checkout/shipping/filters.rb +32 -0
- data/lib/google-checkout/shipping/flat_rate.rb +26 -0
- data/lib/google-checkout/shipping/merchant_calculated.rb +29 -0
- data/lib/google-checkout/shipping/method.rb +11 -0
- data/lib/google-checkout/shipping/pickup.rb +22 -0
- data/lib/google-checkout/shipping/restrictions.rb +32 -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/merchant_calculations/shipping.xml +40 -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 +110 -0
- data/spec/google-checkout/command_spec.rb +131 -0
- data/spec/google-checkout/geography/postal_spec.rb +26 -0
- data/spec/google-checkout/geography/us_country_spec.rb +26 -0
- data/spec/google-checkout/geography/us_state_spec.rb +11 -0
- data/spec/google-checkout/geography/us_zip_spec.rb +11 -0
- data/spec/google-checkout/geography/world_spec.rb +12 -0
- data/spec/google-checkout/merchant_calculation_spec.rb +17 -0
- data/spec/google-checkout/notification_spec.rb +175 -0
- data/spec/google-checkout/response_spec.rb +49 -0
- data/spec/google-checkout/shipping/flat_rate_spec.rb +46 -0
- data/spec/google-checkout/shipping/merchant_calculated_spec.rb +70 -0
- data/spec/google-checkout/shipping/pickup_spec.rb +22 -0
- data/spec/google-checkout_spec.rb +15 -0
- data/spec/spec_helper.rb +47 -0
- data/support/cacert.pem +7815 -0
- metadata +140 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
module GoogleCheckout
|
2
|
+
module Shipping
|
3
|
+
class MerchantCalculated < Method
|
4
|
+
|
5
|
+
include Restrictions
|
6
|
+
include Filters
|
7
|
+
|
8
|
+
attr_accessor :name, :price, :currency
|
9
|
+
|
10
|
+
def initialize(name, price, currency = 'USD')
|
11
|
+
@name = name
|
12
|
+
@price = price
|
13
|
+
@currency = currency
|
14
|
+
@shipping_restrictions = {:allowed => [], :excluded => [], :allow_us_po_box => true}
|
15
|
+
@address_filters = {:allowed => [], :excluded => [], :allow_us_po_box => true}
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_xml
|
19
|
+
xml = Builder::XmlMarkup.new
|
20
|
+
xml.tag!('merchant-calculated-shipping', :name => name) do
|
21
|
+
xml.tag!('price', price, :currency => currency)
|
22
|
+
xml << shipping_restrictions_xml if shipping_restrictions?
|
23
|
+
xml << address_filters_xml if address_filters?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GoogleCheckout
|
2
|
+
module Shipping
|
3
|
+
class Pickup < Method
|
4
|
+
|
5
|
+
attr_accessor :name, :price, :currency
|
6
|
+
|
7
|
+
def initialize(name, price = '0.00', currency = 'USD')
|
8
|
+
@name = name
|
9
|
+
@price = price
|
10
|
+
@currency = currency
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
xml = Builder::XmlMarkup.new
|
15
|
+
xml.tag!('pickup', :name => name) do
|
16
|
+
xml.tag!('price', price, :currency => currency)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module GoogleCheckout
|
2
|
+
module Shipping
|
3
|
+
module Restrictions
|
4
|
+
|
5
|
+
attr_accessor :shipping_restrictions
|
6
|
+
|
7
|
+
def shipping_restrictions?
|
8
|
+
@shipping_restrictions != {:allowed => [], :excluded => [], :allow_us_po_box => true}
|
9
|
+
end
|
10
|
+
|
11
|
+
def shipping_restrictions_xml
|
12
|
+
xml = Builder::XmlMarkup.new
|
13
|
+
xml.tag!('shipping-restrictions') do
|
14
|
+
xml.tag!('allowed-areas') do
|
15
|
+
@shipping_restrictions[:allowed].each do |area|
|
16
|
+
xml << area.to_xml
|
17
|
+
end
|
18
|
+
end unless @shipping_restrictions[:allowed].empty?
|
19
|
+
xml.tag!('excluded-areas') do
|
20
|
+
@shipping_restrictions[:excluded].each do |area|
|
21
|
+
xml << area.to_xml
|
22
|
+
end
|
23
|
+
end unless @shipping_restrictions[:excluded].empty?
|
24
|
+
xml.tag!('allow-us-po-box') do
|
25
|
+
xml.text! 'false'
|
26
|
+
end unless @shipping_restrictions[:allow_us_po_box]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<checkout-shopping-cart xmlns="http://checkout.google.com/schema/2">
|
3
|
+
<shopping-cart>
|
4
|
+
<items>
|
5
|
+
<item>
|
6
|
+
<item-name>HelloWorld 2GB MP3 Player</item-name>
|
7
|
+
<item-description>HelloWorld, the simple MP3 player</item-description>
|
8
|
+
<unit-price currency="USD">159.99</unit-price>
|
9
|
+
<quantity>1</quantity>
|
10
|
+
</item>
|
11
|
+
</items>
|
12
|
+
</shopping-cart>
|
13
|
+
<checkout-flow-support>
|
14
|
+
<merchant-checkout-flow-support>
|
15
|
+
<shipping-methods>
|
16
|
+
<flat-rate-shipping name="SuperShip Ground">
|
17
|
+
<price currency="USD">9.99</price>
|
18
|
+
</flat-rate-shipping>
|
19
|
+
</shipping-methods>
|
20
|
+
</merchant-checkout-flow-support>
|
21
|
+
</checkout-flow-support>
|
22
|
+
</checkout-shopping-cart>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<add-tracking-data xmlns="http://checkout.google.com/schema/2"
|
3
|
+
google-order-number="841171949013218">
|
4
|
+
<tracking-data>
|
5
|
+
<carrier>UPS</carrier>
|
6
|
+
<tracking-number>Z9842W69871281267</tracking-number>
|
7
|
+
</tracking-data>
|
8
|
+
</add-tracking-data>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<deliver-order xmlns="http://checkout.google.com/schema/2"
|
3
|
+
google-order-number="841171949013218">
|
4
|
+
<tracking-data>
|
5
|
+
<carrier>UPS</carrier>
|
6
|
+
<tracking-number>Z5498W45987123684</tracking-number>
|
7
|
+
</tracking-data>
|
8
|
+
<send-email>false</send-email>
|
9
|
+
</deliver-order>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<refund-order xmlns="http://checkout.google.com/schema/2" google-order-number="6014423719">
|
3
|
+
<amount currency="USD">15.00</amount>
|
4
|
+
<comment>Discount for inconvenience; ship replacement item</comment>
|
5
|
+
<reason>Damaged Merchandise</reason>
|
6
|
+
</refund-order>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<send-buyer-message xmlns="http://checkout.google.com/schema/2"
|
3
|
+
google-order-number="841171949013218">
|
4
|
+
<message>Due to high volume, your order will ship
|
5
|
+
next week. Thank you for your patience.</message>
|
6
|
+
<send-email>true</send-email>
|
7
|
+
</send-buyer-message>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<merchant-calculation-callback xmlns="http://checkout.google.com/schema/2">
|
3
|
+
<shopping-cart>
|
4
|
+
<cart-expiration>
|
5
|
+
<good-until-date>2007-12-31T23:59:59-05:00</good-until-date>
|
6
|
+
</cart-expiration>
|
7
|
+
<items>
|
8
|
+
<item>
|
9
|
+
<merchant-item-id>GGLAA1453</merchant-item-id>
|
10
|
+
<item-name>Dry Food Pack</item-name>
|
11
|
+
<item-description>One pack of nutritious dried food for emergencies.</item-description>
|
12
|
+
<quantity>1</quantity>
|
13
|
+
<unit-price currency="USD">4.99</unit-price>
|
14
|
+
</item>
|
15
|
+
<item>
|
16
|
+
<merchant-item-id>MGS2GBMP3</merchant-item-id>
|
17
|
+
<item-name>Megasound 2GB MP3 Player</item-name>
|
18
|
+
<item-description>This portable MP3 player stores 500 songs.</item-description>
|
19
|
+
<quantity>1</quantity>
|
20
|
+
<unit-price currency="USD">179.99</unit-price>
|
21
|
+
</item>
|
22
|
+
</items>
|
23
|
+
</shopping-cart>
|
24
|
+
|
25
|
+
<buyer-language>en_US</buyer-language>
|
26
|
+
<calculate>
|
27
|
+
<addresses>
|
28
|
+
<anonymous-address id="739030698069958">
|
29
|
+
<country-code>US</country-code>
|
30
|
+
<city>Anchorage</city>
|
31
|
+
<region>AK</region>
|
32
|
+
<postal-code>99501</postal-code>
|
33
|
+
</anonymous-address>
|
34
|
+
</addresses>
|
35
|
+
<shipping>
|
36
|
+
<method name="UPS 2nd Day Air"/>
|
37
|
+
<method name="UPS Ground"/>
|
38
|
+
</shipping>
|
39
|
+
</calculate>
|
40
|
+
</merchant-calculation-callback>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<authorization-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
|
+
<authorization-amount currency="USD">226.06</authorization-amount>
|
6
|
+
<authorization-expiration-date>2006-03-18T20:25:31</authorization-expiration-date>
|
7
|
+
<avs-response>Y</avs-response>
|
8
|
+
<cvn-response>Y</cvn-response>
|
9
|
+
<timestamp>2006-03-18T20:25:31</timestamp>
|
10
|
+
</authorization-amount-notification>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<charge-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-charge-amount currency="USD">226.06</latest-charge-amount>
|
6
|
+
<total-charge-amount currency="USD">226.06</total-charge-amount>
|
7
|
+
<timestamp>2006-03-18T18:25:31</timestamp>
|
8
|
+
</charge-amount-notification>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<chargeback-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-chargeback-amount currency="USD">226.06</latest-chargeback-amount>
|
6
|
+
<total-chargeback-amount currency="USD">226.06</total-chargeback-amount>
|
7
|
+
<timestamp>2006-03-18T20:25:31</timestamp>
|
8
|
+
</chargeback-amount-notification>
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<new-order-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
|
+
<buyer-shipping-address>
|
6
|
+
|
7
|
+
<contact-name>John Smith</contact-name>
|
8
|
+
<email>johnsmith@example.com</email>
|
9
|
+
<address1>10 Example Road</address1>
|
10
|
+
<city>Sampleville</city>
|
11
|
+
<region>CA</region>
|
12
|
+
<postal-code>94141</postal-code>
|
13
|
+
<country-code>US</country-code>
|
14
|
+
</buyer-shipping-address>
|
15
|
+
<buyer-billing-address>
|
16
|
+
<contact-name>Bill Hu</contact-name>
|
17
|
+
<email>billhu@example.com</email>
|
18
|
+
<address1>99 Credit Lane</address1>
|
19
|
+
<city>Mountain View</city>
|
20
|
+
<region>CA</region>
|
21
|
+
<postal-code>94043</postal-code>
|
22
|
+
<country-code>US</country-code>
|
23
|
+
</buyer-billing-address>
|
24
|
+
<buyer-id>294873009217523</buyer-id>
|
25
|
+
<fulfillment-order-state>NEW</fulfillment-order-state>
|
26
|
+
<financial-order-state>REVIEWING</financial-order-state>
|
27
|
+
|
28
|
+
<shopping-cart>
|
29
|
+
<cart-expiration>
|
30
|
+
<good-until-date>2007-12-31T23:59:59-05:00</good-until-date>
|
31
|
+
</cart-expiration>
|
32
|
+
<items>
|
33
|
+
<item>
|
34
|
+
<merchant-item-id>GGLAA1453</merchant-item-id>
|
35
|
+
<item-name>Dry Food Pack</item-name>
|
36
|
+
<item-description>One pack of nutritious dried food for emergencies.</item-description>
|
37
|
+
<quantity>1</quantity>
|
38
|
+
<tax-table-selector>food</tax-table-selector>
|
39
|
+
<unit-price currency="USD">4.99</unit-price>
|
40
|
+
</item>
|
41
|
+
<item>
|
42
|
+
<merchant-item-id>MGS2GBMP3</merchant-item-id>
|
43
|
+
<item-name>Megasound 2GB MP3 Player</item-name>
|
44
|
+
<item-description>This portable MP3 player stores 500 songs.</item-description>
|
45
|
+
<quantity>1</quantity>
|
46
|
+
<unit-price currency="USD">179.99</unit-price>
|
47
|
+
<merchant-private-item-data>
|
48
|
+
<merchant-product-id>1234567890</merchant-product-id>
|
49
|
+
</merchant-private-item-data>
|
50
|
+
</item>
|
51
|
+
</items>
|
52
|
+
<merchant-private-data>
|
53
|
+
<peepcode-order-number>1234-5678-9012</peepcode-order-number>
|
54
|
+
</merchant-private-data>
|
55
|
+
</shopping-cart>
|
56
|
+
<order-adjustment>
|
57
|
+
<merchant-calculation-successful>true</merchant-calculation-successful>
|
58
|
+
<merchant-codes>
|
59
|
+
<coupon-adjustment>
|
60
|
+
<applied-amount currency="USD">5.00</applied-amount>
|
61
|
+
<code>FirstVisitCoupon</code>
|
62
|
+
<calculated-amount currency="USD">5.00</calculated-amount>
|
63
|
+
<message>You saved $5.00 for your first visit!</message>
|
64
|
+
</coupon-adjustment>
|
65
|
+
<gift-certificate-adjustment>
|
66
|
+
<applied-amount currency="USD">10.00</applied-amount>
|
67
|
+
<code>GiftCert12345</code>
|
68
|
+
<calculated-amount currency="USD">10.00</calculated-amount>
|
69
|
+
<message>You saved $10.00 with this gift certificate!</message>
|
70
|
+
</gift-certificate-adjustment>
|
71
|
+
</merchant-codes>
|
72
|
+
<total-tax currency="USD">0.0</total-tax>
|
73
|
+
<shipping>
|
74
|
+
<merchant-calculated-shipping-adjustment>
|
75
|
+
<shipping-name>SuperShip</shipping-name>
|
76
|
+
<shipping-cost currency="USD">9.95</shipping-cost>
|
77
|
+
</merchant-calculated-shipping-adjustment>
|
78
|
+
</shipping>
|
79
|
+
</order-adjustment>
|
80
|
+
<order-total currency="USD">190.98</order-total>
|
81
|
+
<buyer-marketing-preferences>
|
82
|
+
<email-allowed>false</email-allowed>
|
83
|
+
</buyer-marketing-preferences>
|
84
|
+
<timestamp>2006-05-03T17:32:11</timestamp>
|
85
|
+
</new-order-notification>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<order-state-change-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
|
+
<new-financial-order-state>CHARGING</new-financial-order-state>
|
6
|
+
<new-fulfillment-order-state>NEW</new-fulfillment-order-state>
|
7
|
+
<previous-financial-order-state>CHARGEABLE</previous-financial-order-state>
|
8
|
+
<previous-fulfillment-order-state>NEW</previous-fulfillment-order-state>
|
9
|
+
<reason>The reason goes here, if there is one.</reason>
|
10
|
+
<timestamp>2006-05-03T17:32:11</timestamp>
|
11
|
+
</order-state-change-notification>
|
@@ -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,110 @@
|
|
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{http://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{http://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{http://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{http://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 Post" do
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
@cart = GoogleCheckout::Cart.new("my_id", "my_key", {
|
42
|
+
:name => "PeepCode Screencast",
|
43
|
+
:description => "One screencast",
|
44
|
+
:price => 9.00
|
45
|
+
})
|
46
|
+
GoogleCheckout.use_sandbox
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should get merchant_id" do
|
50
|
+
@cart.merchant_id.should == 'my_id'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should get merchant_key" do
|
54
|
+
@cart.merchant_key.should == 'my_key'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should post request to Google" do
|
58
|
+
# :null_object means eat all other methods and return self
|
59
|
+
net_http = mock("net_http", { :null_object => true })
|
60
|
+
Net::HTTP.should_receive(:new).and_return(net_http)
|
61
|
+
|
62
|
+
success_response = Net::HTTPSuccess.new(Net::HTTP.version_1_2, 200, "OK")
|
63
|
+
success_response.should_receive(:body).and_return(read_xml_fixture('responses/checkout-redirect'))
|
64
|
+
net_http.should_receive(:request).and_return(success_response)
|
65
|
+
|
66
|
+
response = @cart.post
|
67
|
+
response.should be_kind_of(GoogleCheckout::CheckoutRedirect)
|
68
|
+
response.serial_number.should == 'bea6bc1b-e1e2-44fe-80ff-0180e33a2614'
|
69
|
+
response.redirect_url.should == 'https://checkout.google.com/buy?foo=bar&id=8572098456'
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should set merchant private data" do
|
73
|
+
@cart.merchant_private_data = { "merchant-order-number" => "1234-5678-9012" }
|
74
|
+
@cart.merchant_private_data["merchant-order-number"].should == "1234-5678-9012"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should include merchant private in the generated xml" do
|
78
|
+
@cart.merchant_private_data = { "merchant-order-number" => "1234-5678-9012" }
|
79
|
+
@cart.to_xml.should match(/<merchant-order-number>1234-5678-9012<\/merchant-order-number>/)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should not include merchant private data if none is set" do
|
83
|
+
@cart.to_xml.should_not match(/<merchant-private-data>/)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should include merchant-item-id in XML if :item_id was passed with the item" do
|
87
|
+
@cart.add_item({
|
88
|
+
:name => "Item",
|
89
|
+
:description => "Item description",
|
90
|
+
:price => "1.00",
|
91
|
+
:quantity => 1,
|
92
|
+
:item_id => "ITEM-007"
|
93
|
+
})
|
94
|
+
@cart.to_xml.should match(%r{<merchant-item-id>ITEM-007</merchant-item-id>})
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should include the merchant calculations url in the generated xml" do
|
98
|
+
@cart.merchant_calculations_url = 'http://my.calculations.com'
|
99
|
+
@cart.to_xml.should match(%r{<merchant-calculations-url>http://my.calculations.com</merchant-calculations-url>})
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should not include the merchant calculations url if it's not set" do
|
103
|
+
@cart.to_xml.should_not match(%r{<merchant-calculations-url>})
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should generate XML"
|
107
|
+
|
108
|
+
it "should receive error when placing false request"
|
109
|
+
|
110
|
+
end
|