pp-adaptive 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +4 -0
  4. data/README.md +54 -0
  5. data/Rakefile +8 -0
  6. data/lib/pp-adaptive/abstract_request.rb +44 -0
  7. data/lib/pp-adaptive/abstract_response.rb +46 -0
  8. data/lib/pp-adaptive/cancel_preapproval_request.rb +7 -0
  9. data/lib/pp-adaptive/cancel_preapproval_response.rb +7 -0
  10. data/lib/pp-adaptive/client.rb +56 -0
  11. data/lib/pp-adaptive/convert_currency_request.rb +33 -0
  12. data/lib/pp-adaptive/convert_currency_response.rb +11 -0
  13. data/lib/pp-adaptive/execute_payment_request.rb +9 -0
  14. data/lib/pp-adaptive/execute_payment_response.rb +12 -0
  15. data/lib/pp-adaptive/get_payment_options_request.rb +7 -0
  16. data/lib/pp-adaptive/get_payment_options_response.rb +32 -0
  17. data/lib/pp-adaptive/pay_request.rb +64 -0
  18. data/lib/pp-adaptive/pay_response.rb +29 -0
  19. data/lib/pp-adaptive/payment_details_request.rb +9 -0
  20. data/lib/pp-adaptive/payment_details_response.rb +53 -0
  21. data/lib/pp-adaptive/preapproval_details_request.rb +8 -0
  22. data/lib/pp-adaptive/preapproval_details_response.rb +35 -0
  23. data/lib/pp-adaptive/preapproval_request.rb +36 -0
  24. data/lib/pp-adaptive/preapproval_response.rb +7 -0
  25. data/lib/pp-adaptive/refund_request.rb +14 -0
  26. data/lib/pp-adaptive/refund_response.rb +12 -0
  27. data/lib/pp-adaptive/set_payment_options_request.rb +33 -0
  28. data/lib/pp-adaptive/set_payment_options_response.rb +7 -0
  29. data/lib/pp-adaptive/support/aliases.rb +33 -0
  30. data/lib/pp-adaptive/support/coerced_array.rb +52 -0
  31. data/lib/pp-adaptive/support/json_model.rb +140 -0
  32. data/lib/pp-adaptive/support/node.rb +45 -0
  33. data/lib/pp-adaptive/support/node_list.rb +45 -0
  34. data/lib/pp-adaptive/types/account_identifier.rb +6 -0
  35. data/lib/pp-adaptive/types/address.rb +17 -0
  36. data/lib/pp-adaptive/types/address_list.rb +5 -0
  37. data/lib/pp-adaptive/types/aliases/receiver_aliases.rb +15 -0
  38. data/lib/pp-adaptive/types/aliases/receiver_list_aliases.rb +32 -0
  39. data/lib/pp-adaptive/types/base_address.rb +11 -0
  40. data/lib/pp-adaptive/types/client_details_type.rb +12 -0
  41. data/lib/pp-adaptive/types/currency_code.rb +5 -0
  42. data/lib/pp-adaptive/types/currency_conversion.rb +17 -0
  43. data/lib/pp-adaptive/types/currency_conversion_list.rb +15 -0
  44. data/lib/pp-adaptive/types/currency_conversion_table.rb +5 -0
  45. data/lib/pp-adaptive/types/currency_list.rb +5 -0
  46. data/lib/pp-adaptive/types/currency_type.rb +6 -0
  47. data/lib/pp-adaptive/types/display_options.rb +8 -0
  48. data/lib/pp-adaptive/types/error_data.rb +11 -0
  49. data/lib/pp-adaptive/types/error_list.rb +5 -0
  50. data/lib/pp-adaptive/types/fault_message.rb +23 -0
  51. data/lib/pp-adaptive/types/funding_constraint.rb +5 -0
  52. data/lib/pp-adaptive/types/funding_plan.rb +28 -0
  53. data/lib/pp-adaptive/types/funding_plan_charge.rb +11 -0
  54. data/lib/pp-adaptive/types/funding_source.rb +9 -0
  55. data/lib/pp-adaptive/types/funding_type_info.rb +5 -0
  56. data/lib/pp-adaptive/types/funding_type_list.rb +5 -0
  57. data/lib/pp-adaptive/types/initiating_entity.rb +15 -0
  58. data/lib/pp-adaptive/types/institution_customer.rb +11 -0
  59. data/lib/pp-adaptive/types/invoice_data.rb +7 -0
  60. data/lib/pp-adaptive/types/invoice_item.rb +9 -0
  61. data/lib/pp-adaptive/types/pay_error.rb +18 -0
  62. data/lib/pp-adaptive/types/pay_error_list.rb +5 -0
  63. data/lib/pp-adaptive/types/payment_info.rb +16 -0
  64. data/lib/pp-adaptive/types/payment_info_list.rb +5 -0
  65. data/lib/pp-adaptive/types/phone_number_type.rb +7 -0
  66. data/lib/pp-adaptive/types/receiver.rb +17 -0
  67. data/lib/pp-adaptive/types/receiver_identifier.rb +12 -0
  68. data/lib/pp-adaptive/types/receiver_list.rb +5 -0
  69. data/lib/pp-adaptive/types/receiver_options.rb +21 -0
  70. data/lib/pp-adaptive/types/refund_info.rb +20 -0
  71. data/lib/pp-adaptive/types/refund_info_list.rb +5 -0
  72. data/lib/pp-adaptive/types/request_envelope.rb +6 -0
  73. data/lib/pp-adaptive/types/response_envelope.rb +13 -0
  74. data/lib/pp-adaptive/types/sender_identifier.rb +5 -0
  75. data/lib/pp-adaptive/types/sender_options.rb +5 -0
  76. data/lib/pp-adaptive/version.rb +3 -0
  77. data/lib/pp-adaptive.rb +75 -0
  78. data/pp-adaptive.gemspec +25 -0
  79. data/spec/public/cancel_preapproval_request_spec.rb +15 -0
  80. data/spec/public/cancel_preapproval_response_spec.rb +6 -0
  81. data/spec/public/client_spec.rb +85 -0
  82. data/spec/public/convert_currency_request_spec.rb +29 -0
  83. data/spec/public/convert_currency_response_spec.rb +62 -0
  84. data/spec/public/execute_payment_request_spec.rb +30 -0
  85. data/spec/public/execute_payment_response_spec.rb +66 -0
  86. data/spec/public/get_payment_options_request_spec.rb +15 -0
  87. data/spec/public/get_payment_options_response_spec.rb +141 -0
  88. data/spec/public/json_model_spec.rb +56 -0
  89. data/spec/public/node_list_spec.rb +58 -0
  90. data/spec/public/node_spec.rb +54 -0
  91. data/spec/public/pay_request_spec.rb +150 -0
  92. data/spec/public/pay_response_spec.rb +197 -0
  93. data/spec/public/payment_details_request_spec.rb +30 -0
  94. data/spec/public/payment_details_response_spec.rb +211 -0
  95. data/spec/public/preapproval_details_request_spec.rb +25 -0
  96. data/spec/public/preapproval_details_response_spec.rb +200 -0
  97. data/spec/public/preapproval_request_spec.rb +110 -0
  98. data/spec/public/preapproval_response_spec.rb +14 -0
  99. data/spec/public/refund_request_spec.rb +57 -0
  100. data/spec/public/refund_response_spec.rb +116 -0
  101. data/spec/public/set_payment_options_request_spec.rb +136 -0
  102. data/spec/public/set_payment_options_response_spec.rb +6 -0
  103. data/spec/shared/a_fault_message.rb +60 -0
  104. data/spec/shared/a_request_envelope.rb +14 -0
  105. data/spec/shared/a_response_envelope.rb +36 -0
  106. data/spec/spec_helper.rb +6 -0
  107. metadata +225 -0
