trolley 1.0.2 → 1.1.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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trolley/Client.rb +6 -1
  3. data/lib/trolley/Gateway.rb +7 -1
  4. data/lib/trolley/InvoicePayment.rb +6 -1
  5. data/lib/trolley/OfflinePayment.rb +2 -1
  6. data/lib/trolley/Payment.rb +4 -1
  7. data/lib/trolley/Recipient.rb +0 -2
  8. data/lib/trolley/RecipientAccount.rb +4 -1
  9. data/lib/trolley/RecipientLog.rb +12 -0
  10. data/lib/trolley/gateways/BalanceGateway.rb +18 -1
  11. data/lib/trolley/gateways/PaymentGateway.rb +5 -0
  12. data/lib/trolley/gateways/RecipientGateway.rb +5 -1
  13. data/lib/trolley/gateways/VerificationGateway.rb +40 -0
  14. data/lib/trolley/utils/PaginatedArray.rb +8 -3
  15. data/lib/trolley/utils/ResponseMapper.rb +2 -1
  16. data/lib/trolley.rb +3 -1
  17. data/test/fixtures/BalanceTest/test_find.yml +71 -0
  18. data/test/fixtures/BalanceTest/test_find_with_term.yml +71 -0
  19. data/test/fixtures/BatchTest/test_create.yml +150 -0
  20. data/test/fixtures/BatchTest/test_create_with_payments.yml +541 -0
  21. data/test/fixtures/BatchTest/test_delete_multiple.yml +209 -0
  22. data/test/fixtures/BatchTest/test_payments.yml +434 -0
  23. data/test/fixtures/BatchTest/test_processing.yml +578 -0
  24. data/test/fixtures/BatchTest/test_summary.yml +440 -0
  25. data/test/fixtures/BatchTest/test_update.yml +356 -0
  26. data/test/fixtures/InvoicePaymentTest/test_create.yml +489 -0
  27. data/test/fixtures/InvoicePaymentTest/test_delete.yml +634 -0
  28. data/test/fixtures/InvoicePaymentTest/test_find.yml +420 -0
  29. data/test/fixtures/InvoicePaymentTest/test_update.yml +634 -0
  30. data/test/fixtures/InvoiceTest/test_create.yml +293 -0
  31. data/test/fixtures/InvoiceTest/test_create_line.yml +353 -0
  32. data/test/fixtures/InvoiceTest/test_delete.yml +433 -0
  33. data/test/fixtures/InvoiceTest/test_delete_line.yml +353 -0
  34. data/test/fixtures/InvoiceTest/test_find.yml +284 -0
  35. data/test/fixtures/InvoiceTest/test_search.yml +293 -0
  36. data/test/fixtures/InvoiceTest/test_support_error_arrays.yml +71 -0
  37. data/test/fixtures/InvoiceTest/test_update.yml +428 -0
  38. data/test/fixtures/InvoiceTest/test_update_line.yml +422 -0
  39. data/test/fixtures/OfflinePaymentTest/test_create.yml +213 -0
  40. data/test/fixtures/OfflinePaymentTest/test_delete.yml +281 -0
  41. data/test/fixtures/OfflinePaymentTest/test_search.yml +281 -0
  42. data/test/fixtures/OfflinePaymentTest/test_update.yml +281 -0
  43. data/test/fixtures/PaymentTest/test_crud.yml +510 -0
  44. data/test/fixtures/PaymentTest/test_search.yml +366 -0
  45. data/test/fixtures/RecipientAccountTest/test_basic_crud.yml +351 -0
  46. data/test/fixtures/RecipientTest/test_account.yml +499 -0
  47. data/test/fixtures/RecipientTest/test_create.yml +72 -0
  48. data/test/fixtures/RecipientTest/test_delete_multiple.yml +347 -0
  49. data/test/fixtures/RecipientTest/test_find_logs.yml +278 -0
  50. data/test/fixtures/RecipientTest/test_find_payments.yml +512 -0
  51. data/test/fixtures/RecipientTest/test_lifecycle.yml +347 -0
  52. data/test/integration/BalanceTest.rb +22 -0
  53. data/test/integration/BatchTest.rb +157 -0
  54. data/test/integration/InvoicePaymentTest.rb +109 -0
  55. data/test/integration/InvoiceTest.rb +156 -0
  56. data/test/integration/OfflinePaymentTest.rb +109 -0
  57. data/test/integration/PaymentTest.rb +73 -0
  58. data/test/integration/RecipientAccountTest.rb +52 -0
  59. data/test/integration/RecipientTest.rb +176 -0
  60. data/test/test_helper.rb +45 -0
  61. data/test/unit/ClientRequestTest.rb +54 -0
  62. data/{spec → test}/unit/ConfigurationTest.rb +1 -1
  63. data/test/unit/GatewayParityTest.rb +184 -0
  64. data/{spec → test}/unit/PaginatedArrayTest.rb +3 -1
  65. data/{spec → test}/unit/TrolleyTest.rb +2 -2
  66. data/trolley.gemspec +11 -8
  67. metadata +101 -18
  68. data/spec/integration/BatchTest.rb +0 -126
  69. data/spec/integration/InvoicePaymentTest.rb +0 -92
  70. data/spec/integration/InvoiceTest.rb +0 -128
  71. data/spec/integration/RecipientAccountTest.rb +0 -48
  72. data/spec/integration/RecipientTest.rb +0 -159
  73. data/spec/integration/helper.rb +0 -19
  74. /data/{spec → test}/unit/ResponseMapperTest.rb +0 -0
