razorpay 2.4.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +8 -0
  3. data/.github/workflows/ruby.yml +38 -0
  4. data/CHANGELOG.md +19 -0
  5. data/README.md +29 -140
  6. data/documents/Invoice.md +531 -0
  7. data/documents/addon.md +169 -0
  8. data/documents/card.md +611 -0
  9. data/documents/customer.md +161 -0
  10. data/documents/emandate.md +484 -0
  11. data/documents/fund.md +87 -0
  12. data/documents/items.md +184 -0
  13. data/documents/order.md +230 -0
  14. data/documents/papernach.md +718 -0
  15. data/documents/payment.md +636 -0
  16. data/documents/paymentLink.md +1045 -0
  17. data/documents/paymentVerification.md +79 -0
  18. data/documents/plan.md +184 -0
  19. data/documents/qrcode.md +441 -0
  20. data/documents/refund.md +324 -0
  21. data/documents/registerEmandate.md +445 -0
  22. data/documents/registerNach.md +661 -0
  23. data/documents/settlement.md +477 -0
  24. data/documents/subscriptions.md +750 -0
  25. data/documents/tokens.md +208 -0
  26. data/documents/transfers.md +684 -0
  27. data/documents/upi.md +548 -0
  28. data/documents/virtualAccount.md +586 -0
  29. data/lib/razorpay/addon.rb +4 -0
  30. data/lib/razorpay/constants.rb +1 -1
  31. data/lib/razorpay/customer.rb +15 -0
  32. data/lib/razorpay/fund_account.rb +19 -0
  33. data/lib/razorpay/invoice.rb +8 -0
  34. data/lib/razorpay/item.rb +34 -0
  35. data/lib/razorpay/order.rb +10 -0
  36. data/lib/razorpay/payment.rb +52 -0
  37. data/lib/razorpay/payment_link.rb +36 -0
  38. data/lib/razorpay/qr_code.rb +34 -0
  39. data/lib/razorpay/refund.rb +4 -0
  40. data/lib/razorpay/request.rb +13 -6
  41. data/lib/razorpay/settlement.rb +39 -0
  42. data/lib/razorpay/subscription.rb +24 -0
  43. data/lib/razorpay/subscription_registration.rb +16 -0
  44. data/lib/razorpay/transfer.rb +35 -0
  45. data/lib/razorpay/utility.rb +7 -2
  46. data/lib/razorpay/virtual_account.rb +14 -6
  47. data/lib/razorpay.rb +7 -0
  48. data/test/fixtures/addon_collection.json +60 -0
  49. data/test/fixtures/create_json_payment.json +13 -0
  50. data/test/fixtures/delete_token.json +3 -0
  51. data/test/fixtures/downtimes_collection.json +21 -0
  52. data/test/fixtures/empty.json +2 -0
  53. data/test/fixtures/fake_addon.json +3 -3
  54. data/test/fixtures/fake_direct_transfer.json +32 -0
  55. data/test/fixtures/fake_downtime.json +14 -0
  56. data/test/fixtures/fake_fund_account.json +18 -0
  57. data/test/fixtures/fake_instant_settlement.json +19 -0
  58. data/test/fixtures/fake_item.json +9 -0
  59. data/test/fixtures/fake_order_transfers.json +88 -0
  60. data/test/fixtures/fake_otp_generate.json +19 -0
  61. data/test/fixtures/fake_otp_resend.json +7 -0
  62. data/test/fixtures/fake_otp_submit.json +5 -0
  63. data/test/fixtures/fake_payment_link.json +40 -0
  64. data/test/fixtures/fake_pending_update.json +30 -0
  65. data/test/fixtures/fake_qrcode.json +20 -0
  66. data/test/fixtures/fake_qrcode_close.json +22 -0
  67. data/test/fixtures/fake_recurring.json +5 -0
  68. data/test/fixtures/fake_refund.json +1 -1
  69. data/test/fixtures/fake_settlement.json +11 -0
  70. data/test/fixtures/fake_settlement_on_demand.json +39 -0
  71. data/test/fixtures/fake_subscription_pause.json +19 -0
  72. data/test/fixtures/fake_subscription_registration.json +91 -0
  73. data/test/fixtures/fake_subscription_resume.json +19 -0
  74. data/test/fixtures/fake_token.json +31 -0
  75. data/test/fixtures/fake_transfer.json +18 -0
  76. data/test/fixtures/fake_transfer_reverse.json +15 -0
  77. data/test/fixtures/fake_update_payment.json +39 -0
  78. data/test/fixtures/fake_virtual_account_allowed.json +46 -0
  79. data/test/fixtures/fake_virtual_account_receiver.json +46 -0
  80. data/test/fixtures/fund_collection.json +20 -0
  81. data/test/fixtures/item_collection.json +24 -0
  82. data/test/fixtures/payment_collection.json +1 -1
  83. data/test/fixtures/payment_link_collection.json +43 -0
  84. data/test/fixtures/payment_link_response.json +3 -0
  85. data/test/fixtures/qrcode_collection.json +50 -0
  86. data/test/fixtures/qrcode_payments_collection.json +74 -0
  87. data/test/fixtures/settlement_collection.json +26 -0
  88. data/test/fixtures/settlement_instant_collection.json +84 -0
  89. data/test/fixtures/settlement_report_collection.json +117 -0
  90. data/test/fixtures/success.json +3 -0
  91. data/test/fixtures/tokens_collection.json +36 -0
  92. data/test/fixtures/transfer_settlements_collection.json +38 -0
  93. data/test/fixtures/transfers_collection.json +41 -0
  94. data/test/razorpay/test_addon.rb +15 -15
  95. data/test/razorpay/test_customer.rb +27 -3
  96. data/test/razorpay/test_fund_account.rb +42 -0
  97. data/test/razorpay/test_invoice.rb +15 -2
  98. data/test/razorpay/test_item.rb +66 -0
  99. data/test/razorpay/test_order.rb +24 -1
  100. data/test/razorpay/test_payment.rb +184 -8
  101. data/test/razorpay/test_payment_link.rb +83 -0
  102. data/test/razorpay/test_plan.rb +2 -2
  103. data/test/razorpay/test_qr_code.rb +63 -0
  104. data/test/razorpay/test_refund.rb +16 -2
  105. data/test/razorpay/test_settlement.rb +76 -0
  106. data/test/razorpay/test_subscription.rb +72 -9
  107. data/test/razorpay/test_subscription_registration.rb +58 -0
  108. data/test/razorpay/test_transfer.rb +77 -0
  109. data/test/razorpay/test_utility.rb +32 -0
  110. data/test/razorpay/test_virtual_account.rb +64 -17
  111. data/test/test_helper.rb +6 -0
  112. metadata +138 -9
  113. data/.travis.yml +0 -22
  114. data/test/razorpay/test_errors.rb +0 -19