@@ -0,0 +1,141 @@
1
+ require "spec_helper"
2
+
3
+ describe AdaptivePayments::GetPaymentOptionsResponse do
4
+ it_behaves_like "a ResponseEnvelope"
5
+ it_behaves_like "a FaultMessage"
6
+
7
+ let(:response) do
8
+ AdaptivePayments::GetPaymentOptionsResponse.from_json(
9
+ {
10
+ :initiatingEntity => {
11
+ :institutionCustomer => {
12
+ :institutionId => "inst123",
13
+ :firstName => "Bob",
14
+ :lastName => "Cat",
15
+ :displayName => "Bobcat",
16
+ :institutionCustomerId => "77",
17
+ :countryCode => "AU",
18
+ :email => "bob@site.com"
19
+ }
20
+ },
21
+ :displayOptions => {
22
+ :emailHeaderImageUrl => "http://site.com/email.png",
23
+ :emailMarketingImageUrl => "http://site.com/marketing.png",
24
+ :headerImageUrl => "http://site.com/header.png",
25
+ :businessName => "Bobcats R us"
26
+ },
27
+ :shippingAddressId => "addr123",
28
+ :senderOptions => {
29
+ :requireShippingAddressSelection => true
30
+ },
31
+ :receiverOptions => [
32
+ {
33
+ :description => "Primary receiver",
34
+ :customId => "cust123",
35
+ :invoiceData => {
36
+ :item => [
37
+ {
38
+ :name => "Video Game",
39
+ :identifier => "ident123",
40
+ :price => "20.00",
41
+ :item_price => "10.00",
42
+ :item_count => "2"
43
+ }
44
+ ],
45
+ :total_tax => "2.00",
46
+ :total_shipping => "0.00"
47
+ }
48
+ }
49
+ ]
50
+ }.to_json
51
+ )
52
+ end
53
+
54
+ it "maps ['initiatingEntity']['institutionCustomer']['institutionId'] to #institution_id" do
55
+ response.institution_id.should == "inst123"
56
+ end
57
+
58
+ it "maps ['initiatingEntity']['institutionCustomer']['firstName'] to #customer_first_name" do
59
+ response.customer_first_name.should == "Bob"
60
+ end
61
+
62
+ it "maps ['initiatingEntity']['institutionCustomer']['lastName'] to #customer_last_name" do
63
+ response.customer_last_name.should == "Cat"
64
+ end
65
+
66
+ it "maps ['initiatingEntity']['institutionCustomer']['displayName'] to #customer_display_name" do
67
+ response.customer_display_name.should == "Bobcat"
68
+ end
69
+
70
+ it "maps ['initiatingEntity']['institutionCustomer']['institutionCustomerId'] to #institution_customer_id" do
71
+ response.institution_customer_id.should == "77"
72
+ end
73
+
74
+ it "maps ['initiatingEntity']['institutionCustomer']['countryCode'] to #customer_country_code" do
75
+ response.customer_country_code.should == "AU"
76
+ end
77
+
78
+ it "maps ['initiatingEntity']['institutionCustomer']['email'] to #customer_email" do
79
+ response.customer_email.should == "bob@site.com"
80
+ end
81
+
82
+ it "maps ['displayOptions']['emailHeaderImageUrl'] to #email_header_image_url" do
83
+ response.email_header_image_url.should == "http://site.com/email.png"
84
+ end
85
+
86
+ it "maps ['displayOptions']['emailMarketingImageUrl'] to #email_marketing_image_url" do
87
+ response.email_marketing_image_url.should == "http://site.com/marketing.png"
88
+ end
89
+
90
+ it "maps ['displayOptions']['headerImageUrl'] to #header_image_url" do
91
+ response.header_image_url.should == "http://site.com/header.png"
92
+ end
93
+
94
+ it "maps ['displayOptions']['businessName'] to #business_na,e" do
95
+ response.business_name.should == "Bobcats R us"
96
+ end
97
+
98
+ it "maps ['shippingAddressId'] to #shipping_address_id" do
99
+ response.shipping_address_id.should == "addr123"
100
+ end
101
+
102
+ it "maps ['senderOptions']['requireShippingAddressSelection'] to #require_shipping_address_selection? " do
103
+ response.require_shipping_address_selection?.should be_true
104
+ end
105
+
106
+ it "maps ['receiverOptions'][0]['description'] to #receiver_options.first.description" do
107
+ response.receiver_options.first.description.should == "Primary receiver"
108
+ end
109
+
110
+ it "maps ['receiverOptions'][0]['customId'] to #receiver_options.first.custom_id" do
111
+ response.receiver_options.first.custom_id.should == "cust123"
112
+ end
113
+
114
+ it "maps ['receiverOptions'][0]['invoiceData']['totalTax'] to #receiver_options.first.invoice_data.total_tax" do
115
+ response.receiver_options.first.invoice_data.total_tax.should == BigDecimal("2.00")
116
+ end
117
+
118
+ it "maps ['receiverOptions'][0]['invoiceData']['totalShipping'] to #receiver_options.first.invoice_data.total_shipping" do
119
+ response.receiver_options.first.invoice_data.total_shipping.should == BigDecimal("0.00")
120
+ end
121
+
122
+ it "maps ['receiverOptions'][0]['invoiceData']['item'][0]['name'] to #receiver_options.first.invoice_data.items.first.name" do
123
+ response.receiver_options.first.invoice_data.items.first.name.should == "Video Game"
124
+ end
125
+
126
+ it "maps ['receiverOptions'][0]['invoiceData']['item'][0]['identifier'] to #receiver_options.first.invoice_data.items.first.identifier" do
127
+ response.receiver_options.first.invoice_data.items.first.identifier.should == "ident123"
128
+ end
129
+
130
+ it "maps ['receiverOptions'][0]['invoiceData']['item'][0]['price'] to #receiver_options.first.invoice_data.items.first.price" do
131
+ response.receiver_options.first.invoice_data.items.first.price.should == BigDecimal("20.00")
132
+ end
133
+
134
+ it "maps ['receiverOptions'][0]['invoiceData']['item'][0]['itemPrice'] to #receiver_options.first.invoice_data.items.first.item_price" do
135
+ response.receiver_options.first.invoice_data.items.first.item_price.should == BigDecimal("10.00")
136
+ end
137
+
138
+ it "maps ['receiverOptions'][0]['invoiceData']['item'][0]['itemCount'] to #receiver_options.first.invoice_data.items.first.item_count" do
139
+ response.receiver_options.first.invoice_data.items.first.item_count.should == 2
140
+ end
141
+ end
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+ require "virtus"
3
+
4
+ describe AdaptivePayments::JsonModel do
5
+ let(:model) do
6
+ Class.new(AdaptivePayments::JsonModel) do
7
+ attribute :an_example, Virtus::Attribute::String, :param => "anExample"
8
+ attribute :simple, Virtus::Attribute::String
9
+ attribute :numeric, Virtus::Attribute::Decimal
10
+ attribute :optional, Virtus::Attribute::String, :default => "test"
11
+ end
12
+ end
13
+
14
+ describe "coercion" do
15
+ let(:object) { model.new(:an_example => "string", :numeric => 20) }
16
+
17
+ it "casts inputs to the correct type" do
18
+ object.an_example.should == "string"
19
+ object.numeric.should == BigDecimal("20.00")
20
+ end
21
+ end
22
+
23
+ describe "default values" do
24
+ let(:object) { model.new }
25
+
26
+ it "reads the :default option for a default value" do
27
+ object.optional.should == "test"
28
+ end
29
+ end
30
+
31
+ describe "#to_json" do
32
+ context "with empty values" do
33
+ let(:json) { model.new.to_json }
34
+
35
+ it "omits the empty values" do
36
+ json.should == '{"optional":"test"}'
37
+ end
38
+ end
39
+
40
+ context "with decimal values" do
41
+ let(:json) { model.new(:numeric => 10).to_json }
42
+
43
+ it "formats the decimal to scale 2" do
44
+ json.should == '{"numeric":"10.00","optional":"test"}'
45
+ end
46
+ end
47
+
48
+ context "with a :param option" do
49
+ let(:json) { model.new(:an_example => "whatever").to_json }
50
+
51
+ it "uses the param as the key" do
52
+ json.should == '{"anExample":"whatever","optional":"test"}'
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,58 @@
1
+ require "spec_helper"
2
+
3
+ describe AdaptivePayments::NodeList do
4
+ let(:child_model) do
5
+ Class.new(AdaptivePayments::JsonModel) do
6
+ attribute :example, String
7
+ end
8
+ end
9
+
10
+ let(:model) do
11
+ klass = child_model
12
+ Class.new(AdaptivePayments::JsonModel) do
13
+ attribute :children, AdaptivePayments::NodeList[klass]
14
+ end
15
+ end
16
+
17
+ describe "default type" do
18
+ it "is a kind of Array" do
19
+ model.new.children.should be_a_kind_of(Array)
20
+ end
21
+ end
22
+
23
+ describe "coercion" do
24
+ context "when appending to" do
25
+ let(:object) { model.new.tap { |o| o.children << { :example => "anything" } } }
26
+
27
+ it "coerces hash to instances of the given type" do
28
+ object.children.first.should be_an_instance_of(child_model)
29
+ end
30
+ end
31
+
32
+ context "when overwriting" do
33
+ let(:object) { model.new.tap { |o| o.children = [{ :example => "anything" }] } }
34
+
35
+ it "coerces each member to instances of the given type" do
36
+ object.children.first.should be_an_instance_of(child_model)
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "#to_json" do
42
+ context "when not empty" do
43
+ let(:json) { model.new(:children => [{ :example => "whatever" }]).to_json }
44
+
45
+ it "is present as a child in the output" do
46
+ json.should == '{"children":[{"example":"whatever"}]}'
47
+ end
48
+ end
49
+
50
+ context "when empty" do
51
+ let(:json) { model.new.to_json }
52
+
53
+ it "is omitted from the output" do
54
+ json.should == '{}'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+
3
+ describe AdaptivePayments::Node do
4
+ let(:child_model) do
5
+ Class.new(AdaptivePayments::JsonModel) do
6
+ attribute :example, String
7
+ end
8
+ end
9
+
10
+ let(:model) do
11
+ klass = child_model
12
+ Class.new(AdaptivePayments::JsonModel) do
13
+ attribute :child, AdaptivePayments::Node[klass]
14
+ end
15
+ end
16
+
17
+ describe "default type" do
18
+ let(:child) { model.new.child }
19
+
20
+ it "is an instance of the boxed type" do
21
+ child.should be_an_instance_of(child_model)
22
+ end
23
+ end
24
+
25
+ describe "coercion" do
26
+ let(:object) { model.new(:child => { :example => "anything" }) }
27
+
28
+ it "coerces hash to instances of the given type" do
29
+ object.child.should be_an_instance_of(child_model)
30
+ end
31
+
32
+ it "maintains the original keys" do
33
+ object.child.example.should == "anything"
34
+ end
35
+ end
36
+
37
+ describe "#to_json" do
38
+ context "when not empty" do
39
+ let(:json) { model.new(:child => { :example => "whatever" }).to_json }
40
+
41
+ it "is present as a child in the output" do
42
+ json.should == '{"child":{"example":"whatever"}}'
43
+ end
44
+ end
45
+
46
+ context "when empty" do
47
+ let(:json) { model.new.to_json }
48
+
49
+ it "is omitted from the output" do
50
+ json.should == '{}'
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,150 @@
1
+ require "spec_helper"
2
+
3
+ describe AdaptivePayments::PayRequest do
4
+ it_behaves_like "a RequestEnvelope"
5
+
6
+ subject { AdaptivePayments::PayRequest }
7
+ its(:operation) { should == :Pay }
8
+
9
+ let(:request) do
10
+ AdaptivePayments::PayRequest.new(
11
+ :receivers => [ { :email => "receiver1@site.com", :amount => 20 }, { :email => "receiver2@site.com", :amount => 5, :primary => true } ],
12
+ :action_type => "PAY",
13
+ :payment_type => "DIGITALGOODS",
14
+ :allowed_funding_types => ["CREDITCARD", "BALANCE"],
15
+ :invoice_id => "42",
16
+ :preapproval_key => "ABCD-1234",
17
+ :pin => "1234",
18
+ :currency_code => "USD",
19
+ :cancel_url => "http://site.com/cancelled",
20
+ :return_url => "http://site.com/success",
21
+ :ipn_notification_url => "http://site.com/ipn",
22
+ :sender_email => "sender@site.com",
23
+ :sender_phone_country_code => "61",
24
+ :sender_phone_number => "0431300200",
25
+ :sender_phone_extension => "033",
26
+ :reverse_parallel_payments_on_error => false,
27
+ :tracking_id => "anything.id",
28
+ :memo => "a personal note"
29
+ )
30
+ end
31
+
32
+ let(:json) { JSON.parse(request.to_json) }
33
+
34
+ it "maps #receivers.first.email to ['receiverList']['receiver'][0]['email']" do
35
+ json["receiverList"]["receiver"][0]["email"].should == "receiver1@site.com"
36
+ end
37
+
38
+ it "maps #receivers.last.email to ['receiverList']['receiver'][1]['email']" do
39
+ json["receiverList"]["receiver"][1]["email"].should == "receiver2@site.com"
40
+ end
41
+
42
+ it "maps #receivers.first.amount to ['receiverList']['receiver'][0]['amount']" do
43
+ json["receiverList"]["receiver"][0]["amount"].should == "20.00"
44
+ end
45
+
46
+ it "maps #receivers.last.amount to ['receiverList']['receiver'][1]['amount']" do
47
+ json["receiverList"]["receiver"][1]["amount"].should == "5.00"
48
+ end
49
+
50
+ it "maps #receivers.last.primary to ['receiverList']['receiver'][1]['primary']" do
51
+ json["receiverList"]["receiver"][1]["primary"].should == true
52
+ end
53
+
54
+ it "maps #payment_type to ['receiverList']['receiver'][0]['paymentType']" do
55
+ json["receiverList"]["receiver"][0]["paymentType"].should == "DIGITALGOODS"
56
+ end
57
+
58
+ it "maps #allowed_funding_types.first to ['fundingConstraint']['allowedFundingType']['fundingTypeInfo'][0]['fundingType']" do
59
+ json["fundingConstraint"]["allowedFundingType"]["fundingTypeInfo"][0]["fundingType"].should == "CREDITCARD"
60
+ end
61
+
62
+ it "maps #allowed_funding_types.last to ['fundingConstraint']['allowedFundingType']['fundingTypeInfo'][1]['fundingType']" do
63
+ json["fundingConstraint"]["allowedFundingType"]["fundingTypeInfo"][1]["fundingType"].should == "BALANCE"
64
+ end
65
+
66
+ it "maps #invoice_id to ['receiverList']['receiver'][0]['invoiceId']" do
67
+ json["receiverList"]["receiver"][0]["invoiceId"].should == "42"
68
+ end
69
+
70
+ it "allows setting the first receiver email with #receiver_email" do
71
+ request.receiver_email = "another@receiver.com"
72
+ json["receiverList"]["receiver"][0]["email"].should == "another@receiver.com"
73
+ end
74
+
75
+ it "allows setting the first receiver amount with #receiver_amount" do
76
+ request.receiver_amount = 30
77
+ json["receiverList"]["receiver"][0]["amount"].should == "30.00"
78
+ end
79
+
80
+ it "allows setting the first receiver phone number with #receiver_phone_number" do
81
+ request.receiver_phone_number = "0431301201"
82
+ json["receiverList"]["receiver"][0]["phone"]["phoneNumber"].should == "0431301201"
83
+ end
84
+
85
+ it "allows setting the first receiver phone country code with #receiver_phone_country_code" do
86
+ request.receiver_phone_country_code = "61"
87
+ json["receiverList"]["receiver"][0]["phone"]["countryCode"].should == "61"
88
+ end
89
+
90
+ it "allows setting the first receiver phone extension with #receiver_phone_extension" do
91
+ request.receiver_phone_extension = "033"
92
+ json["receiverList"]["receiver"][0]["phone"]["extension"].should == "033"
93
+ end
94
+
95
+ it "maps #action_type to ['actionType']" do
96
+ json["actionType"].should == "PAY"
97
+ end
98
+
99
+ it "maps #preapproval_key to ['preapprovalKey']" do
100
+ json["preapprovalKey"].should == "ABCD-1234"
101
+ end
102
+
103
+ it "maps #pin to ['pin']" do
104
+ json["pin"].should == "1234"
105
+ end
106
+
107
+ it "maps #currency_code to ['currencyCode']" do
108
+ json["currencyCode"].should == "USD"
109
+ end
110
+
111
+ it "maps #cancel_url to ['cancelUrl']" do
112
+ json["cancelUrl"].should == "http://site.com/cancelled"
113
+ end
114
+
115
+ it "maps #return_url to ['returnUrl']" do
116
+ json["returnUrl"].should == "http://site.com/success"
117
+ end
118
+
119
+ it "maps #ipn_notification_url to ['ipnNotificationUrl']" do
120
+ json["ipnNotificationUrl"].should == "http://site.com/ipn"
121
+ end
122
+
123
+ it "maps #sender_email to ['sender']['email']" do
124
+ json["sender"]["email"].should == "sender@site.com"
125
+ end
126
+
127
+ it "maps #sender_phone_country_code to ['sender']['phone']['countryCode']" do
128
+ json["sender"]["phone"]["countryCode"].should == "61"
129
+ end
130
+
131
+ it "maps #sender_phone_number to ['sender']['phone']['phoneNumber']" do
132
+ json["sender"]["phone"]["phoneNumber"].should == "0431300200"
133
+ end
134
+
135
+ it "maps #sender_phone_extension to ['sender']['phone']['extension']" do
136
+ json["sender"]["phone"]["extension"].should == "033"
137
+ end
138
+
139
+ it "maps #reverse_parallel_payments_on_error to ['reverseAllParallelPaymentsOnError']" do
140
+ json["reverseAllParallelPaymentsOnError"].should == false
141
+ end
142
+
143
+ it "maps #tracking_id to ['trackingId']" do
144
+ json["trackingId"].should == "anything.id"
145
+ end
146
+
147
+ it "maps #memo to 'memo'" do
148
+ json["memo"].should == "a personal note"
149
+ end
150
+ end
@@ -0,0 +1,197 @@
1
+ require "spec_helper"
2
+
3
+ describe AdaptivePayments::PayResponse do
4
+ it_behaves_like "a ResponseEnvelope"
5
+ it_behaves_like "a FaultMessage"
6
+
7
+ let(:response) do
8
+ AdaptivePayments::PayResponse.from_json(
9
+ {
10
+ :payKey => "ABCD-1234",
11
+ :paymentExecStatus => "COMPLETED",
12
+ :defaultFundingPlan => {
13
+ :fundingPlanId => "XXX123",
14
+ :fundingAmount => {
15
+ :amount => "100.00",
16
+ :code => "USD"
17
+ },
18
+ :senderFees => {
19
+ :amount => "6.00",
20
+ :code => "USD"
21
+ },
22
+ :backupFundingSource => {
23
+ :fundingSourceId => "9876",
24
+ :lastFourOfAccountNumber => "0000",
25
+ :displayName => "Primary Account",
26
+ :type => "CREDITCARD",
27
+ :allowed => true
28
+ },
29
+ :currencyConversion => {
30
+ :from => {
31
+ :amount => "83.33",
32
+ :code => "GBP"
33
+ },
34
+ :to => {
35
+ :amount => "100.00",
36
+ :code => "USD"
37
+ },
38
+ :exchangeRate => "0.8333"
39
+ },
40
+ :charge => [
41
+ :charge => {
42
+ :amount => "5.00",
43
+ :code => "USD"
44
+ },
45
+ :fundingSource => {
46
+ :fundingSourceId => "1234"
47
+ }
48
+ ]
49
+ },
50
+ :payErrorList => {
51
+ :payError => [
52
+ {
53
+ :receiver => {
54
+ :email => "bob@site.com",
55
+ :amount => "5.00"
56
+ },
57
+ :error => {
58
+ :domain => "APPLICATION",
59
+ :message => "there was an error"
60
+ }
61
+ },
62
+ {
63
+ :receiver => {
64
+ :email => "sally@site.com",
65
+ :amount => "10.00"
66
+ },
67
+ :error => {
68
+ :domain => "APPLICATION",
69
+ :message => "there was another error"
70
+ }
71
+ }
72
+ ]
73
+ }
74
+ }.to_json
75
+ )
76
+ end
77
+
78
+ it "maps ['payKey'] to #pay_key" do
79
+ response.pay_key.should == "ABCD-1234"
80
+ end
81
+
82
+ it "maps ['paymentExecStatus'] to #payment_exec_status" do
83
+ response.payment_exec_status.should == "COMPLETED"
84
+ end
85
+
86
+ it "maps ['defaultFundingPlan']['fundingPlanId'] to #funding_plan_id" do
87
+ response.funding_plan_id.should == "XXX123"
88
+ end
89
+
90
+ it "maps ['defaultFundingPlan']['fundingAmount']['amount'] to #funding_amount" do
91
+ response.funding_amount.should == BigDecimal("100.00")
92
+ end
93
+
94
+ it "maps ['defaultFundingPlan']['fundingAmount']['code'] to #funding_currency_code" do
95
+ response.funding_currency_code.should == "USD"
96
+ end
97
+
98
+ it "maps ['defaultFundingPlan']['senderFees']['amount'] to #sender_fees_amount" do
99
+ response.sender_fees_amount.should == BigDecimal("6.00")
100
+ end
101
+
102
+ it "maps ['defaultFundingPlan']['senderFees']['code'] to #sender_fees_currency_code" do
103
+ response.sender_fees_currency_code.should == "USD"
104
+ end
105
+
106
+ it "maps ['defaultFundingPlan']['backupFundingSource']['fundingSourceId'] to #backup_funding_source.id" do
107
+ response.backup_funding_source.id.should == "9876"
108
+ end
109
+
110
+ it "maps ['defaultFundingPlan']['backupFundingSource']['lastFourOfAccountNumber'] to #backup_funding_source.last_four_digits_of_account" do
111
+ response.backup_funding_source.last_four_digits_of_account.should == "0000"
112
+ end
113
+
114
+ it "maps ['defaultFundingPlan']['backupFundingSource']['displayName'] to #backup_funding_source.display_name" do
115
+ response.backup_funding_source.display_name.should == "Primary Account"
116
+ end
117
+
118
+ it "maps ['defaultFundingPlan']['backupFundingSource']['type'] to #backup_funding_source.type" do
119
+ response.backup_funding_source.type.should == "CREDITCARD"
120
+ end
121
+
122
+ it "maps ['defaultFundingPlan']['backupFundingSource']['allowed'] to #backup_funding_source.allowed? " do
123
+ response.backup_funding_source.should be_allowed
124
+ end
125
+
126
+ it "maps ['defaultFundingPlan']['currencyConversion']['from']['amount'] to #from_currency_amount" do
127
+ response.from_currency_amount.should == BigDecimal("83.33")
128
+ end
129
+
130
+ it "maps ['defaultFundingPlan']['currencyConversion']['from']['code'] to #from_currency_code" do
131
+ response.from_currency_code.should == "GBP"
132
+ end
133
+
134
+ it "maps ['defaultFundingPlan']['currencyConversion']['to']['amount'] to #to_currency_amount" do
135
+ response.to_currency_amount.should == BigDecimal("100.00")
136
+ end
137
+
138
+ it "maps ['defaultFundingPlan']['currencyConversion']['to']['code'] to #to_currency_code" do
139
+ response.to_currency_code.should == "USD"
140
+ end
141
+
142
+ it "maps ['defaultFundingPlan']['currencyConversion']['exchangeRate'] to #exchange_rate" do
143
+ response.exchange_rate.should == BigDecimal("0.8333")
144
+ end
145
+
146
+ it "maps ['defaultFundingPlan']['charge'][0]['charge']['amount'] to #charges.first.amount" do
147
+ response.charges.first.amount.should == BigDecimal("5.00")
148
+ end
149
+
150
+ it "maps ['defaultFundingPlan']['charge'][0]['charge']['code'] to #charges.first.currency_code" do
151
+ response.charges.first.currency_code.should == "USD"
152
+ end
153
+
154
+ it "maps ['defaultFundingPlan']['charge'][0]['fundingSource']['fundingSourceId'] to #charges.first.funding_source.id" do
155
+ response.charges.first.funding_source.id.should == "1234"
156
+ end
157
+
158
+ it "maps ['payErrorList']['payError'][0]['receiver']['email'] to #pay_errors.first.receiver.email" do
159
+ response.pay_errors.first.receiver.email.should == "bob@site.com"
160
+ end
161
+
162
+ it "allows access to ['payErrorList']['payError'][0]['receiver']['email'] with #pay_errors.first.receiver_email" do
163
+ response.pay_errors.first.receiver_email.should == "bob@site.com"
164
+ end
165
+
166
+ it "maps ['payErrorList']['payError'][0]['receiver']['amount'] to #pay_errors.first.receiver.amount" do
167
+ response.pay_errors.first.receiver.amount.should == BigDecimal("5.00")
168
+ end
169
+
170
+ it "allows access to ['payErrorList']['payError'][0]['receiver']['amount'] with #pay_errors.first.receiver_amount" do
171
+ response.pay_errors.first.receiver_amount.should == BigDecimal("5.00")
172
+ end
173
+
174
+ it "maps ['payErrorList']['payError'][0]['error']['domain'] to #pay_errors.first.error.domain" do
175
+ response.pay_errors.first.error.domain.should == "APPLICATION"
176
+ end
177
+
178
+ it "allows access to ['payErrorList']['payError'][0]['error']['domain'] with #pay_errors.first.error_domain" do
179
+ response.pay_errors.first.error_domain.should == "APPLICATION"
180
+ end
181
+
182
+ it "maps ['payErrorList']['payError'][0]['error']['message'] to #pay_errors.first.error.message" do
183
+ response.pay_errors.first.error.message.should == "there was an error"
184
+ end
185
+
186
+ it "allows access to ['payErrorList']['payError'][0]['error']['message'] with #pay_errors.first.error_message" do
187
+ response.pay_errors.first.error_message.should == "there was an error"
188
+ end
189
+
190
+ it "maps ['payErrorList']['payError'][1]['receiver']['email'] to #pay_errors.last.receiver.email" do
191
+ response.pay_errors.last.receiver.email.should == "sally@site.com"
192
+ end
193
+
194
+ it "maps ['payErrorList']['payError'][0]['error']['message'] to #pay_errors.last.error.message" do
195
+ response.pay_errors.last.error.message.should == "there was another error"
196
+ end
197
+ end