@@ -1,128 +0,0 @@
1
- require_relative 'helper'
2
-
3
- # rubocop:disable Metrics/ClassLength
4
- class InvoiceTest < Test::Unit::TestCase
5
- include ApiClientHelper
6
-
7
- def create_recipient
8
- uuid = SecureRandom.uuid.to_s
9
- recipient = @client.recipient.create(
10
- type: 'individual',
11
- firstName: 'Tom',
12
- lastName: 'Jones',
13
- email: "test.batch#{uuid}@example.com",
14
- address: {
15
- street1: '123 Wolfstrasse',
16
- city: 'Berlin',
17
- country: 'DE',
18
- postalCode: '123123'
19
- }
20
- )
21
- @client.recipient_account.create(recipient.id, type: 'bank-transfer', currency: 'EUR', country: 'DE', iban: 'DE89 3704 0044 0532 0130 00')
22
- recipient
23
- end
24
-
25
- def test_create
26
- recipient = create_recipient
27
- invoice = @client.invoice.create(recipientId: recipient.id, description: 'Integration Test Invoice Create')
28
- assert_not_nil(invoice)
29
- assert_not_nil(invoice.id)
30
-
31
- invoice = @client.invoice.search({})
32
- assert_true(invoice.count > 0)
33
- end
34
-
35
- def test_create_line
36
- recipient = create_recipient
37
- invoice = @client.invoice.create(recipientId: recipient.id, description: 'Integration Test Invoice Create')
38
- assert_not_nil(invoice)
39
- assert_not_nil(invoice.id)
40
- assert_equal([], invoice.lines)
41
-
42
- invoice_line = @client.invoice.create_line(invoiceId: invoice.id, lines: [{ unitAmount: { value: '2000', currency: 'USD' } }])
43
- assert_not_nil(invoice_line.lines)
44
- assert_not_nil(invoice_line.lines.first['id'])
45
-
46
- findInvoice = @client.invoice.find(invoiceId: invoice.id)
47
- assert_true(findInvoice.lines.count > 0)
48
- end
49
-
50
- def test_update
51
- recipient = create_recipient
52
- invoice = @client.invoice.create(recipientId: recipient.id, description: 'Integration Test Invoice Create')
53
- assert_not_nil(invoice)
54
- assert_not_nil(invoice.id)
55
-
56
- invoices = @client.invoice.search({})
57
- assert_true(invoices.count > 0)
58
-
59
- response = @client.invoice.update(invoiceId: invoice.id, description: 'Integration Test Invoice Update')
60
- assert_true(response)
61
- findInvoice = @client.invoice.find(invoiceId: invoice.id)
62
- assert_equal('Integration Test Invoice Update', findInvoice.description)
63
- assert_equal('open', findInvoice.status)
64
- end
65
-
66
- def test_update_line
67
- recipient = create_recipient
68
- invoice = @client.invoice.create(recipientId: recipient.id, description: 'Integration Test Invoice Create')
69
- assert_not_nil(invoice)
70
- assert_not_nil(invoice.id)
71
- assert_equal([], invoice.lines)
72
-
73
- invoice_line = @client.invoice.create_line(invoiceId: invoice.id, lines: [{ unitAmount: { value: '2000', currency: 'USD' } }])
74
- assert_not_nil(invoice_line.lines)
75
- assert_not_nil(invoice_line.lines.first['id'])
76
-
77
- response = @client.invoice.update_line(
78
- invoiceId: invoice.id,
79
- lines: [{
80
- invoiceLineId: invoice_line.lines.first['id'],
81
- unitAmount: { value: '3000', currency: 'USD' }
82
- }]
83
- )
84
- assert_true(response)
85
-
86
- findInvoice = @client.invoice.find(invoiceId: invoice.id)
87
- assert_equal('3000.00', findInvoice.lines.first['unitAmount']['value'])
88
- end
89
-
90
- def test_delete
91
- recipient = create_recipient
92
- invoice = @client.invoice.create(recipientId: recipient.id, description: 'Integration Test Invoice Create')
93
- assert_not_nil(invoice)
94
- assert_not_nil(invoice.id)
95
-
96
- invoices = @client.invoice.search({})
97
- assert_true(invoices.count > 0)
98
-
99
- response = @client.invoice.delete(invoiceIds: invoices.map(&:id))
100
- assert_true(response)
101
-
102
- final_invoices = @client.invoice.search({})
103
- assert_true(final_invoices.count == 0)
104
- end
105
-
106
- def test_delete_line
107
- recipient = create_recipient
108
- invoice = @client.invoice.create(recipientId: recipient.id, description: 'Integration Test Invoice Create')
109
- assert_not_nil(invoice)
110
- assert_not_nil(invoice.id)
111
- assert_equal([], invoice.lines)
112
-
113
- invoice_line = @client.invoice.create_line(invoiceId: invoice.id, lines: [{ unitAmount: { value: '2000', currency: 'USD' } }])
114
-
115
- response = @client.invoice.delete_line(invoiceId: invoice.id, invoiceLineIds: [invoice_line.lines.first['id']])
116
- assert_true(response)
117
- end
118
-
119
- def test_support_error_arrays
120
- @client.invoice.create(recipientId: 'invalid', description: 'Integration Test Invoice Create')
121
- rescue ::Trolley::TrolleyError => e
122
- assert_equal(1, e.validation_errors.count)
123
- assert_equal('recipientId', e.validation_errors.first['field'])
124
- assert_equal('Value is invalid', e.validation_errors.first['message'])
125
- assert_equal('invalid_field', e.validation_errors.first['code'])
126
- end
127
- end
128
- # rubocop:enable Metrics/ClassLength
@@ -1,48 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class RecipientAccountTest < Test::Unit::TestCase
4
- include ApiClientHelper
5
-
6
- # rubocop:disable Metrics/MethodLength
7
- def test_basic_crud
8
- recipient = @client.recipient.create(
9
- type: 'individual',
10
- firstName: 'Tom',
11
- lastName: 'Jones',
12
- email: "test.create#{uuid}@example.com"
13
- )
14
- recipient_account = @client.recipient_account.create(
15
- recipient.id, type: 'bank-transfer',
16
- currency: 'EUR',
17
- country: 'DE',
18
- iban: 'DE89 3704 0044 0532 0130 00'
19
- )
20
-
21
- assert_not_nil(recipient_account)
22
- assert_equal(recipient_account.type, 'bank-transfer')
23
- assert_equal(recipient_account.currency, 'EUR')
24
-
25
- recipient_account = @client.recipient_account.update(
26
- recipient.id, recipient_account.id,
27
- primary: true
28
- )
29
-
30
- assert_not_nil(recipient_account)
31
- assert_equal(recipient_account.type, 'bank-transfer')
32
- assert_equal(recipient_account.currency, 'EUR')
33
- assert_equal(recipient_account.primary, true)
34
-
35
- recipient_account = @client.recipient_account.find(
36
- recipient.id, recipient_account.id
37
- )
38
-
39
- assert_not_nil(recipient_account)
40
-
41
- response = @client.recipient_account.delete(
42
- recipient.id, recipient_account.id
43
- )
44
-
45
- assert_true(response)
46
- end
47
- # rubocop:enable Metrics/MethodLength
48
- end
@@ -1,159 +0,0 @@
1
- require_relative 'helper'
2
-
3
- # rubocop:disable Metrics/ClassLength
4
- class RecipientTest < Test::Unit::TestCase
5
- include ApiClientHelper
6
-
7
- def test_create
8
- response = @client.recipient.create(
9
- type: 'individual',
10
- firstName: 'Tom',
11
- lastName: 'Jones',
12
- email: "test.create#{uuid}@example.com"
13
- )
14
- assert_not_nil(response)
15
- assert_equal(response.firstName, 'Tom')
16
- assert_equal(response.lastName, 'Jones')
17
- assert_not_nil(response.id)
18
- end
19
-
20
- def test_lifecycle
21
- recipient = @client.recipient.create(
22
- type: 'individual',
23
- firstName: 'Tom',
24
- lastName: 'Jones',
25
- email: "test.create#{uuid}@example.com"
26
- )
27
- assert_not_nil(recipient)
28
- assert_equal(recipient.firstName, 'Tom')
29
- assert_equal(recipient.status, 'incomplete')
30
-
31
- response = @client.recipient.update(recipient.id, firstName: 'Bob')
32
- assert_true(response)
33
-
34
- recipient = @client.recipient.find(recipient.id)
35
- assert_equal(recipient.firstName, 'Bob')
36
-
37
- response = @client.recipient.delete(recipient.id)
38
- assert_true(response)
39
-
40
- recipient = @client.recipient.find(recipient.id)
41
- assert_equal(recipient.status, 'archived')
42
- end
43
-
44
- def test_account
45
- recipient = @client.recipient.create(
46
- type: 'individual',
47
- firstName: 'Tom',
48
- lastName: 'Jones',
49
- email: "test.create#{uuid}@example.com",
50
- address: {
51
- street1: '123 Wolfstrasse',
52
- city: 'Berlin',
53
- country: 'DE',
54
- postalCode: '123123'
55
- }
56
- )
57
- assert_not_nil(recipient)
58
- assert_equal(recipient.firstName, 'Tom')
59
- assert_equal(recipient.lastName, 'Jones')
60
- assert_not_nil(recipient.id)
61
- assert_true(recipient.routeMinimum.to_i >= 0)
62
-
63
- account = @client.recipient_account.create(recipient.id, type: 'bank-transfer', currency: 'EUR', country: 'DE', iban: 'DE89 3704 0044 0532 0130 00')
64
- assert_not_nil(account)
65
-
66
- account = @client.recipient_account.create(recipient.id, type: 'bank-transfer', currency: 'EUR', country: 'FR', iban: 'FR14 2004 1010 0505 0001 3M02 606')
67
- assert_not_nil(account)
68
-
69
- findAccount = @client.recipient_account.find(recipient.id, account.id)
70
- assert_equal(account.id, findAccount.id)
71
-
72
- accountList = @client.recipient_account.all(recipient.id)
73
- assert_equal(2, accountList.count)
74
- assert_equal(accountList[0].currency, 'EUR')
75
-
76
- result = @client.recipient_account.delete(recipient.id, account.id)
77
- assert_true(result)
78
-
79
- accountList = @client.recipient_account.all(recipient.id)
80
- assert_equal(1, accountList.count)
81
- end
82
-
83
- def test_delete_multiple
84
- recipient1 = @client.recipient.create(
85
- type: 'individual',
86
- firstName: 'Tom',
87
- lastName: 'Jones',
88
- email: "test.create#{uuid}@example.com"
89
- )
90
- assert_not_nil(recipient1)
91
- assert_equal(recipient1.firstName, 'Tom')
92
- assert_equal(recipient1.status, 'incomplete')
93
-
94
- recipient2 = @client.recipient.create(
95
- type: 'individual',
96
- firstName: 'Tom',
97
- lastName: 'Jones',
98
- email: "test.create#{uuid}@example.com"
99
- )
100
- assert_not_nil(recipient2)
101
- assert_equal(recipient2.firstName, 'Tom')
102
- assert_equal(recipient2.status, 'incomplete')
103
-
104
- response = @client.recipient.delete([recipient1.id, recipient2.id])
105
- assert_true(response)
106
-
107
- recipient1 = @client.recipient.find(recipient1.id)
108
- assert_equal(recipient1.status, 'archived')
109
-
110
- recipient2 = @client.recipient.find(recipient2.id)
111
- assert_equal(recipient2.status, 'archived')
112
- end
113
-
114
- def test_find_logs
115
- recipient = @client.recipient.create(
116
- type: 'individual',
117
- firstName: 'Tom',
118
- lastName: 'Jones',
119
- email: "test.create#{uuid}@example.com"
120
- )
121
- assert_not_nil(recipient)
122
- assert_equal(recipient.firstName, 'Tom')
123
- assert_equal(recipient.status, 'incomplete')
124
-
125
- @client.recipient.update(recipient.id, firstName: 'John')
126
- logs = @client.recipient.find_logs(recipient.id)
127
-
128
- assert_equal(logs.class, OpenStruct)
129
- assert_boolean(true, @client.recipient.delete(recipient.id))
130
- end
131
-
132
- def test_find_payments
133
- recipient = @client.recipient.create(
134
- type: 'individual',
135
- firstName: 'Tom',
136
- lastName: 'Jones',
137
- email: "test.create#{uuid}@example.com"
138
- )
139
- recipient_account = @client.recipient_account.create(recipient.id, type: 'bank-transfer', currency: 'EUR', country: 'DE', iban: 'DE89 3704 0044 0532 0130 00')
140
-
141
- batch = @client.batch.create(
142
- sourceCurrency: 'USD', description: 'Integration Test Payments', payments: [
143
- { targetAmount: '10.00', targetCurrency: 'EUR', recipient: { id: recipient.id } },
144
- { sourceAmount: '10.00', recipient: { id: recipient.id } }
145
- ]
146
- )
147
-
148
- payments = @client.recipient.find_payments(recipient.id)
149
- assert_equal(payments.count, 2)
150
- assert_equal(payments[0].recipient['id'], recipient.id)
151
- assert_equal(payments[1].recipient['id'], recipient.id)
152
- assert_equal(payments.map(&:amount), ['10.00', '10.00'])
153
-
154
- assert_boolean(true, @client.batch.delete(batch.id))
155
- assert_boolean(true, @client.recipient_account.delete(recipient.id, recipient_account.id))
156
- assert_boolean(true, @client.recipient.delete(recipient.id))
157
- end
158
- end
159
- # rubocop:enable Metrics/ClassLength
@@ -1,19 +0,0 @@
1
- require_relative '../../lib/trolley'
2
- require 'dotenv/load'
3
- require 'test/unit'
4
- require 'securerandom'
5
-
6
- module ApiClientHelper
7
- def setup
8
- @client = Trolley.client(
9
- ENV.fetch('SANDBOX_API_KEY'),
10
- ENV.fetch('SANDBOX_SECRET_KEY'),
11
- api_base: ENV['API_BASE'],
12
- proxy_uri: ENV['PROXY_URI']
13
- )
14
- end
15
- end
16
-
17
- def uuid
18
- SecureRandom.uuid.to_s
19
- end
File without changes