mangopay-v4 4.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.
Files changed (214) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +30 -0
  3. data/.rspec +4 -0
  4. data/.rubocop.yml +2 -0
  5. data/.travis.yml +13 -0
  6. data/Gemfile +2 -0
  7. data/LICENSE +20 -0
  8. data/README.md +380 -0
  9. data/bin/mangopay +9 -0
  10. data/lib/mangopay.rb +133 -0
  11. data/lib/mangopay/api/api.rb +9 -0
  12. data/lib/mangopay/api/api_methods.rb +137 -0
  13. data/lib/mangopay/api/auth_token_manager.rb +173 -0
  14. data/lib/mangopay/api/http_client.rb +325 -0
  15. data/lib/mangopay/api/service/bank_accounts.rb +146 -0
  16. data/lib/mangopay/api/service/cards.rb +152 -0
  17. data/lib/mangopay/api/service/client_wallets.rb +89 -0
  18. data/lib/mangopay/api/service/clients.rb +68 -0
  19. data/lib/mangopay/api/service/dispute_documents.rb +158 -0
  20. data/lib/mangopay/api/service/disputes.rb +187 -0
  21. data/lib/mangopay/api/service/e_money.rb +42 -0
  22. data/lib/mangopay/api/service/events.rb +47 -0
  23. data/lib/mangopay/api/service/hooks.rb +93 -0
  24. data/lib/mangopay/api/service/kyc_documents.rb +153 -0
  25. data/lib/mangopay/api/service/mandates.rb +142 -0
  26. data/lib/mangopay/api/service/oauth_tokens.rb +25 -0
  27. data/lib/mangopay/api/service/pay_ins.rb +260 -0
  28. data/lib/mangopay/api/service/pay_outs.rb +54 -0
  29. data/lib/mangopay/api/service/pre_authorizations.rb +69 -0
  30. data/lib/mangopay/api/service/refunds.rb +62 -0
  31. data/lib/mangopay/api/service/reports.rb +151 -0
  32. data/lib/mangopay/api/service/repudiations.rb +32 -0
  33. data/lib/mangopay/api/service/responses.rb +102 -0
  34. data/lib/mangopay/api/service/settlement_transfers.rb +55 -0
  35. data/lib/mangopay/api/service/transactions.rb +183 -0
  36. data/lib/mangopay/api/service/transfers.rb +54 -0
  37. data/lib/mangopay/api/service/ubo_declarations.rb +70 -0
  38. data/lib/mangopay/api/service/users.rb +163 -0
  39. data/lib/mangopay/api/service/wallets.rb +99 -0
  40. data/lib/mangopay/api/uri_provider.rb +35 -0
  41. data/lib/mangopay/common/json_tag_converter.rb +68 -0
  42. data/lib/mangopay/common/jsonifier.rb +249 -0
  43. data/lib/mangopay/common/log_provider.rb +34 -0
  44. data/lib/mangopay/common/rate_limit_interval.rb +17 -0
  45. data/lib/mangopay/common/read_only_fields.rb +27 -0
  46. data/lib/mangopay/common/response_error.rb +61 -0
  47. data/lib/mangopay/common/sort_direction.rb +15 -0
  48. data/lib/mangopay/common/sort_field.rb +13 -0
  49. data/lib/mangopay/common/template_url_options.rb +9 -0
  50. data/lib/mangopay/configuration.rb +39 -0
  51. data/lib/mangopay/environment.rb +66 -0
  52. data/lib/mangopay/model/address.rb +27 -0
  53. data/lib/mangopay/model/declared_ubo.rb +21 -0
  54. data/lib/mangopay/model/dispute_reason.rb +15 -0
  55. data/lib/mangopay/model/document_page_consult.rb +15 -0
  56. data/lib/mangopay/model/e_money.rb +18 -0
  57. data/lib/mangopay/model/entity/account/bank_account.rb +26 -0
  58. data/lib/mangopay/model/entity/account/ca_bank_account.rb +27 -0
  59. data/lib/mangopay/model/entity/account/gb_bank_account.rb +21 -0
  60. data/lib/mangopay/model/entity/account/iban_bank_account.rb +21 -0
  61. data/lib/mangopay/model/entity/account/other_bank_account.rb +24 -0
  62. data/lib/mangopay/model/entity/account/us_bank_account.rb +24 -0
  63. data/lib/mangopay/model/entity/card.rb +45 -0
  64. data/lib/mangopay/model/entity/card_registration.rb +43 -0
  65. data/lib/mangopay/model/entity/client.rb +63 -0
  66. data/lib/mangopay/model/entity/client_wallet.rb +23 -0
  67. data/lib/mangopay/model/entity/dispute.rb +50 -0
  68. data/lib/mangopay/model/entity/dispute_document.rb +29 -0
  69. data/lib/mangopay/model/entity/entity_base.rb +18 -0
  70. data/lib/mangopay/model/entity/hook.rb +26 -0
  71. data/lib/mangopay/model/entity/kyc_document.rb +28 -0
  72. data/lib/mangopay/model/entity/mandate.rb +51 -0
  73. data/lib/mangopay/model/entity/pay_in/bank_wire_direct_pay_in.rb +22 -0
  74. data/lib/mangopay/model/entity/pay_in/card_direct_pay_in.rb +33 -0
  75. data/lib/mangopay/model/entity/pay_in/card_pre_authorized_pay_in.rb +13 -0
  76. data/lib/mangopay/model/entity/pay_in/card_web_pay_in.rb +40 -0
  77. data/lib/mangopay/model/entity/pay_in/direct_debit_direct_pay_in.rb +23 -0
  78. data/lib/mangopay/model/entity/pay_in/direct_debit_web_pay_in.rb +38 -0
  79. data/lib/mangopay/model/entity/pay_in/pay_in.rb +16 -0
  80. data/lib/mangopay/model/entity/pay_out.rb +22 -0
  81. data/lib/mangopay/model/entity/pre_authorization.rb +68 -0
  82. data/lib/mangopay/model/entity/refund.rb +18 -0
  83. data/lib/mangopay/model/entity/report.rb +51 -0
  84. data/lib/mangopay/model/entity/repudiation.rb +18 -0
  85. data/lib/mangopay/model/entity/settlement_transfer.rb +17 -0
  86. data/lib/mangopay/model/entity/transaction.rb +52 -0
  87. data/lib/mangopay/model/entity/transfer.rb +13 -0
  88. data/lib/mangopay/model/entity/ubo_declaration.rb +32 -0
  89. data/lib/mangopay/model/entity/user/legal_user.rb +53 -0
  90. data/lib/mangopay/model/entity/user/natural_user.rb +50 -0
  91. data/lib/mangopay/model/entity/user/user.rb +18 -0
  92. data/lib/mangopay/model/entity/wallet.rb +28 -0
  93. data/lib/mangopay/model/enum/account_type.rb +24 -0
  94. data/lib/mangopay/model/enum/card_status.rb +15 -0
  95. data/lib/mangopay/model/enum/card_type.rb +33 -0
  96. data/lib/mangopay/model/enum/card_validity.rb +19 -0
  97. data/lib/mangopay/model/enum/country_iso.rb +759 -0
  98. data/lib/mangopay/model/enum/culture_code.rb +44 -0
  99. data/lib/mangopay/model/enum/currency_iso.rb +552 -0
  100. data/lib/mangopay/model/enum/declared_ubo_refused_reason_type.rb +16 -0
  101. data/lib/mangopay/model/enum/declared_ubo_status.rb +18 -0
  102. data/lib/mangopay/model/enum/deposit_type.rb +15 -0
  103. data/lib/mangopay/model/enum/direct_debit_type.rb +13 -0
  104. data/lib/mangopay/model/enum/dispute_doc_refused_reason_type.rb +25 -0
  105. data/lib/mangopay/model/enum/dispute_document_type.rb +23 -0
  106. data/lib/mangopay/model/enum/dispute_reason_type.rb +33 -0
  107. data/lib/mangopay/model/enum/dispute_status.rb +21 -0
  108. data/lib/mangopay/model/enum/dispute_type.rb +15 -0
  109. data/lib/mangopay/model/enum/document_status.rb +21 -0
  110. data/lib/mangopay/model/enum/download_format.rb +11 -0
  111. data/lib/mangopay/model/enum/event_type.rb +74 -0
  112. data/lib/mangopay/model/enum/funds_type.rb +15 -0
  113. data/lib/mangopay/model/enum/hook_status.rb +13 -0
  114. data/lib/mangopay/model/enum/hook_validity.rb +15 -0
  115. data/lib/mangopay/model/enum/income_range.rb +21 -0
  116. data/lib/mangopay/model/enum/kyc_doc_refused_reason_type.rb +37 -0
  117. data/lib/mangopay/model/enum/kyc_document_type.rb +19 -0
  118. data/lib/mangopay/model/enum/kyc_level.rb +13 -0
  119. data/lib/mangopay/model/enum/legal_person_type.rb +15 -0
  120. data/lib/mangopay/model/enum/mandate_culture_code.rb +23 -0
  121. data/lib/mangopay/model/enum/mandate_execution_type.rb +11 -0
  122. data/lib/mangopay/model/enum/mandate_scheme.rb +13 -0
  123. data/lib/mangopay/model/enum/mandate_status.rb +24 -0
  124. data/lib/mangopay/model/enum/mandate_type.rb +11 -0
  125. data/lib/mangopay/model/enum/natural_user_capacity.rb +15 -0
  126. data/lib/mangopay/model/enum/pay_in_execution_type.rb +18 -0
  127. data/lib/mangopay/model/enum/pay_in_payment_type.rb +21 -0
  128. data/lib/mangopay/model/enum/pay_out_payment_type.rb +11 -0
  129. data/lib/mangopay/model/enum/payment_status.rb +21 -0
  130. data/lib/mangopay/model/enum/person_type.rb +15 -0
  131. data/lib/mangopay/model/enum/platform_type.rb +23 -0
  132. data/lib/mangopay/model/enum/pre_authorization_execution_type.rb +11 -0
  133. data/lib/mangopay/model/enum/pre_authorization_status.rb +18 -0
  134. data/lib/mangopay/model/enum/refund_reason_type.rb +21 -0
  135. data/lib/mangopay/model/enum/report_status.rb +17 -0
  136. data/lib/mangopay/model/enum/report_type.rb +13 -0
  137. data/lib/mangopay/model/enum/secure_mode.rb +16 -0
  138. data/lib/mangopay/model/enum/transaction_nature.rb +17 -0
  139. data/lib/mangopay/model/enum/transaction_status.rb +15 -0
  140. data/lib/mangopay/model/enum/transaction_type.rb +15 -0
  141. data/lib/mangopay/model/enum/ubo_declaration_refused_reason_type.rb +19 -0
  142. data/lib/mangopay/model/enum/ubo_declaration_status.rb +21 -0
  143. data/lib/mangopay/model/event.rb +18 -0
  144. data/lib/mangopay/model/model.rb +194 -0
  145. data/lib/mangopay/model/money.rb +17 -0
  146. data/lib/mangopay/model/pay_in_web_extended_view.rb +31 -0
  147. data/lib/mangopay/model/refund_reason.rb +15 -0
  148. data/lib/mangopay/model/report_filter.rb +83 -0
  149. data/lib/mangopay/model/request/cancel_request.rb +16 -0
  150. data/lib/mangopay/model/request/complete_registration_request.rb +13 -0
  151. data/lib/mangopay/model/request/currency_request.rb +13 -0
  152. data/lib/mangopay/model/request/deactivation_request.rb +10 -0
  153. data/lib/mangopay/model/request/filter_request.rb +38 -0
  154. data/lib/mangopay/model/request/submit_document_request.rb +14 -0
  155. data/lib/mangopay/model/request/submit_ubo_declaration_request.rb +14 -0
  156. data/lib/mangopay/model/request/upload_file_request.rb +9 -0
  157. data/lib/mangopay/model/response_replica.rb +27 -0
  158. data/lib/mangopay/util/custom_formatter.rb +12 -0
  159. data/lib/mangopay/util/custom_logger.rb +34 -0
  160. data/lib/mangopay/util/enum.rb +52 -0
  161. data/lib/mangopay/util/file_encoder.rb +16 -0
  162. data/lib/mangopay/util/non_instantiable.rb +6 -0
  163. data/lib/mangopay/util/storage_strategy.rb +10 -0
  164. data/lib/mangopay/util/void_logger.rb +6 -0
  165. data/mangopay.gemspec +32 -0
  166. data/spec/context/address_context.rb +25 -0
  167. data/spec/context/bank_account_context.rb +138 -0
  168. data/spec/context/card_context.rb +46 -0
  169. data/spec/context/client_context.rb +45 -0
  170. data/spec/context/dispute_context.rb +37 -0
  171. data/spec/context/dispute_document_context.rb +20 -0
  172. data/spec/context/hook_context.rb +16 -0
  173. data/spec/context/kyc_document_context.rb +23 -0
  174. data/spec/context/mandate_context.rb +27 -0
  175. data/spec/context/pay_in_context.rb +225 -0
  176. data/spec/context/pay_out_context.rb +39 -0
  177. data/spec/context/pre_authorization_context.rb +41 -0
  178. data/spec/context/refund_context.rb +33 -0
  179. data/spec/context/report_context.rb +22 -0
  180. data/spec/context/repudiation_context.rb +19 -0
  181. data/spec/context/settlement_transfer_context.rb +28 -0
  182. data/spec/context/transfer_context.rb +51 -0
  183. data/spec/context/ubo_declaration_context.rb +25 -0
  184. data/spec/context/user_context.rb +83 -0
  185. data/spec/context/wallet_context.rb +53 -0
  186. data/spec/mangopay/bank_accounts_spec.rb +229 -0
  187. data/spec/mangopay/cards_spec.rb +135 -0
  188. data/spec/mangopay/client_wallets_spec.rb +148 -0
  189. data/spec/mangopay/clients_spec.rb +55 -0
  190. data/spec/mangopay/configuration_spec.rb +126 -0
  191. data/spec/mangopay/dispute_documents_spec.rb +174 -0
  192. data/spec/mangopay/disputes_spec.rb +265 -0
  193. data/spec/mangopay/e_money_spec.rb +38 -0
  194. data/spec/mangopay/events_spec.rb +50 -0
  195. data/spec/mangopay/hooks_spec.rb +71 -0
  196. data/spec/mangopay/kyc_documents_spec.rb +180 -0
  197. data/spec/mangopay/mandates_spec.rb +219 -0
  198. data/spec/mangopay/oauth_tokens_spec.rb +41 -0
  199. data/spec/mangopay/pay_ins_spec.rb +181 -0
  200. data/spec/mangopay/pay_outs_spec.rb +39 -0
  201. data/spec/mangopay/pre_authorizations_spec.rb +58 -0
  202. data/spec/mangopay/refunds_spec.rb +40 -0
  203. data/spec/mangopay/reports_spec.rb +121 -0
  204. data/spec/mangopay/responses_spec.rb +295 -0
  205. data/spec/mangopay/settlement_transfers_spec.rb +37 -0
  206. data/spec/mangopay/transactions_spec.rb +233 -0
  207. data/spec/mangopay/transfers_spec.rb +38 -0
  208. data/spec/mangopay/ubo_declarations_spec.rb +65 -0
  209. data/spec/mangopay/users_spec.rb +146 -0
  210. data/spec/mangopay/wallets_spec.rb +104 -0
  211. data/spec/resources/logo.png +0 -0
  212. data/spec/resources/test_pdf.pdf +0 -0
  213. data/spec/spec_helper.rb +72 -0
  214. metadata +349 -0
