mollie-api-ruby 1.4.2 → 2.0.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +12 -0
- data/CHANGELOG.md +6 -0
- data/README.mdown +5 -5
- data/Rakefile +6 -0
- data/examples/1-new-payment.rb +4 -5
- data/examples/2-webhook-verification.rb +2 -2
- data/examples/4-ideal-payment.rb +3 -3
- data/examples/5-payments-history.rb +3 -3
- data/examples/6-list-activated-methods.rb +3 -3
- data/examples/7-refund-payment.rb +5 -5
- data/lib/{Mollie/API → mollie/api}/cacert.pem +0 -0
- data/lib/mollie/api/client.rb +120 -0
- data/lib/{Mollie/API/Client/Version.rb → mollie/api/client/version.rb} +1 -1
- data/lib/{Mollie/API/Exception.rb → mollie/api/exception.rb} +0 -0
- data/lib/mollie/api/object/base.rb +18 -0
- data/lib/mollie/api/object/customer.rb +28 -0
- data/lib/{Mollie/API/Object/Issuer.rb → mollie/api/object/issuer.rb} +1 -3
- data/lib/mollie/api/object/list.rb +44 -0
- data/lib/mollie/api/object/mandate.rb +35 -0
- data/lib/{Mollie/API/Object/Method.rb → mollie/api/object/method.rb} +12 -4
- data/lib/mollie/api/object/payment.rb +123 -0
- data/lib/mollie/api/object/payment/refund.rb +43 -0
- data/lib/mollie/api/object/subscription.rb +67 -0
- data/lib/{Mollie/API/Resource/Base.rb → mollie/api/resource/base.rb} +8 -8
- data/lib/{Mollie/API/Resource/Customers.rb → mollie/api/resource/customers.rb} +2 -2
- data/lib/{Mollie/API/Resource/Customers/Mandates.rb → mollie/api/resource/customers/mandates.rb} +5 -5
- data/lib/{Mollie/API/Resource/Customers/Payments.rb → mollie/api/resource/customers/payments.rb} +5 -5
- data/lib/mollie/api/resource/customers/subscriptions.rb +27 -0
- data/lib/{Mollie/API/Resource/Issuers.rb → mollie/api/resource/issuers.rb} +2 -2
- data/lib/{Mollie/API/Resource/Methods.rb → mollie/api/resource/methods.rb} +2 -2
- data/lib/{Mollie/API/Resource/Payments.rb → mollie/api/resource/payments.rb} +2 -2
- data/lib/{Mollie/API/Resource/Payments/Refunds.rb → mollie/api/resource/payments/refunds.rb} +5 -5
- data/lib/mollie/api/util.rb +37 -0
- data/mollie.gemspec +16 -14
- data/test/helper.rb +4 -0
- data/test/mollie/api/client_test.rb +99 -0
- data/test/mollie/api/object/base_test.rb +21 -0
- data/test/mollie/api/object/customer_test.rb +35 -0
- data/test/mollie/api/object/issuer_test.rb +23 -0
- data/test/mollie/api/object/list_test.rb +44 -0
- data/test/mollie/api/object/mandate_test.rb +45 -0
- data/test/mollie/api/object/method_test.rb +33 -0
- data/test/mollie/api/object/payment/refund_test.rb +46 -0
- data/test/mollie/api/object/payment_test.rb +91 -0
- data/test/mollie/api/object/subscription_test.rb +68 -0
- data/test/mollie/api/resource/base_test.rb +83 -0
- data/test/mollie/api/resource/customers/mandates_test.rb +23 -0
- data/test/mollie/api/resource/customers/payments_test.rb +23 -0
- data/test/mollie/api/resource/customers/subscriptions_test.rb +23 -0
- data/test/mollie/api/resource/customers_test.rb +13 -0
- data/test/mollie/api/resource/issuers_test.rb +13 -0
- data/test/mollie/api/resource/methods_test.rb +13 -0
- data/test/mollie/api/resource/payments/refunds_test.rb +23 -0
- data/test/mollie/api/resource/payments_test.rb +13 -0
- data/test/run-test.rb +15 -0
- metadata +99 -52
- data/lib/Mollie/API/Client.rb +0 -130
- data/lib/Mollie/API/Object/Base.rb +0 -18
- data/lib/Mollie/API/Object/Customer.rb +0 -16
- data/lib/Mollie/API/Object/List.rb +0 -35
- data/lib/Mollie/API/Object/Mandate.rb +0 -22
- data/lib/Mollie/API/Object/Payment.rb +0 -68
- data/lib/Mollie/API/Object/Payment/Refund.rb +0 -15
- data/lib/Mollie/API/Object/Subscription.rb +0 -26
- data/lib/Mollie/API/Resource/Customers/Subscriptions.rb +0 -27
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Object
|
6
|
+
class MethodTest < Test::Unit::TestCase
|
7
|
+
def test_setting_attributes
|
8
|
+
attributes = {
|
9
|
+
id: "creditcard",
|
10
|
+
description: "Credit card",
|
11
|
+
amount: {
|
12
|
+
'minimum' => "0.31",
|
13
|
+
'maximum' => "10000.00"
|
14
|
+
},
|
15
|
+
image: {
|
16
|
+
'normal' => "https://www.mollie.com/images/payscreen/methods/creditcard.png",
|
17
|
+
'bigger' => "https://www.mollie.com/images/payscreen/methods/creditcard@2x.png"
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
method = Method.new(attributes)
|
22
|
+
|
23
|
+
assert_equal "creditcard", method.id
|
24
|
+
assert_equal "Credit card", method.description
|
25
|
+
assert_equal BigDecimal.new("0.31"), method.minimum_amount
|
26
|
+
assert_equal BigDecimal.new("10000.0"), method.maximum_amount
|
27
|
+
assert_equal "https://www.mollie.com/images/payscreen/methods/creditcard.png", method.normal_image
|
28
|
+
assert_equal "https://www.mollie.com/images/payscreen/methods/creditcard@2x.png", method.bigger_image
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Object
|
6
|
+
class Payment
|
7
|
+
class RefundTest < Test::Unit::TestCase
|
8
|
+
def test_setting_attributes
|
9
|
+
attributes = {
|
10
|
+
id: "re_4qqhO89gsT",
|
11
|
+
payment: {
|
12
|
+
id: "tr_WDqYK6vllg",
|
13
|
+
},
|
14
|
+
amount: "5.95",
|
15
|
+
refunded_datetime: "2016-10-08T07:59:53.0Z",
|
16
|
+
status: "pending"
|
17
|
+
}
|
18
|
+
|
19
|
+
refund = Refund.new(attributes)
|
20
|
+
|
21
|
+
assert_equal "re_4qqhO89gsT", refund.id
|
22
|
+
assert_equal BigDecimal.new("5.95"), refund.amount
|
23
|
+
assert_kind_of Payment, refund.payment
|
24
|
+
assert_equal Time.parse("2016-10-08T07:59:53.0Z"), refund.refunded_datetime
|
25
|
+
assert_equal Refund::STATUS_PENDING, refund.status
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_pending?
|
29
|
+
assert Refund.new(status: Refund::STATUS_PENDING).pending?
|
30
|
+
assert !Refund.new(status: 'not-pending').pending?
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_processing?
|
34
|
+
assert Refund.new(status: Refund::STATUS_PROCESSING).processing?
|
35
|
+
assert !Refund.new(status: 'not-processing').processing?
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_refunded?
|
39
|
+
assert Refund.new(status: Refund::STATUS_REFUNDED).refunded?
|
40
|
+
assert !Refund.new(status: 'not-refunded').refunded?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Object
|
6
|
+
class PaymentTest < Test::Unit::TestCase
|
7
|
+
def test_setting_attributes
|
8
|
+
attributes = {
|
9
|
+
id: 'tr_WDqYK6vllg',
|
10
|
+
mode: 'test',
|
11
|
+
created_datetime: '2016-10-08T10:10:52.0Z',
|
12
|
+
status: 'paid',
|
13
|
+
paid_datetime: '2016-10-08T10:15:35.0Z',
|
14
|
+
amount: 35.07,
|
15
|
+
description: 'Order 33',
|
16
|
+
method: 'ideal',
|
17
|
+
metadata: {
|
18
|
+
order_id: '33'
|
19
|
+
},
|
20
|
+
details: {
|
21
|
+
consumer_name: "Hr E G H K\u00fcppers en\/of MW M.J. K\u00fcppers-Veeneman",
|
22
|
+
consumer_account: 'NL53INGB0618365937',
|
23
|
+
consumer_bic: 'INGBNL2A'
|
24
|
+
},
|
25
|
+
locale: 'nl',
|
26
|
+
profile_id: 'pfl_QkEhN94Ba',
|
27
|
+
links: {
|
28
|
+
'webhook_url' => 'https://webshop.example.org/payments/webhook',
|
29
|
+
'redirect_url' => 'https://webshop.example.org/order/33/',
|
30
|
+
'payment_url' => 'https://webshop.example.org/payment/tr_WDqYK6vllg',
|
31
|
+
'settlement' => 'https://webshop.example.org/payment/tr_WDqYK6vllg/settlement',
|
32
|
+
'refunds' => 'https://webshop.example.org/payment/tr_WDqYK6vllg/refunds',
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
payment = Payment.new(attributes)
|
37
|
+
|
38
|
+
assert_equal 'tr_WDqYK6vllg', payment.id
|
39
|
+
assert_equal 'test', payment.mode
|
40
|
+
assert_equal Time.parse('2016-10-08T10:10:52.0Z'), payment.created_datetime
|
41
|
+
assert_equal 'paid', payment.status
|
42
|
+
assert_equal Time.parse('2016-10-08T10:15:35.0Z'), payment.paid_datetime
|
43
|
+
assert_equal 35.07, payment.amount
|
44
|
+
assert_equal 'Order 33', payment.description
|
45
|
+
assert_equal 'ideal', payment.method
|
46
|
+
assert_equal '33', payment.metadata.order_id
|
47
|
+
assert_equal "Hr E G H K\u00fcppers en\/of MW M.J. K\u00fcppers-Veeneman", payment.details.consumer_name
|
48
|
+
assert_equal 'NL53INGB0618365937', payment.details.consumer_account
|
49
|
+
assert_equal 'INGBNL2A', payment.details.consumer_bic
|
50
|
+
assert_equal 'nl', payment.locale
|
51
|
+
assert_equal 'pfl_QkEhN94Ba', payment.profile_id
|
52
|
+
assert_equal 'https://webshop.example.org/payments/webhook', payment.webhook_url
|
53
|
+
assert_equal 'https://webshop.example.org/order/33/', payment.redirect_url
|
54
|
+
assert_equal 'https://webshop.example.org/payment/tr_WDqYK6vllg', payment.payment_url
|
55
|
+
assert_equal 'https://webshop.example.org/payment/tr_WDqYK6vllg/settlement', payment.settlement
|
56
|
+
assert_equal 'https://webshop.example.org/payment/tr_WDqYK6vllg/refunds', payment.refunds
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_status_open
|
60
|
+
assert Payment.new(status: Payment::STATUS_OPEN).open?
|
61
|
+
assert !Payment.new(status: 'not-open').open?
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_status_cancelled
|
65
|
+
assert Payment.new(status: Payment::STATUS_CANCELLED).cancelled?
|
66
|
+
assert !Payment.new(status: 'not-cancelled').cancelled?
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_status_expired
|
70
|
+
assert Payment.new(status: Payment::STATUS_EXPIRED).expired?
|
71
|
+
assert !Payment.new(status: 'not-expired').expired?
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_status_paidout
|
75
|
+
assert Payment.new(status: Payment::STATUS_PAIDOUT).paidout?
|
76
|
+
assert !Payment.new(status: 'not-paidout').paidout?
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_status_refunded
|
80
|
+
assert Payment.new(status: Payment::STATUS_REFUNDED).refunded?
|
81
|
+
assert !Payment.new(status: 'not-refunded').refunded?
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_status_paid
|
85
|
+
assert Payment.new(paid_datetime: Time.now).paid?
|
86
|
+
assert !Payment.new(paid_datetime: nil).paid?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Object
|
6
|
+
class SubscriptionTest < Test::Unit::TestCase
|
7
|
+
def test_setting_attributes
|
8
|
+
attributes = {
|
9
|
+
id: "sub_rVKGtNd6s3",
|
10
|
+
customer_id: "cst_stTC2WHAuS",
|
11
|
+
mode: "live",
|
12
|
+
created_datetime: "2016-06-01T12:23:34.0Z",
|
13
|
+
status: "active",
|
14
|
+
amount: "25.00",
|
15
|
+
times: 4,
|
16
|
+
interval: "3 months",
|
17
|
+
description: "Quarterly payment",
|
18
|
+
method: "creditcard",
|
19
|
+
cancelled_datetime: "2016-06-01T12:23:34.0Z",
|
20
|
+
links: {
|
21
|
+
'webhook_url' => "https://example.org/payments/webhook"
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
subscription = Subscription.new(attributes)
|
26
|
+
|
27
|
+
assert_equal "sub_rVKGtNd6s3", subscription.id
|
28
|
+
assert_equal "cst_stTC2WHAuS", subscription.customer_id
|
29
|
+
assert_equal "live", subscription.mode
|
30
|
+
assert_equal Time.parse("2016-06-01T12:23:34.0Z"), subscription.created_datetime
|
31
|
+
assert_equal "active", subscription.status
|
32
|
+
assert_equal BigDecimal.new(25, 2), subscription.amount
|
33
|
+
assert_equal 4, subscription.times
|
34
|
+
assert_equal "3 months", subscription.interval
|
35
|
+
assert_equal "Quarterly payment", subscription.description
|
36
|
+
assert_equal "creditcard", subscription.method
|
37
|
+
assert_equal Time.parse("2016-06-01T12:23:34.0Z"), subscription.cancelled_datetime
|
38
|
+
assert_equal "https://example.org/payments/webhook", subscription.webhook_url
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_status_active
|
42
|
+
assert Subscription.new(status: Subscription::STATUS_ACTIVE).active?
|
43
|
+
assert !Subscription.new(status: 'not-active').active?
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_status_pending
|
47
|
+
assert Subscription.new(status: Subscription::STATUS_PENDING).pending?
|
48
|
+
assert !Subscription.new(status: 'not-pending').pending?
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_status_suspended
|
52
|
+
assert Subscription.new(status: Subscription::STATUS_SUSPENDED).suspended?
|
53
|
+
assert !Subscription.new(status: 'not-suspended').suspended?
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_status_cancelled
|
57
|
+
assert Subscription.new(status: Subscription::STATUS_CANCELLED).cancelled?
|
58
|
+
assert !Subscription.new(status: 'not-cancelled').cancelled?
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_status_completed
|
62
|
+
assert Subscription.new(status: Subscription::STATUS_COMPLETED).completed?
|
63
|
+
assert !Subscription.new(status: 'not-completed').completed?
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Resource
|
6
|
+
class TestObject < Object::Base
|
7
|
+
attr_accessor :id, :amount
|
8
|
+
end
|
9
|
+
|
10
|
+
class TestResource < Base
|
11
|
+
def resource_object
|
12
|
+
TestObject
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class BaseTest < Test::Unit::TestCase
|
17
|
+
def test_resource_name
|
18
|
+
test_resource = TestResource.new(nil)
|
19
|
+
assert_equal "testresource", test_resource.resource_name
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_get
|
23
|
+
stub_request(:get, "https://api.mollie.nl/v1/testresource/my-id")
|
24
|
+
.to_return(:status => 200, :body => %{{"id":"my-id"}}, :headers => {})
|
25
|
+
|
26
|
+
client = Client.new("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM")
|
27
|
+
test_resource = TestResource.new(client)
|
28
|
+
resource = test_resource.get("my-id")
|
29
|
+
|
30
|
+
assert_equal "my-id", resource.id
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_create
|
34
|
+
stub_request(:post, "https://api.mollie.nl/v1/testresource")
|
35
|
+
.with(body: %{{"amount":1.95}})
|
36
|
+
.to_return(:status => 201, :body => %{{"id":"my-id", "amount":1.00}}, :headers => {})
|
37
|
+
|
38
|
+
client = Client.new("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM")
|
39
|
+
test_resource = TestResource.new(client)
|
40
|
+
resource = test_resource.create(amount: 1.95)
|
41
|
+
|
42
|
+
assert_equal "my-id", resource.id
|
43
|
+
assert_equal BigDecimal.new("1.00"), resource.amount
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_update
|
47
|
+
stub_request(:post, "https://api.mollie.nl/v1/testresource/my-id")
|
48
|
+
.with(body: %{{"amount":1.95}})
|
49
|
+
.to_return(:status => 201, :body => %{{"id":"my-id", "amount":1.00}}, :headers => {})
|
50
|
+
|
51
|
+
client = Client.new("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM")
|
52
|
+
test_resource = TestResource.new(client)
|
53
|
+
resource = test_resource.update("my-id", amount: 1.95)
|
54
|
+
|
55
|
+
assert_equal "my-id", resource.id
|
56
|
+
assert_equal BigDecimal.new("1.00"), resource.amount
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_delete
|
60
|
+
stub_request(:delete, "https://api.mollie.nl/v1/testresource/my-id")
|
61
|
+
.to_return(:status => 204, :headers => {})
|
62
|
+
|
63
|
+
client = Client.new("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM")
|
64
|
+
test_resource = TestResource.new(client)
|
65
|
+
resource = test_resource.delete("my-id")
|
66
|
+
|
67
|
+
assert_equal nil, resource
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_all
|
71
|
+
stub_request(:get, "https://api.mollie.nl/v1/testresource")
|
72
|
+
.to_return(:status => 200, :body => %{{"data":[{"id":"my-id"}]}}, :headers => {})
|
73
|
+
|
74
|
+
client = Client.new("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM")
|
75
|
+
test_resource = TestResource.new(client)
|
76
|
+
resource = test_resource.all
|
77
|
+
|
78
|
+
assert_equal "my-id", resource.first.id
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Resource
|
6
|
+
class Customers
|
7
|
+
class MandatesTest < Test::Unit::TestCase
|
8
|
+
def test_resource_object
|
9
|
+
assert_equal Object::Mandate, Mandates.new(nil).resource_object
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_resource_name_and_with
|
13
|
+
mandates = Mandates.new(nil).with("customer-id")
|
14
|
+
assert_equal "customers/customer-id/mandates", mandates.resource_name
|
15
|
+
|
16
|
+
mandates = Mandates.new(nil).with(Object::Customer.new(id: "customer-id"))
|
17
|
+
assert_equal "customers/customer-id/mandates", mandates.resource_name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Resource
|
6
|
+
class Customers
|
7
|
+
class PaymentsTest < Test::Unit::TestCase
|
8
|
+
def test_resource_object
|
9
|
+
assert_equal Object::Payment, Payments.new(nil).resource_object
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_resource_name_and_with
|
13
|
+
payments = Payments.new(nil).with("customer-id")
|
14
|
+
assert_equal "customers/customer-id/payments", payments.resource_name
|
15
|
+
|
16
|
+
payments = Payments.new(nil).with(Object::Customer.new(id: "customer-id"))
|
17
|
+
assert_equal "customers/customer-id/payments", payments.resource_name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Mollie
|
4
|
+
module API
|
5
|
+
module Resource
|
6
|
+
class Customers
|
7
|
+
class SubscriptionsTest < Test::Unit::TestCase
|
8
|
+
def test_resource_object
|
9
|
+
assert_equal Object::Subscription, Subscriptions.new(nil).resource_object
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_resource_name_and_with
|
13
|
+
subscriptions = Subscriptions.new(nil).with("customer-id")
|
14
|
+
assert_equal "customers/customer-id/subscriptions", subscriptions.resource_name
|
15
|
+
|
16
|
+
subscriptions = Subscriptions.new(nil).with(Object::Customer.new(id: "customer-id"))
|
17
|
+
assert_equal "customers/customer-id/subscriptions", subscriptions.resource_name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|