razorpay 2.4.0 → 3.2.4

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 (185) hide show
  1. checksums.yaml +4 -4
  2. data/.cursorignore +174 -0
  3. data/.github/dependabot.yml +8 -0
  4. data/.github/pull_request_template.md +8 -0
  5. data/.github/workflows/ci.yml +80 -0
  6. data/.github/workflows/ruby.yml +38 -0
  7. data/CHANGELOG.md +85 -1
  8. data/README.md +48 -137
  9. data/documents/Invoice.md +539 -0
  10. data/documents/account.md +449 -0
  11. data/documents/addon.md +191 -0
  12. data/documents/card.md +655 -0
  13. data/documents/customer.md +405 -0
  14. data/documents/dispute.md +301 -0
  15. data/documents/documents.md +65 -0
  16. data/documents/emandate.md +492 -0
  17. data/documents/fund.md +89 -0
  18. data/documents/items.md +208 -0
  19. data/documents/oauth_token.md +142 -0
  20. data/documents/order.md +352 -0
  21. data/documents/papernach.md +738 -0
  22. data/documents/payment.md +1122 -0
  23. data/documents/paymentLink.md +1063 -0
  24. data/documents/paymentVerification.md +79 -0
  25. data/documents/plan.md +184 -0
  26. data/documents/productConfiguration.md +444 -0
  27. data/documents/qrcode.md +439 -0
  28. data/documents/refund.md +325 -0
  29. data/documents/registerEmandate.md +452 -0
  30. data/documents/registerNach.md +653 -0
  31. data/documents/settlement.md +478 -0
  32. data/documents/stakeholder.md +334 -0
  33. data/documents/subscriptions.md +752 -0
  34. data/documents/tokens.md +407 -0
  35. data/documents/transfers.md +821 -0
  36. data/documents/upi.md +545 -0
  37. data/documents/virtualAccount.md +591 -0
  38. data/documents/webhook.md +224 -0
  39. data/lib/razorpay/account.rb +39 -0
  40. data/lib/razorpay/addon.rb +9 -1
  41. data/lib/razorpay/card.rb +4 -0
  42. data/lib/razorpay/constants.rb +7 -2
  43. data/lib/razorpay/customer.rb +31 -0
  44. data/lib/razorpay/dispute.rb +26 -0
  45. data/lib/razorpay/document.rb +19 -0
  46. data/lib/razorpay/fund_account.rb +19 -0
  47. data/lib/razorpay/iin.rb +15 -0
  48. data/lib/razorpay/invoice.rb +8 -0
  49. data/lib/razorpay/item.rb +34 -0
  50. data/lib/razorpay/oauth_token.rb +109 -0
  51. data/lib/razorpay/order.rb +19 -1
  52. data/lib/razorpay/payload_validator.rb +93 -0
  53. data/lib/razorpay/payment.rb +64 -0
  54. data/lib/razorpay/payment_link.rb +36 -0
  55. data/lib/razorpay/payment_method.rb +17 -0
  56. data/lib/razorpay/product.rb +37 -0
  57. data/lib/razorpay/qr_code.rb +34 -0
  58. data/lib/razorpay/refund.rb +4 -0
  59. data/lib/razorpay/request.rb +50 -26
  60. data/lib/razorpay/settlement.rb +39 -0
  61. data/lib/razorpay/stakeholder.rb +39 -0
  62. data/lib/razorpay/subscription.rb +24 -0
  63. data/lib/razorpay/subscription_registration.rb +16 -0
  64. data/lib/razorpay/token.rb +28 -0
  65. data/lib/razorpay/transfer.rb +39 -0
  66. data/lib/razorpay/utility.rb +41 -6
  67. data/lib/razorpay/validation_config.rb +11 -0
  68. data/lib/razorpay/virtual_account.rb +15 -7
  69. data/lib/razorpay/webhook.rb +50 -0
  70. data/lib/razorpay.rb +24 -1
  71. data/razorpay-ruby.gemspec +2 -1
  72. data/test/fixtures/addon_collection.json +60 -0
  73. data/test/fixtures/create_json_payment.json +13 -0
  74. data/test/fixtures/delete_token.json +3 -0
  75. data/test/fixtures/dispute_collection.json +67 -0
  76. data/test/fixtures/dispute_error.json +10 -0
  77. data/test/fixtures/document_error.json +10 -0
  78. data/test/fixtures/downtimes_collection.json +21 -0
  79. data/test/fixtures/empty.json +2 -0
  80. data/test/fixtures/error_customer.json +10 -0
  81. data/test/fixtures/error_eligibility.json +10 -0
  82. data/test/fixtures/error_eligibility_check.json +10 -0
  83. data/test/fixtures/fake_account.json +78 -0
  84. data/test/fixtures/fake_addon.json +3 -3
  85. data/test/fixtures/fake_bank_account.json +9 -0
  86. data/test/fixtures/fake_card_reference.json +5 -0
  87. data/test/fixtures/fake_create_upi_payment.json +3 -0
  88. data/test/fixtures/fake_direct_transfer.json +32 -0
  89. data/test/fixtures/fake_dispute.json +29 -0
  90. data/test/fixtures/fake_document.json +9 -0
  91. data/test/fixtures/fake_downtime.json +14 -0
  92. data/test/fixtures/fake_eligiblity.json +79 -0
  93. data/test/fixtures/fake_fulfillment.json +10 -0
  94. data/test/fixtures/fake_fund_account.json +18 -0
  95. data/test/fixtures/fake_iin_token.json +23 -0
  96. data/test/fixtures/fake_instant_settlement.json +19 -0
  97. data/test/fixtures/fake_item.json +9 -0
  98. data/test/fixtures/fake_oauth_token.json +8 -0
  99. data/test/fixtures/fake_order_transfers.json +88 -0
  100. data/test/fixtures/fake_otp_generate.json +19 -0
  101. data/test/fixtures/fake_otp_resend.json +7 -0
  102. data/test/fixtures/fake_otp_submit.json +5 -0
  103. data/test/fixtures/fake_payment_expanded_details.json +38 -0
  104. data/test/fixtures/fake_payment_expanded_details_card.json +50 -0
  105. data/test/fixtures/fake_payment_link.json +40 -0
  106. data/test/fixtures/fake_pending_update.json +30 -0
  107. data/test/fixtures/fake_product.json +138 -0
  108. data/test/fixtures/fake_qrcode.json +20 -0
  109. data/test/fixtures/fake_qrcode_close.json +22 -0
  110. data/test/fixtures/fake_recurring.json +5 -0
  111. data/test/fixtures/fake_refund.json +1 -1
  112. data/test/fixtures/fake_revoke_token.json +3 -0
  113. data/test/fixtures/fake_rto.json +15 -0
  114. data/test/fixtures/fake_settlement.json +11 -0
  115. data/test/fixtures/fake_settlement_on_demand.json +39 -0
  116. data/test/fixtures/fake_stakeholder.json +29 -0
  117. data/test/fixtures/fake_subscription_pause.json +19 -0
  118. data/test/fixtures/fake_subscription_registration.json +91 -0
  119. data/test/fixtures/fake_subscription_resume.json +19 -0
  120. data/test/fixtures/fake_token.json +31 -0
  121. data/test/fixtures/fake_tokenise_customer.json +40 -0
  122. data/test/fixtures/fake_transfer.json +18 -0
  123. data/test/fixtures/fake_transfer_reverse.json +15 -0
  124. data/test/fixtures/fake_update_payment.json +39 -0
  125. data/test/fixtures/fake_validate_vpa.json +5 -0
  126. data/test/fixtures/fake_virtual_account_allowed.json +46 -0
  127. data/test/fixtures/fake_virtual_account_receiver.json +46 -0
  128. data/test/fixtures/fake_webhook.json +79 -0
  129. data/test/fixtures/fake_webhook_by_account_id.json +22 -0
  130. data/test/fixtures/fetch_tnc.json +11 -0
  131. data/test/fixtures/fund_collection.json +20 -0
  132. data/test/fixtures/item_collection.json +24 -0
  133. data/test/fixtures/order_error.json +10 -0
  134. data/test/fixtures/payment_collection.json +1 -1
  135. data/test/fixtures/payment_error.json +10 -0
  136. data/test/fixtures/payment_link_collection.json +43 -0
  137. data/test/fixtures/payment_link_response.json +3 -0
  138. data/test/fixtures/payment_methods_collection.json +149 -0
  139. data/test/fixtures/qrcode_collection.json +50 -0
  140. data/test/fixtures/qrcode_payments_collection.json +74 -0
  141. data/test/fixtures/reversals_collection.json +22 -0
  142. data/test/fixtures/settlement_collection.json +26 -0
  143. data/test/fixtures/settlement_instant_collection.json +84 -0
  144. data/test/fixtures/settlement_report_collection.json +117 -0
  145. data/test/fixtures/stakeholder_collection.json +35 -0
  146. data/test/fixtures/success.json +3 -0
  147. data/test/fixtures/tokens_collection.json +36 -0
  148. data/test/fixtures/transfer_error.json +10 -0
  149. data/test/fixtures/transfer_settlements_collection.json +38 -0
  150. data/test/fixtures/transfers_collection.json +41 -0
  151. data/test/fixtures/webhook_by_account_collection.json +35 -0
  152. data/test/fixtures/webhook_collection.json +85 -0
  153. data/test/razorpay/test_account.rb +134 -0
  154. data/test/razorpay/test_addon.rb +19 -15
  155. data/test/razorpay/test_card.rb +6 -0
  156. data/test/razorpay/test_customer.rb +132 -3
  157. data/test/razorpay/test_dispute.rb +98 -0
  158. data/test/razorpay/test_document.rb +27 -0
  159. data/test/razorpay/test_fund_account.rb +42 -0
  160. data/test/razorpay/test_iin.rb +23 -0
  161. data/test/razorpay/test_invoice.rb +15 -2
  162. data/test/razorpay/test_item.rb +66 -0
  163. data/test/razorpay/test_oauth_token.rb +105 -0
  164. data/test/razorpay/test_order.rb +66 -1
  165. data/test/razorpay/test_payload_validator.rb +61 -0
  166. data/test/razorpay/test_payment.rb +251 -9
  167. data/test/razorpay/test_payment_link.rb +83 -0
  168. data/test/razorpay/test_plan.rb +2 -2
  169. data/test/razorpay/test_product.rb +67 -0
  170. data/test/razorpay/test_qr_code.rb +63 -0
  171. data/test/razorpay/test_razorpay.rb +19 -2
  172. data/test/razorpay/test_refund.rb +16 -2
  173. data/test/razorpay/test_settlement.rb +76 -0
  174. data/test/razorpay/test_stakeholder.rb +87 -0
  175. data/test/razorpay/test_subscription.rb +72 -9
  176. data/test/razorpay/test_subscription_registration.rb +58 -0
  177. data/test/razorpay/test_token.rb +66 -0
  178. data/test/razorpay/test_transfer.rb +94 -0
  179. data/test/razorpay/test_utility.rb +72 -4
  180. data/test/razorpay/test_virtual_account.rb +64 -17
  181. data/test/razorpay/test_webhook.rb +132 -0
  182. data/test/test_helper.rb +8 -0
  183. metadata +265 -10
  184. data/.travis.yml +0 -22
  185. data/test/razorpay/test_errors.rb +0 -19
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::Document
5
+ class RazorpayDocumentTest < Minitest::Test
6
+ def setup
7
+ @document_id = 'doc_O4KCaSbX4BjA6I'
8
+ # Any request that ends with document/document_id
9
+ stub_get(%r{documents/#{@document_id}$}, 'fake_document')
10
+ end
11
+
12
+ def test_document_should_be_defined
13
+ refute_nil Razorpay::Document
14
+ end
15
+
16
+ def test_document_should_be_defined_exception
17
+ para_attr = {}
18
+ stub_get(%r{documents/#{@document_id}$}, 'document_error')
19
+ assert_raises(Razorpay::Error) do
20
+ document = Razorpay::Document.fetch(@document_id)
21
+ if document.error
22
+ raise Razorpay::Error.new, document.error['code']
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::FundAccount
5
+ class RazorpayFundAccountTest < Minitest::Test
6
+ def setup
7
+ @customer_id = 'cust_J3oSNi1KgzqVEX'
8
+ @fund_account_id = 'fa_J8B38pGr1Tfv8k'
9
+ end
10
+
11
+ def test_fund_account_should_be_defined
12
+ refute_nil Razorpay::FundAccount
13
+ end
14
+
15
+ def test_fund_account_should_be_created
16
+
17
+ param_attr = {
18
+ "customer_id": "cust_Aa000000000001",
19
+ "account_type": "bank_account",
20
+ "bank_account": {
21
+ "name": "Gaurav Kumar",
22
+ "account_number": "11214311215411",
23
+ "ifsc": "HDFC0000053"
24
+ }
25
+ }
26
+
27
+ stub_post(/fund_accounts$/, 'fake_fund_account', param_attr.to_json)
28
+ fund_account = Razorpay::FundAccount.create param_attr.to_json
29
+ assert_equal @customer_id, fund_account.customer_id
30
+ assert_equal @fund_account_id, fund_account.id
31
+ end
32
+
33
+ def test_fetch_all_fund_accounts
34
+
35
+ para_attr = {"customer_id": @customer_id}
36
+ stub_get(/fund_accounts/, 'fund_collection', para_attr.to_json)
37
+ fund_accounts = Razorpay::FundAccount.all(para_attr.to_json)
38
+ assert_instance_of Razorpay::Collection, fund_accounts, 'FundAccounts should be an array'
39
+ assert !fund_accounts.items.empty?, 'FundAccounts should be more than one'
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::Iin
5
+ class RazorpayIinTest < Minitest::Test
6
+ def setup
7
+ @token_id = '411111'
8
+
9
+ # Any request that ends with token/token_id
10
+ stub_get(%r{iins/#{@token_id}$}, 'fake_iin_token')
11
+ end
12
+
13
+ def test_iin_should_be_defined
14
+ refute_nil Razorpay::Iin
15
+ end
16
+
17
+ def test_iin_should_be_fetched
18
+ token = Razorpay::Iin.fetch(@token_id)
19
+ assert_instance_of Razorpay::Iin, token, 'Iin not an instance of Razorpay::Iin class'
20
+ assert_equal @token_id, token.iin, 'token IDs do not match'
21
+ end
22
+ end
23
+ end
@@ -5,7 +5,7 @@ module Razorpay
5
5
  class RazorpayInvoiceTest < Minitest::Test
6
6
  def setup
7
7
  @invoice_id = 'inv_6vRZmJYFAG1mNq'
8
-
8
+ @medium = "email"
9
9
  # Any request that ends with invoices/invoice_id
10
10
  stub_get(%r{invoices/#{@invoice_id}$}, 'fake_invoice')
11
11
  end
@@ -117,7 +117,6 @@ module Razorpay
117
117
  refute_nil invoice.invoice_number
118
118
  end
119
119
 
120
- private
121
120
 
122
121
  def assert_invoice_details(invoice)
123
122
  assert_equal 'cust_6vRXClWqnLhV14', invoice.customer_id
@@ -126,5 +125,19 @@ module Razorpay
126
125
  assert_equal 'Test description', invoice.description
127
126
  assert_equal 'invoice', invoice.type
128
127
  end
128
+
129
+ def test_delete_specific_invoice
130
+ stub_delete(%r{invoices/#{@invoice_id}$}, 'empty')
131
+ invoice = Razorpay::Invoice.delete(@invoice_id)
132
+ assert_instance_of Razorpay::Entity, invoice, 'invoice not an instance of Razorpay::Invoice class'
133
+ refute_nil invoice
134
+ end
135
+
136
+ def test_invoice_notifyBy
137
+ stub_post(%r{invoices/#{@invoice_id}/notify_by/#{@medium}$}, 'success', {})
138
+ invoice = Razorpay::Invoice.notify_by(@invoice_id,@medium)
139
+ assert_instance_of Razorpay::Entity, invoice, 'invoice not an instance of Razorpay::Invoice class'
140
+ assert invoice
141
+ end
129
142
  end
130
143
  end
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::Item
5
+ class RazorpayItemTest < Minitest::Test
6
+ def setup
7
+ @item_id = 'item_JDcbIdX9xojCje'
8
+
9
+ # Any request that ends with items/item_id
10
+ stub_get(%r{items/#{@item_id}$}, 'fake_item')
11
+ stub_get(/items$/, 'item_collection')
12
+ end
13
+
14
+ def test_item_should_be_defined
15
+ refute_nil Razorpay::Item
16
+ end
17
+
18
+ def test_item_should_be_created
19
+
20
+ param_attr = {
21
+ "name": "Book / English August",
22
+ "description": "An indian story, Booker prize winner.",
23
+ "amount": 20000,
24
+ "currency": "INR"
25
+ }
26
+
27
+ stub_post(/items$/, 'fake_item', param_attr.to_json)
28
+ items = Razorpay::Item.create(param_attr.to_json)
29
+ assert_equal @item_id, items.id
30
+ assert_equal true, items.active
31
+ end
32
+
33
+ def test_edit_items
34
+
35
+ param_attr = {
36
+ "name": "Book / English August",
37
+ "description": "An indian story, Booker prize winner.",
38
+ "amount": 20000,
39
+ "currency": "INR"
40
+ }
41
+
42
+ stub_patch(%r{items/#{@item_id}$}, 'fake_item', param_attr.to_json)
43
+ item = Razorpay::Item.edit(@item_id, param_attr.to_json)
44
+ assert_instance_of Razorpay::Entity, item
45
+ assert_equal @item_id, item.id, 'Item IDs do not match'
46
+ end
47
+
48
+ def test_fetch_all_items
49
+ items = Razorpay::Item.all
50
+ assert_instance_of Razorpay::Collection, items, 'Items should be an array'
51
+ refute_empty items.items, 'Items should be more than one'
52
+ end
53
+
54
+ def test_fetch_specific_item
55
+ item = Razorpay::Item.fetch(@item_id)
56
+ assert_instance_of Razorpay::Entity, item
57
+ assert_equal @item_id, item.id, 'Item IDs do not match'
58
+ end
59
+
60
+ def test_delete_item
61
+ stub_delete(%r{items/#{@item_id}$}, 'empty')
62
+ item = Razorpay::Item.delete(@item_id)
63
+ assert_instance_of Razorpay::Entity, item
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,105 @@
1
+ require 'test_helper'
2
+
3
+ module Razorpay
4
+ # Tests for Razorpay::OauthToken
5
+ class RazorpayOAuthTokenTest < Minitest::Test
6
+ class OAuthToken < Razorpay::Entity; end
7
+
8
+ def test_get_auth_url
9
+ options = {
10
+ 'client_id' => '8DXCMTshWSWECc',
11
+ 'redirect_uri' => 'https://example.com/razorpay_callback',
12
+ 'state' => 'NOBYtv8r6c75ex6WZ',
13
+ 'scopes' => ["read_write"]
14
+ }
15
+
16
+ expected_auth_url = "https://auth.razorpay.com/authorize?response_type=code&client_id=8DXCMTshWSWECc&redirect_uri=https%3A%2F%2Fexample.com%2Frazorpay_callback&state=NOBYtv8r6c75ex6WZ&scope%5B%5D=read_write"
17
+ auth_url = Razorpay::OAuthToken.get_auth_url(options)
18
+ assert_equal expected_auth_url, auth_url
19
+ end
20
+
21
+ def test_request_validation_for_get_auth_url
22
+ options = {
23
+ 'client_id' => '8DXCMTshWSWECc',
24
+ 'redirect_uri' => 'https://example.com/razorpay_callback',
25
+ 'scopes' => ["read_write"]
26
+ }
27
+ assert_raises(Razorpay::Error) do
28
+ Razorpay::OAuthToken.get_auth_url(options)
29
+ end
30
+ end
31
+
32
+ def test_get_access_token
33
+ options = {
34
+ 'client_id' => '8DXCMTshWSWECc',
35
+ 'client_secret' => 'AESSECRETKEY',
36
+ 'grant_type' => 'client_credentials',
37
+ 'redirect_uri' => 'http://example.com/razorpay_callback',
38
+ 'mode' => 'test'
39
+ }
40
+ stub_post(/token$/,'fake_oauth_token',options)
41
+ oauth_token = Razorpay::OAuthToken.get_access_token(options)
42
+ assert_instance_of Razorpay::Entity, oauth_token, 'OAuthToken not an instance of Entity class'
43
+ assert_equal 'rzp_test_oauth_9xu1rkZqoXlClS', oauth_token.public_token, 'Public Tokens do not match'
44
+ end
45
+
46
+ def test_get_access_token_validation_failure
47
+ options = {
48
+ 'client_id' => '8DXCMTshWSWECc',
49
+ 'grant_type' => 'client_credentials',
50
+ 'redirect_uri' => 'http://example.com/razorpay_callback',
51
+ 'mode' => 'test'
52
+ }
53
+ assert_raises(Razorpay::Error) do
54
+ Razorpay::OAuthToken.get_access_token(options)
55
+ end
56
+ end
57
+
58
+ def test_refresh_token
59
+ options = {
60
+ 'client_id' => '8DXCMTshWSWECc',
61
+ 'client_secret' => 'AESSECRETKEY',
62
+ 'refresh_token' => 'def5020096e1c470c901d34cd60fa53abdaf3662sa0'
63
+ }
64
+ expected_request_payload = options.merge('grant_type': 'refresh_token')
65
+ stub_post(/token$/,'fake_oauth_token',expected_request_payload)
66
+ oauth_token = Razorpay::OAuthToken.refresh_token(options)
67
+ assert_instance_of Razorpay::Entity, oauth_token, 'OAuthToken not an instance of Entity class'
68
+ assert_equal 'rzp_test_oauth_9xu1rkZqoXlClS', oauth_token.public_token, 'Public Tokens do not match'
69
+ end
70
+
71
+ def test_refresh_token_validation_failure
72
+ options = {
73
+ 'client_id' => '8DXCMTshWSWECc',
74
+ 'refresh_token' => 'def5020096e1c470c901d34cd60fa53abdaf3662sa0'
75
+ }
76
+ assert_raises(Razorpay::Error) do
77
+ Razorpay::OAuthToken.refresh_token(options)
78
+ end
79
+ end
80
+
81
+ def test_revoke_token
82
+ options = {
83
+ 'client_id' => '8DXCMTshWSWECc',
84
+ 'client_secret' => 'AESSECRETKEY',
85
+ 'token_type_hint' => 'access_token',
86
+ 'token' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJKQTFwODVudE1ySEpoQSIsImp0aSI6IkpPZkd0aHFDTmhqQUhTIiwiaWF0IjoxNjUxMTI0NTU0LCJuYmYiOjE2NTExMjQ1NTQsInN1YiI6IiIsImV4cCI6MTY1ODk4Njk1Miw'
87
+ }
88
+ stub_post(/revoke$/,'fake_revoke_token',options)
89
+ oauth_token = Razorpay::OAuthToken.revoke_token(options)
90
+ assert_instance_of Razorpay::Entity, oauth_token, 'OAuthToken not an instance of Entity class'
91
+ assert_equal 'Token Revoked', oauth_token.message, 'Messages do not match'
92
+ end
93
+
94
+ def test_revoke_token_validation_failure
95
+ options = {
96
+ 'client_id' => '8DXCMTshWSWECc',
97
+ 'client_secret' => 'AESSECRETKEY',
98
+ 'token_type_hint' => 'access_token'
99
+ }
100
+ assert_raises(Razorpay::Error) do
101
+ Razorpay::OAuthToken.revoke_token(options)
102
+ end
103
+ end
104
+ end
105
+ end
@@ -5,7 +5,7 @@ module Razorpay
5
5
  class RazorpayOrderTest < Minitest::Test
6
6
  def setup
7
7
  @order_id = 'order_50sX9hGHZJvjjI'
8
-
8
+ @transfer_id = 'trf_DSkl2lXWbiADZG'
9
9
  # Any request that ends with orders/order_id
10
10
  stub_get(%r{orders/#{@order_id}$}, 'fake_order')
11
11
  end
@@ -44,5 +44,70 @@ module Razorpay
44
44
  assert !payments.items.empty?, 'payments should be more than one'
45
45
  assert_equal 'pay_50sbkZA9AcyE5a', payments.items[0]['id'], 'payment id should match'
46
46
  end
47
+
48
+ def test_edit_order
49
+ param_attr = {
50
+ "notes": {
51
+ "key1": "value3",
52
+ "key2": "value2"
53
+ }
54
+ }
55
+
56
+ stub_patch(%r{orders/#{@order_id}$}, 'fake_order', param_attr.to_json)
57
+ order = Razorpay::Order.edit(@order_id, param_attr.to_json)
58
+ assert_instance_of Razorpay::Order, order, 'order not an instance of Razorpay::Order class'
59
+ assert_equal @order_id, order.id, 'order IDs do not match'
60
+ end
61
+
62
+ def test_fetch_order_transfers
63
+ stub_get("#{BASE_URI}/v1/orders/#{@order_id}/?expand[]=transfers&status", 'fake_order_transfers')
64
+ order = Razorpay::Order.fetch_transfer_order(@order_id)
65
+ assert_instance_of Razorpay::Order, order, 'order not an instance of Razorpay::Order class'
66
+ assert_equal @order_id, order.id, 'order IDs do not match'
67
+ refute_empty order.transfers["items"]
68
+ assert_equal @transfer_id, order.transfers["items"][0]["id"]
69
+ end
70
+
71
+ def test_view_rto
72
+ stub_post(%r{orders/#{@order_id}/rto_review$}, 'fake_rto', {})
73
+ order = Razorpay::Order.view_rto(@order_id)
74
+ assert !order.rto_reasons.empty?, 'orders should be more than one'
75
+ end
76
+
77
+ def test_view_rto_exception
78
+ stub_post(%r{orders/#{@order_id}/rto_review$}, 'order_error', {})
79
+ assert_raises(Razorpay::Error) do
80
+ order = Razorpay::Order.view_rto(@order_id)
81
+ if order.error
82
+ raise Razorpay::Error.new, order.error['code']
83
+ end
84
+ end
85
+ end
86
+
87
+ def test_fulfillment
88
+ param_attr = {
89
+ "payment_method": "upi",
90
+ "shipping": {
91
+ "waybill": "123456789",
92
+ "status": "rto",
93
+ "provider": "Bluedart"
94
+ }
95
+ }
96
+
97
+ stub_post(%r{orders/#{@order_id}/fulfillment$}, 'fake_fulfillment', param_attr.to_json)
98
+ order = Razorpay::Order.edit_fulfillment(@order_id, param_attr.to_json)
99
+ assert_equal "upi", order.payment_method, 'order payment method do not match'
100
+ end
101
+
102
+ def test_fulfillment_exception
103
+ para_attr = {}
104
+ stub_post(%r{orders/#{@order_id}/fulfillment$}, 'order_error', para_attr.to_json)
105
+ assert_raises(Razorpay::Error) do
106
+ order = Razorpay::Order.edit_fulfillment(@order_id, para_attr.to_json)
107
+ if order.error
108
+ raise Razorpay::Error.new, order.error['code']
109
+ end
110
+ end
111
+ end
47
112
  end
48
113
  end
@@ -0,0 +1,61 @@
1
+ require 'test_helper'
2
+ require 'razorpay/validation_config'
3
+
4
+ module Razorpay
5
+ # Tests for Razorpay::PayloadValidator
6
+ class RazorpayPayloadValidatorTest < Minitest::Test
7
+ def test_validate_mode
8
+ payload = {
9
+ 'mode1' => 'test',
10
+ 'mode2' => 'live'
11
+ }
12
+ assert_silent do
13
+ Razorpay::PayloadValidator.validate(payload, [
14
+ Razorpay::ValidationConfig.new('mode1', [:mode]),
15
+ Razorpay::ValidationConfig.new('mode2', [:mode]),
16
+ ])
17
+ end
18
+ end
19
+
20
+ def test_mode_validation_failure
21
+ payload = {
22
+ 'mode' => 'testvalue'
23
+ }
24
+ assert_raises(Razorpay::Error) do
25
+ Razorpay::PayloadValidator.validate(payload, [
26
+ Razorpay::ValidationConfig.new('mode', [:mode])
27
+ ])
28
+ end
29
+ end
30
+
31
+ def test_url_validation_failure
32
+ payload = {
33
+ 'redirect_uri' => 'test.com'
34
+ }
35
+ assert_raises(Razorpay::Error) do
36
+ Razorpay::PayloadValidator.validate(payload, [
37
+ Razorpay::ValidationConfig.new('redirect_uri', [:url])
38
+ ])
39
+ end
40
+ end
41
+
42
+ def test_non_null_validation_failure
43
+ assert_raises(Razorpay::Error) do
44
+ Razorpay::PayloadValidator.validate({}, [
45
+ Razorpay::ValidationConfig.new('redirect_uri', [:non_null])
46
+ ])
47
+ end
48
+ end
49
+
50
+ def test_id_validation_failure
51
+ payload = {
52
+ 'client_id' => 'fjidhf'
53
+ }
54
+ assert_raises(Razorpay::Error) do
55
+ Razorpay::PayloadValidator.validate({}, [
56
+ Razorpay::ValidationConfig.new('client_id', [:id])
57
+ ])
58
+ end
59
+ end
60
+ end
61
+ end