@@ -0,0 +1,14 @@
1
+ require_relative '../../common/jsonifier'
2
+
3
+ # Model object for body of a request to submit a document for approval
4
+ class SubmitDocumentRequest
5
+ include MangoPay::Jsonifier
6
+
7
+ # [String] Custom data added with the request
8
+ attr_accessor :tag
9
+
10
+ def initialize(tag = nil)
11
+ self.tag = tag
12
+ @status = MangoModel::DocumentStatus::VALIDATION_ASKED
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../../common/jsonifier'
2
+
3
+ # Model object for body of request to submit a UBO declaration for approval
4
+ class SubmitUboDeclarationRequest
5
+ include MangoPay::Jsonifier
6
+
7
+ # [String] Custom data added with the request
8
+ attr_accessor :tag
9
+
10
+ def initialize(tag = nil)
11
+ self.tag = tag
12
+ @status = MangoModel::UboDeclarationStatus::VALIDATION_ASKED
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../common/jsonifier'
2
+
3
+ # Model object for body of request to upload a file
4
+ class UploadFileRequest
5
+ include MangoPay::Jsonifier
6
+
7
+ # [String] Base64-encoded file to be uploaded
8
+ attr_accessor :file
9
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../common/jsonifier'
2
+
3
+ module MangoModel
4
+
5
+ # Replication of a previous request's response
6
+ class ResponseReplica
7
+ include MangoPay::Jsonifier
8
+
9
+ # [String] Original response's status code
10
+ attr_accessor :status_code
11
+
12
+ # [String] Value of the original response's Content-Length header
13
+ attr_accessor :content_length
14
+
15
+ # [String] Value of the original response's Content-Type header
16
+ attr_accessor :content_type
17
+
18
+ # [DateTime] Time of request of the original response
19
+ attr_accessor :long_date
20
+
21
+ # [Object] The original response object
22
+ attr_accessor :resource
23
+
24
+ # [String] URL of the original request
25
+ attr_accessor :request_url
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ # Formatter for log messages
2
+ class CustomFormatter < Logger::Formatter
3
+ def call(severity, time, progname, msg)
4
+ "[#{time}] #{five_chars(severity)} - #{progname}: #{msg2str(msg)}\n"
5
+ end
6
+
7
+ def five_chars(string)
8
+ result = ''
9
+ (5 - string.length).times { result << ' ' }
10
+ result + string
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+ require 'logger'
2
+
3
+ # Custom Logger implementation which handles concatenation
4
+ # of multiple provided arguments into the log message string,
5
+ # allowing for much cleaner logging statements.
6
+ class CustomLogger < Logger
7
+
8
+ def debug(message, *args)
9
+ super(format(message, args))
10
+ end
11
+
12
+ def info(message, *args)
13
+ super(format(message, args))
14
+ end
15
+
16
+ def warn(message, *args)
17
+ super(format(message, args))
18
+ end
19
+
20
+ def error(message, *args)
21
+ super(format(message, args))
22
+ end
23
+
24
+ def fatal(message, *args)
25
+ super(format(message, args))
26
+ end
27
+
28
+ def format(msg, msg_args)
29
+ msg_args.each do |arg|
30
+ msg.sub! '{}', arg.to_s
31
+ end
32
+ msg
33
+ end
34
+ end
@@ -0,0 +1,52 @@
1
+ # Extend in order to apply methods for Enum instantiation.
2
+ module Enum
3
+
4
+ # Restrict enum instantiation to the +value+ method.
5
+ def self.extended(base)
6
+ base.class_eval do
7
+ disable_instantiation
8
+ end
9
+ end
10
+
11
+ def value_of(string)
12
+ value = nil
13
+ constants.each do |const|
14
+ value = const_get const if const.to_s == string
15
+ end
16
+ value
17
+ end
18
+
19
+ private
20
+
21
+ # Temporary self-called method which instantiates Enums.
22
+ # Assign returned values to accordingly-named constant variables.
23
+ #
24
+ # @param +enum_value+ Representation value for the Enum instance
25
+ def value(enum_value)
26
+ enable_instantiation
27
+ enum_instance = new
28
+ disable_instantiation
29
+ enum_instance.instance_variable_set :@value, enum_value
30
+ enum_instance.define_singleton_method :to_s do
31
+ enum_value.to_s
32
+ end
33
+ enum_instance
34
+ end
35
+
36
+ # Enables instantiation of extending class.
37
+ def enable_instantiation
38
+ class_eval do
39
+ define_method :initialize do
40
+ end
41
+ end
42
+ end
43
+
44
+ # Disables instantiation of extending class.
45
+ def disable_instantiation
46
+ class_eval do
47
+ define_method :initialize do
48
+ raise 'Use the Enum#value method to instantiate Enums.'
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ require 'base64'
2
+
3
+ # Encodes files
4
+ module FileEncoder
5
+ class << self
6
+
7
+ # Encodes a file to a Base64 string.
8
+ #
9
+ # @param +path+ [String] path to the file to be encoded
10
+ # @return [String] the file as a Base64-encoded string
11
+ def encode_base64(path)
12
+ data = File.open(path, 'rb', &:read)
13
+ Base64.strict_encode64 data
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ # To be extended in order to render a class non-instantiable
2
+ module NonInstantiable
3
+ def initialize(*_args)
4
+ raise "Cannot instantiate #{self.class.name.split('::').last}"
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'enum'
2
+
3
+ # Storage strategy enumeration
4
+ class StorageStrategy
5
+ extend Enum
6
+
7
+ MEMORY = value 'MEMORY'
8
+
9
+ FILE = value 'FILE'
10
+ end
@@ -0,0 +1,6 @@
1
+ # Logger implementation which will not print any messages.
2
+ class VoidLogger < CustomLogger
3
+ def initialize(*_args); end
4
+
5
+ def add(*_args, &_block); end
6
+ end
data/mangopay.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'mangopay'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'mangopay-v4'
7
+ spec.version = MangoPay::VERSION
8
+ spec.summary = 'Ruby bindings for the version 2 of the MANGOPAY API'
9
+ spec.description = <<-EOF
10
+ The mangopay Gem makes interacting with MANGOPAY Services much easier.
11
+ For any questions regarding the use of MANGOPAY's Services feel free to contact us at http://www.mangopay.com/get-started-2/
12
+ You can find more documentation about MANGOPAY Services at http://docs.mangopay.com/
13
+ EOF
14
+ spec.authors = ['Paul Hristea']
15
+ spec.email = 'support@mangopay.com'
16
+ spec.homepage = 'http://docs.mangopay.com/'
17
+ spec.license = 'MIT'
18
+
19
+ spec.required_ruby_version = '>= 1.9.2'
20
+
21
+ spec.add_dependency('multi_json', '>= 1.7.7')
22
+
23
+ spec.add_development_dependency('rake', '>= 10.1.0')
24
+ spec.add_development_dependency('rspec', '>= 3.0.0')
25
+
26
+ spec.files = `git ls-files`.split("\n")
27
+ spec.test_files = `git ls-files -- spec/*`.split("\n")
28
+ spec.executables = `git ls-files -- bin/*`
29
+ .split("\n")
30
+ .map { |file| File.basename(file) }
31
+ spec.require_paths = ['lib']
32
+ end
@@ -0,0 +1,25 @@
1
+ shared_context 'address_context' do
2
+
3
+ let(:address_data) { build_address }
4
+ end
5
+
6
+ def build_address
7
+ address = MangoModel::Address.new
8
+ address.address_line1 = 'Test st., no. 18'
9
+ address.address_line2 = 'bl. 16, int. 32'
10
+ address.city = 'Brasov'
11
+ address.region = 'Tractoru'
12
+ address.postal_code = '505600'
13
+ address.country = MangoModel::CountryIso::RO
14
+ address
15
+ end
16
+
17
+ def its_the_same_address(address1, address2)
18
+ address1.address_line1 == address2.address_line1\
19
+ && address1.address_line2 == address2.address_line2\
20
+ && address1.city == address2.city\
21
+ && address1.region == address2.region\
22
+ && address1.region == address2.region\
23
+ && address1.postal_code == address2.postal_code\
24
+ && address1.country.eql?(address2.country)
25
+ end
@@ -0,0 +1,138 @@
1
+ require_relative 'user_context'
2
+ require_relative '../../lib/mangopay/model/entity/account/iban_bank_account'
3
+ require_relative '../../lib/mangopay/model/entity/account/us_bank_account'
4
+ require_relative '../../lib/mangopay/model/entity/account/ca_bank_account'
5
+ require_relative '../../lib/mangopay/model/entity/account/gb_bank_account'
6
+ require_relative '../../lib/mangopay/model/entity/account/other_bank_account'
7
+ require_relative '../../lib/mangopay/api/service/bank_accounts'
8
+
9
+ shared_context 'bank_account_context' do
10
+ include_context 'user_context'
11
+
12
+ IBAN_ACCOUNT_DATA ||= build_iban_account
13
+ US_CHECKING_ACCOUNT_DATA ||= build_us_checking_account
14
+ US_SAVINGS_ACCOUNT_DATA ||= build_us_savings_account
15
+ CA_ACCOUNT_DATA ||= build_ca_account
16
+ GB_ACCOUNT_DATA ||= build_gb_account
17
+ OTHER_ACCOUNT_DATA ||= build_other_account
18
+ IBAN_ACCOUNT_PERSISTED ||= persist_account IBAN_ACCOUNT_DATA
19
+ US_CHECKING_ACCOUNT_PERSISTED ||= persist_account US_CHECKING_ACCOUNT_DATA
20
+ US_SAVINGS_ACCOUNT_PERSISTED ||= persist_account US_SAVINGS_ACCOUNT_DATA
21
+ CA_ACCOUNT_PERSISTED ||= persist_account CA_ACCOUNT_DATA
22
+ GB_ACCOUNT_PERSISTED ||= persist_account GB_ACCOUNT_DATA
23
+ OTHER_ACCOUNT_PERSISTED ||= persist_account OTHER_ACCOUNT_DATA
24
+
25
+ let(:new_iban_account_persisted) { persist_account IBAN_ACCOUNT_DATA }
26
+ let(:new_us_checking_account_persisted) { persist_account US_CHECKING_ACCOUNT_DATA }
27
+ let(:new_us_savings_account_persisted) { persist_account US_SAVINGS_ACCOUNT_DATA }
28
+ let(:new_ca_account_persisted) { persist_account CA_ACCOUNT_DATA }
29
+ let(:new_gb_account_persisted) { persist_account GB_ACCOUNT_DATA }
30
+ let(:new_other_account_persisted) { persist_account OTHER_ACCOUNT_DATA }
31
+ end
32
+
33
+ def persist_account(account)
34
+ MangoApi::BankAccounts.create account
35
+ end
36
+
37
+ def build_iban_account
38
+ account = MangoModel::IbanBankAccount.new
39
+ add_user_details account
40
+ account.iban = 'FR7618829754160173622224154'
41
+ account.bic = 'CMBRFR2BCME'
42
+ account
43
+ end
44
+
45
+ def build_us_account
46
+ account = MangoModel::UsBankAccount.new
47
+ add_user_details account
48
+ account.account_number = '234234234234'
49
+ account.aba = '234334789'
50
+ account
51
+ end
52
+
53
+ def build_us_checking_account
54
+ account = build_us_account
55
+ account.deposit_account_type = MangoModel::DepositType::CHECKING
56
+ account
57
+ end
58
+
59
+ def build_us_savings_account
60
+ account = build_us_account
61
+ account.deposit_account_type = MangoModel::DepositType::SAVINGS
62
+ account
63
+ end
64
+
65
+ def build_ca_account
66
+ account = MangoModel::CaBankAccount.new
67
+ add_user_details account
68
+ account.institution_number = '123'
69
+ account.account_number = '234234234234'
70
+ account.branch_code = '12345'
71
+ account.bank_name = 'Mango Bank'
72
+ account
73
+ end
74
+
75
+ def build_gb_account
76
+ account = MangoModel::GbBankAccount.new
77
+ add_user_details account
78
+ account.sort_code = '200000'
79
+ account.account_number = '63956474'
80
+ account
81
+ end
82
+
83
+ def build_other_account
84
+ account = MangoModel::OtherBankAccount.new
85
+ add_user_details account
86
+ account.bic = 'BINAADADXXX'
87
+ account.account_number = '234234234234'
88
+ account.country = MangoModel::CountryIso::FR
89
+ account
90
+ end
91
+
92
+ def add_user_details(account)
93
+ user = NATURAL_USER_PERSISTED
94
+ account.user_id = user.id
95
+ account.owner_name = user.first_name + ' ' + user.last_name
96
+ account.owner_address = user.address
97
+ end
98
+
99
+ def its_the_same_iban(account1, account2)
100
+ return false unless its_the_same_account(account1, account2)
101
+ account1.iban == account2.iban\
102
+ && account1.bic == account2.bic
103
+ end
104
+
105
+ def its_the_same_us(account1, account2)
106
+ return false unless its_the_same_account(account1, account2)
107
+ account1.account_number == account2.account_number\
108
+ && account1.aba == account2.aba\
109
+ && account1.deposit_account_type.eql?(account2.deposit_account_type)
110
+ end
111
+
112
+ def its_the_same_ca(account1, account2)
113
+ return false unless its_the_same_account(account1, account2)
114
+ account1.institution_number == account2.institution_number\
115
+ && account1.account_number == account2.account_number\
116
+ && account1.branch_code == account2.branch_code\
117
+ && account1.bank_name == account2.bank_name
118
+ end
119
+
120
+ def its_the_same_gb(account1, account2)
121
+ return false unless its_the_same_account(account1, account2)
122
+ account1.sort_code == account2.sort_code\
123
+ && account1.account_number == account2.account_number
124
+ end
125
+
126
+ def its_the_same_other(account1, account2)
127
+ return false unless its_the_same_account(account1, account2)
128
+ account1.bic == account2.bic\
129
+ && account1.account_number == account2.account_number\
130
+ && account1.country.eql?(account2.country)
131
+ end
132
+
133
+ def its_the_same_account(account1, account2)
134
+ account1.user_id == account2.user_id\
135
+ && account1.type.eql?(account2.type)\
136
+ && account1.owner_name == account2.owner_name\
137
+ && its_the_same_address(account1.owner_address, account2.owner_address)
138
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'user_context'
2
+ require_relative '../../lib/mangopay/model/entity/card_registration'
3
+ require_relative '../../lib/mangopay/api/service/cards'
4
+
5
+ shared_context 'card_context' do
6
+ include_context 'user_context'
7
+
8
+ CARD_REGISTRATION_DATA ||= build_card_registration
9
+ CARD_REGISTRATION_PERSISTED ||= persist_card_registration CARD_REGISTRATION_DATA
10
+ # MangoPay test data
11
+ CARD_NUMBER ||= '4970100000000154'
12
+ CARD_EXPIRATION ||= '1218'
13
+ CARD_CVX ||= '123'
14
+ CARD_REGISTRATION_COMPLETED ||= complete_card_registration CARD_REGISTRATION_PERSISTED
15
+ CARD ||= retrieve_card CARD_REGISTRATION_COMPLETED.card_id
16
+ end
17
+
18
+ def persist_card_registration(card_registration)
19
+ MangoApi::Cards.create_registration card_registration
20
+ end
21
+
22
+ def complete_card_registration(card_registration)
23
+ test_body = "data=#{card_registration.preregistration_data}" +
24
+ "&accessKeyRef=#{card_registration.access_key}" +
25
+ "&cardNumber=#{CARD_NUMBER}" +
26
+ "&cardExpirationDate=#{CARD_EXPIRATION}" +
27
+ "&cardCvx=#{CARD_CVX}"
28
+
29
+ uri = URI(card_registration.card_registration_url)
30
+ response = MangoApi::HttpClient.post_raw(uri) do |request|
31
+ request.body = test_body
32
+ end
33
+ MangoApi::Cards.complete_registration(CARD_REGISTRATION_PERSISTED.id, response.to_s)
34
+ end
35
+
36
+ def build_card_registration
37
+ registration = MangoModel::CardRegistration.new
38
+ registration.user_id = NATURAL_USER_PERSISTED.id
39
+ registration.card_type = MangoModel::CardType::CB_VISA_MASTERCARD
40
+ registration.currency = MangoModel::CurrencyIso::EUR
41
+ registration
42
+ end
43
+
44
+ def retrieve_card(id)
45
+ MangoApi::Cards.get id
46
+ end