@@ -7,7 +7,7 @@ module Razorpay
7
7
 
8
8
  def setup
9
9
  @subscription_id = 'fake_subscription_id'
10
-
10
+ @offer_id = 'offer_JCTD1XMlUmzF6Z'
11
11
  # Any request that ends with subscriptions/subscription_id
12
12
  stub_get(%r{subscriptions\/#{Regexp.quote(@subscription_id)}$}, 'fake_subscription')
13
13
  stub_get(/subscriptions$/, 'subscription_collection')
@@ -32,6 +32,50 @@ module Razorpay
32
32
  assert_subscription_details(subscription)
33
33
  end
34
34
 
35
+ def test_subscription_should_be_pause
36
+ para_attr = {
37
+ "pause_at": "now"
38
+ }
39
+ stub_post(%r{subscriptions/#{@subscription_id}/pause$}, 'fake_subscription_pause',para_attr.to_json)
40
+ subscription = Razorpay::Subscription.pause(@subscription_id, para_attr.to_json)
41
+ assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
42
+ assert_equal "paused", subscription.status
43
+ end
44
+
45
+ def test_subscription_should_be_resume
46
+ para_attr = {
47
+ "resume_at": "now"
48
+ }
49
+ stub_post(%r{subscriptions/#{@subscription_id}/resume$}, 'fake_subscription_resume',para_attr.to_json)
50
+ subscription = Razorpay::Subscription.resume(@subscription_id, para_attr.to_json)
51
+ assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
52
+ assert_equal "resume", subscription.status
53
+ end
54
+
55
+ def test_subscription_pending_update
56
+ stub_get(%r{subscriptions/#{@subscription_id}/retrieve_scheduled_changes$}, 'fake_pending_update')
57
+ subscription = Razorpay::Subscription.fetch(@subscription_id).pending_update
58
+ assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
59
+ assert_equal "active", subscription.status
60
+ refute subscription.customer_notify
61
+ end
62
+
63
+ def test_subscription_cancel_scheduled_changes
64
+ stub_post(%r{subscriptions/#{@subscription_id}/cancel_scheduled_changes$}, 'fake_pending_update', {})
65
+ subscription = Razorpay::Subscription.cancel_scheduled_changes @subscription_id
66
+ assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
67
+ assert_equal "active", subscription.status
68
+ refute subscription.customer_notify
69
+ end
70
+
71
+ def test_subscription_delete_offer
72
+ stub_delete(%r{subscriptions/#{@subscription_id}/#{@offer_id}$}, 'fake_pending_update', {})
73
+ subscription = Razorpay::Subscription.delete_offer(@subscription_id,@offer_id)
74
+ assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
75
+ assert_equal "active", subscription.status
76
+ refute subscription.customer_notify
77
+ end
78
+
35
79
  def test_subscription_should_be_created
36
80
  time_now = Time.now.to_i
37
81
  subscription_attrs = {
@@ -39,10 +83,9 @@ module Razorpay
39
83
  start_at: time_now, total_count: 12
40
84
  }
41
85
 
42
- stub_params = "plan_id=fake_plan_id&customer_id=fake_customer_id&start_at=#{time_now}&total_count=12"
43
- stub_post(/subscriptions$/, 'fake_subscription', stub_params)
86
+ stub_post(/subscriptions$/, 'fake_subscription', subscription_attrs.to_json)
44
87
 
45
- subscription = Razorpay::Subscription.create subscription_attrs
88
+ subscription = Razorpay::Subscription.create subscription_attrs.to_json
46
89
  assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
47
90
 
48
91
  assert_equal @subscription_id, subscription.id, 'Subscription IDs do not match'
@@ -51,6 +94,29 @@ module Razorpay
51
94
  assert_subscription_details(subscription)
52
95
  end
53
96
 
97
+ def test_subscription_should_be_edited
98
+
99
+ subscription_attrs = {
100
+ "plan_id":"plan_00000000000002",
101
+ "offer_id":"offer_JHD834hjbxzhd38d",
102
+ "quantity":5,
103
+ "remaining_count":5,
104
+ "start_at":1496000432,
105
+ "schedule_change_at":"now",
106
+ "customer_notify":1
107
+ }
108
+
109
+ stub_patch(%r{/subscriptions/#{@subscription_id}$}, 'fake_subscription', subscription_attrs.to_json)
110
+
111
+ subscription = Razorpay::Subscription.fetch(@subscription_id).edit(subscription_attrs.to_json)
112
+ assert_instance_of Razorpay::Subscription, subscription, 'not an instance of Subscription class'
113
+
114
+ assert_equal @subscription_id, subscription.id, 'Subscription IDs do not match'
115
+ assert_equal 'created', subscription.status, 'Subscription status is accessible'
116
+
117
+ #assert_subscription_details(subscription)
118
+ end
119
+
54
120
  def test_subscription_should_be_created_with_upfront_amount
55
121
  subscription_attrs = {
56
122
  plan_id: 'fake_plan_id',
@@ -68,12 +134,9 @@ module Razorpay
68
134
  # This test will fail if the request sends
69
135
  # "addons[][item][amount]=100&addons[][item][currency]=INR" instead
70
136
  #
71
- stub_params = 'plan_id=fake_plan_id&total_count=12&' \
72
- 'addons[0][item][amount]=100&addons[0][item][currency]=INR&' \
73
- 'addons[1][item][amount]=200&addons[1][item][currency]=INR'
74
- stub_post(/subscriptions$/, 'fake_subscription', stub_params)
137
+ stub_post(/subscriptions$/, 'fake_subscription', subscription_attrs.to_json)
75
138
 
76
- Razorpay::Subscription.create subscription_attrs
139
+ Razorpay::Subscription.create subscription_attrs.to_json
77
140
  end
78
141
 
79
142
  def test_subscription_can_be_cancelled_by_subscription_id
@@ -0,0 +1,58 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::Addon
5
+ class RazorpaySubscriptionRegistrationTest < Minitest::Test
6
+
7
+ def setup
8
+ @invoice_id = 'inv_JA7OELdAoxbzk7'
9
+ end
10
+
11
+ def test_subscription_registration_should_be_defined
12
+ refute_nil Razorpay::SubscriptionRegistration
13
+ end
14
+
15
+ def test_create_registration_link
16
+ param_attr = {
17
+ "customer": {
18
+ "name": "Gaurav Kumar",
19
+ "email": "gaurav.kumar@example.com",
20
+ "contact": 9123456780
21
+ },
22
+ "amount": 0,
23
+ "currency": "INR",
24
+ "type": "link",
25
+ "description": "12 p.m. Meals",
26
+ "subscription_registration": {
27
+ "method": "nach",
28
+ "auth_type": "physical",
29
+ "bank_account": {
30
+ "beneficiary_name": "Gaurav Kumar",
31
+ "account_number": 11214311215411,
32
+ "account_type": "savings",
33
+ "ifsc_code": "HDFC0001233"
34
+ },
35
+ "nach": {
36
+ "form_reference1": "Recurring Payment for Gaurav Kumar",
37
+ "form_reference2": "Method Paper NACH"
38
+ },
39
+ "expire_at": 1648101450,
40
+ "max_amount": 50000
41
+ },
42
+ "receipt": "Receipt No. #12",
43
+ "sms_notify": 1,
44
+ "email_notify": 1,
45
+ "expire_by": 1648101450,
46
+ "notes": {
47
+ "note_key 1": "Beam me up Scotty",
48
+ "note_key 2": "Tea. Earl Gray. Hot."
49
+ }
50
+ }
51
+
52
+ stub_post(%r{/subscription_registration/auth_links$}, 'fake_subscription_registration', param_attr.to_json)
53
+ subscription_registration = Razorpay::SubscriptionRegistration.create(param_attr.to_json)
54
+ assert_instance_of Razorpay::Invoice, subscription_registration
55
+ assert_equal subscription_registration.id, @invoice_id
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::Transfer
5
+ class RazorpayTransferTest < Minitest::Test
6
+ def setup
7
+ @transfer_id = 'trf_JDEnyfvGu22ECp'
8
+
9
+ # Any request that ends with transfers/transfer_id
10
+ stub_get(%r{/transfers/#{@transfer_id}$}, 'fake_transfer')
11
+ end
12
+
13
+ def test_transfer_should_be_defined
14
+ refute_nil Razorpay::Transfer
15
+ end
16
+
17
+ def test_create_transfer_reverse
18
+ para_attr = {
19
+ "amount":100
20
+ }
21
+ stub_post(%r{/transfers/#{@transfer_id}/reversals$}, 'fake_transfer_reverse', para_attr.to_json)
22
+ transfer = Razorpay::Transfer.fetch(@transfer_id)
23
+ transfer.reverse(para_attr.to_json)
24
+ assert_instance_of Razorpay::Transfer, transfer, 'Transfer not an instance of Transfer class'
25
+ assert_equal transfer.id, @transfer_id, 'Transfer transfer_id is accessible'
26
+ end
27
+
28
+ def test_transfer_edit
29
+ para_attr = {
30
+ "on_hold": "1",
31
+ "on_hold_until": "1679691505"
32
+ }
33
+ stub_patch(%r{/transfers/#{@transfer_id}$}, 'fake_transfer', para_attr.to_json)
34
+ transfer = Razorpay::Transfer.fetch(@transfer_id)
35
+ transfer.edit(para_attr.to_json);
36
+ assert_instance_of Razorpay::Transfer, transfer, 'Transfer not an instance of Transfer class'
37
+ assert_equal transfer.id, @transfer_id, 'Transfer transfer_id is accessible'
38
+ end
39
+
40
+ def test_transfer_fetch
41
+ transfer = Razorpay::Transfer.fetch(@transfer_id)
42
+ assert_instance_of Razorpay::Transfer, transfer, 'Transfer not an instance of Transfer class'
43
+ assert_equal transfer.id, @transfer_id , 'Transfer transfer_id is accessible'
44
+ assert transfer.on_hold
45
+ end
46
+
47
+ def test_transfer_fetch_settlement_details
48
+ stub_get("#{BASE_URI}transfers/?expand[]=recipient_settlement", 'transfers_collection')
49
+ transfer = Razorpay::Transfer.fetch_settlements
50
+ assert_instance_of Razorpay::Collection, transfer , 'Transfer should be an array'
51
+ refute_empty transfer.items , 'Transfer should be more than one'
52
+ end
53
+
54
+ def test_transfer_fetch_settlements
55
+ para_attr = {
56
+ "recipient_settlement_id": "setl_DHYJ3dRPqQkAgV"
57
+ }
58
+ stub_get(/transfers/, 'transfer_settlements_collection',para_attr.to_json)
59
+ transfer = Razorpay::Transfer.all para_attr.to_json
60
+ assert_instance_of Razorpay::Collection, transfer , 'Transfer should be an array'
61
+ refute_empty transfer.items , 'Transfer should be more than one'
62
+ end
63
+
64
+ def test_transfer_direct_transfer
65
+ para_attr = {
66
+ "account": "acc_CPRsN1LkFccllA",
67
+ "amount": 100,
68
+ "currency": "INR"
69
+ }
70
+ stub_post(/transfers/, 'fake_direct_transfer',para_attr.to_json)
71
+ transfer = Razorpay::Transfer.create para_attr.to_json
72
+ assert_instance_of Razorpay::Transfer, transfer, 'Transfer not an instance of Transfer class'
73
+ assert_equal transfer.id, @transfer_id , 'Transfer transfer_id is accessible'
74
+ refute transfer.on_hold
75
+ end
76
+ end
77
+ end
@@ -21,6 +21,38 @@ module Razorpay
21
21
  end
22
22
  end
23
23
 
24
+ def test_payment_link_signature_verification_exception
25
+
26
+ payment_response = {
27
+ payment_link_id: 'fake_razorpay_payment_link_id',
28
+ payment_link_reference_id: 'fake_reference_id',
29
+ payment_link_status: 'paid',
30
+ razorpay_payment_id: 'pay_IH3d0ara9bSsjQ',
31
+ razorpay_signature: 'b8a6acda585c9b74e9da393c7354c7e685e37e69d30ae654730f042e674e0283'
32
+ }
33
+
34
+ Razorpay::Utility.verify_payment_link_signature(payment_response)
35
+
36
+ payment_response[:razorpay_signature] = '_dummy_signature' * 4
37
+ assert_raises(SecurityError) do
38
+ Razorpay::Utility.verify_payment_link_signature(payment_response)
39
+ end
40
+ end
41
+
42
+ def test_payment_link_signature_verification
43
+
44
+ payment_response = {
45
+ payment_link_id: 'fake_razorpay_payment_link_id',
46
+ payment_link_reference_id: 'fake_reference_id',
47
+ payment_link_status: 'paid',
48
+ razorpay_payment_id: 'pay_IH3d0ara9bSsjQ',
49
+ razorpay_signature: 'b8a6acda585c9b74e9da393c7354c7e685e37e69d30ae654730f042e674e0283'
50
+ }
51
+
52
+ response = Razorpay::Utility.verify_payment_link_signature(payment_response)
53
+ assert(response)
54
+ end
55
+
24
56
  def test_subscription_signature_verification
25
57
  payment_response = {
26
58
  razorpay_payment_id: 'fake_payment_id',
@@ -5,6 +5,8 @@ module Razorpay
5
5
  class RazorpayVirtualAccountTest < Minitest::Test
6
6
  def setup
7
7
  @virtual_account_id = 'va_4xbQrmEoA5WJ0G'
8
+ @payment_id = 'fake_payment_id'
9
+ @payer_id = "ba_J3gpYBXh92ZL5M"
8
10
 
9
11
  @virtual_account_create_array = {
10
12
  receiver_types: ['bank_account'],
@@ -21,13 +23,22 @@ module Razorpay
21
23
  end
22
24
 
23
25
  def test_virtual_account_should_be_created
26
+
27
+ para_attr = {
28
+ "type": "bank_account",
29
+ "bank_account": {
30
+ "ifsc": "RATN0VAAPIS",
31
+ "account_number": "2223330027558515"
32
+ }
33
+ }
34
+
24
35
  stub_post(
25
36
  /virtual_accounts$/,
26
37
  'fake_virtual_account',
27
- 'receiver_types[0]=bank_account&description=First%20Virtual%20Account'
38
+ para_attr.to_json
28
39
  )
29
40
 
30
- virtual_account = Razorpay::VirtualAccount.create @virtual_account_create_array
41
+ virtual_account = Razorpay::VirtualAccount.create para_attr.to_json
31
42
  assert_equal 'First Virtual Account', virtual_account.description
32
43
  assert_equal 'active', virtual_account.status
33
44
  refute_empty virtual_account.receivers
@@ -37,24 +48,15 @@ module Razorpay
37
48
  end
38
49
 
39
50
  def test_close_virtual_account_class_method
40
- stub_patch(%r{virtual_accounts/#{@virtual_account_id}$}, 'fake_virtual_account_closed', 'status=closed')
51
+ stub_post(%r{virtual_accounts/#{@virtual_account_id}/close$}, 'fake_virtual_account_closed', {})
41
52
  virtual_account = Razorpay::VirtualAccount.close(@virtual_account_id)
42
53
  assert_instance_of Razorpay::VirtualAccount, virtual_account
43
54
  assert_equal 'closed', virtual_account.status
44
55
  end
45
56
 
46
57
  def test_close_virtual_account
47
- stub_patch(%r{virtual_accounts/#{@virtual_account_id}$}, 'fake_virtual_account_closed', 'status=closed')
48
- virtual_account = Razorpay::VirtualAccount.fetch(@virtual_account_id)
49
- virtual_account = virtual_account.close
50
- assert_instance_of Razorpay::VirtualAccount, virtual_account
51
- assert_equal 'closed', virtual_account.status
52
- end
53
-
54
- def test_close_virtual_account!
55
- stub_patch(%r{virtual_accounts/#{@virtual_account_id}$}, 'fake_virtual_account_closed', 'status=closed')
56
- virtual_account = Razorpay::VirtualAccount.fetch(@virtual_account_id)
57
- virtual_account.close!
58
+ stub_post(%r{virtual_accounts/#{@virtual_account_id}/close$}, 'fake_virtual_account_closed', {})
59
+ virtual_account = Razorpay::VirtualAccount.close(@virtual_account_id)
58
60
  assert_instance_of Razorpay::VirtualAccount, virtual_account
59
61
  assert_equal 'closed', virtual_account.status
60
62
  end
@@ -71,9 +73,9 @@ module Razorpay
71
73
  end
72
74
 
73
75
  def test_fetch_payment_bank_transfer
74
- stub_get(%r{payments/fake_payment_id$$}, 'fake_payment')
75
- stub_get(%r{payments/fake_payment_id/bank_transfer$}, 'fake_payment_bank_transfer')
76
- bank_transfer = Razorpay::Payment.fetch('fake_payment_id').bank_transfer
76
+ stub_get(%r{payments\/#{@payment_id}$}, 'fake_payment')
77
+ stub_get(%r{payments/#{@payment_id}/bank_transfer$}, 'fake_payment_bank_transfer')
78
+ bank_transfer = Razorpay::Payment.fetch(@payment_id).bank_transfer
77
79
  assert_equal @virtual_account_id, bank_transfer.virtual_account_id
78
80
  assert_equal 'fake_payment_id', bank_transfer.payment_id
79
81
  end
@@ -84,5 +86,50 @@ module Razorpay
84
86
  assert_instance_of Razorpay::Collection, payments, 'Payments should be an array'
85
87
  assert !payments.items.empty?, 'Payments should be more than one'
86
88
  end
89
+
90
+ def test_virtual_account_add_receivers
91
+
92
+ para_attr = {
93
+ "types": [
94
+ "vpa"
95
+ ],
96
+ "vpa": {
97
+ "descriptor": "gauravkumar"
98
+ }
99
+ }
100
+
101
+ stub_post(%r{virtual_accounts/#{@virtual_account_id}/receivers$},'fake_virtual_account_receiver',para_attr.to_json)
102
+
103
+ virtual_account = Razorpay::VirtualAccount.add_receiver(@virtual_account_id,para_attr.to_json)
104
+ assert_equal @virtual_account_id , virtual_account.id
105
+ assert_equal 'First Virtual Account', virtual_account.name
106
+ assert_equal 'active', virtual_account.status
107
+ refute_empty virtual_account.receivers
108
+ end
109
+
110
+ def test_virtual_account_allowed_payer
111
+
112
+ para_attr = {
113
+ "types": "bank_account",
114
+ "bank_account": {
115
+ "ifsc": "UTIB0000013",
116
+ "account_number": 914010012345679
117
+ }
118
+ }
119
+
120
+ stub_post(%r{virtual_accounts/#{@virtual_account_id}/allowed_payers$},'fake_virtual_account_allowed',para_attr.to_json)
121
+
122
+ virtual_account = Razorpay::VirtualAccount.allowed_payer(@virtual_account_id,para_attr.to_json)
123
+ assert_equal @virtual_account_id , virtual_account.id
124
+ assert_equal 'Gaurav Kumar', virtual_account.name
125
+ assert_equal 'active', virtual_account.status
126
+ refute_empty virtual_account.allowed_payers
127
+ end
128
+
129
+ def test_virtual_account_delete_payer
130
+ stub_delete(%r{virtual_accounts/#{@virtual_account_id}/allowed_payers/#{@payer_id}$},'empty')
131
+ virtual_account = Razorpay::VirtualAccount.delete_allowed_payer(@virtual_account_id,@payer_id)
132
+ assert_instance_of Razorpay::Entity, virtual_account
133
+ end
87
134
  end
88
135
  end
data/test/test_helper.rb CHANGED
@@ -25,6 +25,12 @@ def stub_get(*args)
25
25
  stub_request(:get, url).to_return(response)
26
26
  end
27
27
 
28
+ def stub_delete(*args)
29
+ response = stub_response(*args)
30
+ url = args[0]
31
+ stub_request(:delete, url).to_return(response)
32
+ end
33
+
28
34
  def stub_post(*args)
29
35
  stub_request_with_body(:post, *args)
30
36
  end