diff --git a/lib/mangopay.rb b/lib/mangopay.rb index 6a2c275..6eb8c32 100644 --- a/lib/mangopay.rb +++ b/lib/mangopay.rb @@ -47,6 +47,7 @@ module MangoPay autoload :Deposit, 'mangopay/deposit' autoload :Conversion, 'mangopay/conversion' autoload :PaymentMethodMetadata, 'mangopay/payment_method_metadata' + autoload :VirtualAccount, 'mangopay/virtual_account' # temporary autoload :Temp, 'mangopay/temp' diff --git a/lib/mangopay/virtual_account.rb b/lib/mangopay/virtual_account.rb new file mode 100644 index 0000000..4185a56 --- /dev/null +++ b/lib/mangopay/virtual_account.rb @@ -0,0 +1,44 @@ +module MangoPay + + class VirtualAccount < Resource + class << self + # Creates a new virtual account + def create(wallet_id, params, idempotency_key = nil) + url = "#{MangoPay.api_path}/wallets/#{wallet_id}/virtual-accounts" + MangoPay.request(:post, url, params, {}, idempotency_key) + end + + # Updates: + # - irreversibly deactivates a virtual account with +virtual_account_id+ + # see https://docs.mangopay.com/api-reference/virtual-accounts/deactivate-virtual-account + def deactivate(wallet_id, virtual_account_id, idempotency_key = nil) + url = "#{MangoPay.api_path}/wallets/#{wallet_id}/virtual-accounts/#{virtual_account_id}" + MangoPay.request(:put, url, {}, {}, idempotency_key) + end + + # Fetches: + # - view a virtual account with +virtual_account_id+ + # see https://docs.mangopay.com/api-reference/virtual-accounts/view-virtual-account + def fetch(wallet_id, virtual_account_id) + url = "#{MangoPay.api_path}/wallets/#{wallet_id}/virtual-accounts/#{virtual_account_id}" + MangoPay.request(:get, url, {}) + end + + # Fetches: + # - view virtual accounts for given +wallet_id+ + # see https://docs.mangopay.com/api-reference/virtual-accounts/list-virtual-accounts-wallet + def fetch_all(wallet_id, filters = {}) + url = "#{MangoPay.api_path}/wallets/#{wallet_id}/virtual-accounts" + MangoPay.request(:get, url, {}, filters) + end + + # Fetches: + # Allows to check which account countries and currencies are available + # see https://docs.mangopay.com/api-reference/virtual-accounts/view-virtual-account-availabilities + def fetch_availabilities(filters = {}) + url = "#{MangoPay.api_path}/virtual-accounts/availability" + MangoPay.request(:get, url, {}, filters) + end + end + end +end \ No newline at end of file diff --git a/spec/mangopay/shared_resources.rb b/spec/mangopay/shared_resources.rb index 8b29b4a..e5b30eb 100644 --- a/spec/mangopay/shared_resources.rb +++ b/spec/mangopay/shared_resources.rb @@ -998,4 +998,21 @@ def get_payment_method_metadata Bin: pay_in['CardInfo']['BIN'] ) end +end + +############################################### +shared_context 'virtual_account' do + ############################################### + include_context 'users' + include_context 'wallets' + + def new_virtual_account(wallet_id) + create_virtual_account = { + Country: 'FR', + VirtualAccountPurpose: 'Collection', + Tag: 'create virtual account tag' + } + + MangoPay::VirtualAccount.create(wallet_id, create_virtual_account) + end end \ No newline at end of file diff --git a/spec/mangopay/virtual_account_spec.rb b/spec/mangopay/virtual_account_spec.rb new file mode 100644 index 0000000..bb0ecad --- /dev/null +++ b/spec/mangopay/virtual_account_spec.rb @@ -0,0 +1,52 @@ +describe MangoPay::VirtualAccount do + include_context 'virtual_account' + include_context 'wallets' + + describe 'CREATE' do + it 'can create a Virtual Account' do + wallet = new_wallet + virtual_account = new_virtual_account(wallet['Id']) + expect(virtual_account).not_to be_nil + end + end + + describe 'DEACTIVATE' do + it 'deactivates a Virtual Account' do + wallet = new_wallet + virtual_account = new_virtual_account(wallet['Id']) + deactivated = MangoPay::VirtualAccount.deactivate(wallet['Id'], virtual_account['Id']) + expect(deactivated).not_to be_nil + expect(deactivated['Status']).to eq 'CLOSED' + expect(deactivated['Id']).to eq(virtual_account['Id']) + end + end + + describe 'FETCH' do + it 'can get a Virtual Account' do + wallet = new_wallet + virtual_account = new_virtual_account(wallet['Id']) + fetched = MangoPay::VirtualAccount.fetch(wallet['Id'], virtual_account['Id']) + expect(fetched).not_to be_nil + expect(fetched['Id']).to eq(virtual_account['Id']) + end + end + + describe 'FETCH ALL' do + it 'can get all Virtual Accounts for a wallet' do + wallet = new_wallet + virtual_account = new_virtual_account(wallet['Id']) + fetched_list = MangoPay::VirtualAccount.fetch_all(wallet['Id']) + expect(fetched_list).not_to be_nil + expect(fetched_list[0]['Id']).to eq(virtual_account['Id']) + end + end + + describe 'FETCH AVAILABILITIES' do + it 'get availabilities' do + availabilities = MangoPay::VirtualAccount.fetch_availabilities + expect(availabilities).not_to be_nil + expect(availabilities['Collection']).not_to be_nil + expect(availabilities['UserOwned']).not_to be_nil + end + end +end