mangopay 3.0.25.pre.alpha.pre.20 → 3.0.25
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.
- checksums.yaml +4 -4
- data/.gitignore +28 -28
- data/.rspec +2 -2
- data/.travis.yml +4 -13
- data/Gemfile +2 -2
- data/LICENSE +20 -20
- data/README.md +126 -126
- data/bin/mangopay +9 -9
- data/lib/generators/mangopay/install_generator.rb +60 -60
- data/lib/generators/templates/mangopay.rb.erb +5 -5
- data/lib/mangopay.rb +225 -225
- data/lib/mangopay/authorization_token.rb +88 -88
- data/lib/mangopay/bank_account.rb +38 -38
- data/lib/mangopay/card.rb +8 -8
- data/lib/mangopay/card_registration.rb +9 -9
- data/lib/mangopay/client.rb +74 -74
- data/lib/mangopay/dispute.rb +130 -130
- data/lib/mangopay/errors.rb +61 -61
- data/lib/mangopay/event.rb +18 -18
- data/lib/mangopay/filter_parameters.rb +46 -46
- data/lib/mangopay/hook.rb +9 -9
- data/lib/mangopay/http_calls.rb +85 -85
- data/lib/mangopay/json.rb +14 -14
- data/lib/mangopay/kyc_document.rb +70 -70
- data/lib/mangopay/legal_user.rb +15 -15
- data/lib/mangopay/mandate.rb +32 -32
- data/lib/mangopay/natural_user.rb +14 -14
- data/lib/mangopay/pay_in.rb +85 -85
- data/lib/mangopay/pay_out.rb +14 -14
- data/lib/mangopay/pre_authorization.rb +13 -13
- data/lib/mangopay/refund.rb +7 -7
- data/lib/mangopay/report.rb +17 -17
- data/lib/mangopay/resource.rb +21 -21
- data/lib/mangopay/temp.rb +74 -74
- data/lib/mangopay/transaction.rb +24 -24
- data/lib/mangopay/transfer.rb +9 -9
- data/lib/mangopay/user.rb +43 -43
- data/lib/mangopay/version.rb +3 -3
- data/lib/mangopay/wallet.rb +17 -17
- data/mangopay.gemspec +30 -31
- data/spec/mangopay/authorization_token_spec.rb +70 -70
- data/spec/mangopay/bank_account_spec.rb +97 -97
- data/spec/mangopay/card_registration_spec.rb +73 -73
- data/spec/mangopay/client_spec.rb +110 -110
- data/spec/mangopay/configuration_spec.rb +95 -95
- data/spec/mangopay/dispute_spec.rb +262 -262
- data/spec/mangopay/event_spec.rb +31 -31
- data/spec/mangopay/fetch_filters_spec.rb +63 -63
- data/spec/mangopay/hook_spec.rb +37 -37
- data/spec/mangopay/idempotency_spec.rb +41 -41
- data/spec/mangopay/kyc_document_spec.rb +103 -103
- data/spec/mangopay/log_requests_filter_spec.rb +25 -25
- data/spec/mangopay/mandate_spec.rb +92 -92
- data/spec/mangopay/payin_bankwire_direct_spec.rb +74 -74
- data/spec/mangopay/payin_card_direct_spec.rb +68 -68
- data/spec/mangopay/payin_card_web_spec.rb +38 -38
- data/spec/mangopay/payin_directdebit_direct_spec.rb +37 -37
- data/spec/mangopay/payin_directdebit_web_spec.rb +38 -38
- data/spec/mangopay/payin_paypal_web_spec.rb +38 -38
- data/spec/mangopay/payin_preauthorized_direct_spec.rb +68 -68
- data/spec/mangopay/payout_bankwire_spec.rb +54 -54
- data/spec/mangopay/preauthorization_spec.rb +42 -42
- data/spec/mangopay/refund_spec.rb +21 -21
- data/spec/mangopay/report_spec.rb +39 -39
- data/spec/mangopay/shared_resources.rb +381 -381
- data/spec/mangopay/temp_paymentcard_spec.rb +31 -31
- data/spec/mangopay/transaction_spec.rb +54 -54
- data/spec/mangopay/transfer_spec.rb +69 -69
- data/spec/mangopay/user_spec.rb +137 -137
- data/spec/mangopay/wallet_spec.rb +80 -80
- data/spec/spec_helper.rb +31 -31
- metadata +5 -5
@@ -1,110 +1,110 @@
|
|
1
|
-
describe MangoPay::Client do
|
2
|
-
|
3
|
-
describe 'FETCH' do
|
4
|
-
it 'fetches the current client details' do
|
5
|
-
clnt = MangoPay::Client.fetch
|
6
|
-
expect(clnt['ClientId']).to eq(MangoPay.configuration.client_id)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'UPDATE' do
|
11
|
-
it 'updates the current client details' do
|
12
|
-
clnt = MangoPay::Client.fetch
|
13
|
-
before = clnt['PrimaryThemeColour']
|
14
|
-
after = before == '#aaaaaa' ? '#bbbbbb' : '#aaaaaa' # change the color
|
15
|
-
clnt['PrimaryThemeColour'] = after
|
16
|
-
|
17
|
-
updated = MangoPay::Client.update(clnt)
|
18
|
-
expect(updated['ClientId']).to eq(MangoPay.configuration.client_id)
|
19
|
-
expect(updated['PrimaryThemeColour']).to eq(after)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'UPLOAD LOGO' do
|
24
|
-
it 'accepts Base64 encoded file content' do
|
25
|
-
fnm = __FILE__.sub('.rb', '.png')
|
26
|
-
bts = File.open(fnm, 'rb') { |f| f.read }
|
27
|
-
b64 = Base64.encode64(bts)
|
28
|
-
ret = MangoPay::Client.upload_logo(b64)
|
29
|
-
expect(ret).to be_nil
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'accepts file path' do
|
33
|
-
fnm = __FILE__.sub('.rb', '.png')
|
34
|
-
ret = MangoPay::Client.upload_logo(nil, fnm)
|
35
|
-
expect(ret).to be_nil
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'fails when input string is not base64-encoded' do
|
39
|
-
file = 'any file content...'
|
40
|
-
expect { MangoPay::Client.upload_logo(file) }.to raise_error { |err|
|
41
|
-
expect(err).to be_a MangoPay::ResponseError
|
42
|
-
expect(err.code).to eq '400'
|
43
|
-
expect(err.type).to eq 'param_error'
|
44
|
-
}
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe 'fetch_wallets' do
|
49
|
-
it 'fetches all client wallets' do
|
50
|
-
wlts = MangoPay::Client.fetch_wallets
|
51
|
-
expect(wlts).to be_kind_of(Array)
|
52
|
-
expect(wlts).not_to be_empty
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'fetches all client fees wallets' do
|
56
|
-
wlts = MangoPay::Client.fetch_wallets('fees')
|
57
|
-
expect(wlts).to be_kind_of(Array)
|
58
|
-
expect(wlts).not_to be_empty
|
59
|
-
expect((wlts.map {|m| m['FundsType']}).uniq).to eq(['FEES'])
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'fetches all client credit wallets' do
|
63
|
-
wlts = MangoPay::Client.fetch_wallets('credit')
|
64
|
-
expect(wlts).to be_kind_of(Array)
|
65
|
-
expect(wlts).not_to be_empty
|
66
|
-
expect((wlts.map {|m| m['FundsType']}).uniq).to eq(['CREDIT'])
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe 'fetch_wallet' do
|
71
|
-
it 'fetches one of client wallets by funds type (fees) and currency' do
|
72
|
-
wlt = MangoPay::Client.fetch_wallet('fees', 'EUR')
|
73
|
-
expect(wlt).to be_kind_of(Hash)
|
74
|
-
expect(wlt['FundsType']).to eq('FEES')
|
75
|
-
expect(wlt['Currency']).to eq('EUR')
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'fetches one of client wallets by funds type (credit) and currency' do
|
79
|
-
wlt = MangoPay::Client.fetch_wallet('credit', 'EUR')
|
80
|
-
expect(wlt).to be_kind_of(Hash)
|
81
|
-
expect(wlt['FundsType']).to eq('CREDIT')
|
82
|
-
expect(wlt['Currency']).to eq('EUR')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe 'fetch_wallets_transactions' do
|
87
|
-
it 'fetches transactions for all client wallets' do
|
88
|
-
trns = MangoPay::Client.fetch_wallets_transactions
|
89
|
-
expect(trns).to be_kind_of(Array)
|
90
|
-
expect(trns).not_to be_empty
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe 'fetch_wallets_transactions' do
|
95
|
-
it 'fetches transactions of one of client wallets by funds type (fees) and currency' do
|
96
|
-
trns = MangoPay::Client.fetch_wallet_transactions('fees', 'EUR')
|
97
|
-
expect(trns).to be_kind_of(Array)
|
98
|
-
expect(trns).not_to be_empty
|
99
|
-
expect((trns.map {|m| m['DebitedWalletId']}).uniq).to eq(['FEES_EUR'])
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'fetches transactions of one of client wallets by funds type (credit) and currency' do
|
103
|
-
trns = MangoPay::Client.fetch_wallet_transactions('credit', 'EUR')
|
104
|
-
expect(trns).to be_kind_of(Array)
|
105
|
-
expect(trns).not_to be_empty
|
106
|
-
expect((trns.map {|m| m['DebitedWalletId']}).uniq).to eq(['CREDIT_EUR'])
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
1
|
+
describe MangoPay::Client do
|
2
|
+
|
3
|
+
describe 'FETCH' do
|
4
|
+
it 'fetches the current client details' do
|
5
|
+
clnt = MangoPay::Client.fetch
|
6
|
+
expect(clnt['ClientId']).to eq(MangoPay.configuration.client_id)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'UPDATE' do
|
11
|
+
it 'updates the current client details' do
|
12
|
+
clnt = MangoPay::Client.fetch
|
13
|
+
before = clnt['PrimaryThemeColour']
|
14
|
+
after = before == '#aaaaaa' ? '#bbbbbb' : '#aaaaaa' # change the color
|
15
|
+
clnt['PrimaryThemeColour'] = after
|
16
|
+
|
17
|
+
updated = MangoPay::Client.update(clnt)
|
18
|
+
expect(updated['ClientId']).to eq(MangoPay.configuration.client_id)
|
19
|
+
expect(updated['PrimaryThemeColour']).to eq(after)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'UPLOAD LOGO' do
|
24
|
+
it 'accepts Base64 encoded file content' do
|
25
|
+
fnm = __FILE__.sub('.rb', '.png')
|
26
|
+
bts = File.open(fnm, 'rb') { |f| f.read }
|
27
|
+
b64 = Base64.encode64(bts)
|
28
|
+
ret = MangoPay::Client.upload_logo(b64)
|
29
|
+
expect(ret).to be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'accepts file path' do
|
33
|
+
fnm = __FILE__.sub('.rb', '.png')
|
34
|
+
ret = MangoPay::Client.upload_logo(nil, fnm)
|
35
|
+
expect(ret).to be_nil
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'fails when input string is not base64-encoded' do
|
39
|
+
file = 'any file content...'
|
40
|
+
expect { MangoPay::Client.upload_logo(file) }.to raise_error { |err|
|
41
|
+
expect(err).to be_a MangoPay::ResponseError
|
42
|
+
expect(err.code).to eq '400'
|
43
|
+
expect(err.type).to eq 'param_error'
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'fetch_wallets' do
|
49
|
+
it 'fetches all client wallets' do
|
50
|
+
wlts = MangoPay::Client.fetch_wallets
|
51
|
+
expect(wlts).to be_kind_of(Array)
|
52
|
+
expect(wlts).not_to be_empty
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'fetches all client fees wallets' do
|
56
|
+
wlts = MangoPay::Client.fetch_wallets('fees')
|
57
|
+
expect(wlts).to be_kind_of(Array)
|
58
|
+
expect(wlts).not_to be_empty
|
59
|
+
expect((wlts.map {|m| m['FundsType']}).uniq).to eq(['FEES'])
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'fetches all client credit wallets' do
|
63
|
+
wlts = MangoPay::Client.fetch_wallets('credit')
|
64
|
+
expect(wlts).to be_kind_of(Array)
|
65
|
+
expect(wlts).not_to be_empty
|
66
|
+
expect((wlts.map {|m| m['FundsType']}).uniq).to eq(['CREDIT'])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'fetch_wallet' do
|
71
|
+
it 'fetches one of client wallets by funds type (fees) and currency' do
|
72
|
+
wlt = MangoPay::Client.fetch_wallet('fees', 'EUR')
|
73
|
+
expect(wlt).to be_kind_of(Hash)
|
74
|
+
expect(wlt['FundsType']).to eq('FEES')
|
75
|
+
expect(wlt['Currency']).to eq('EUR')
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'fetches one of client wallets by funds type (credit) and currency' do
|
79
|
+
wlt = MangoPay::Client.fetch_wallet('credit', 'EUR')
|
80
|
+
expect(wlt).to be_kind_of(Hash)
|
81
|
+
expect(wlt['FundsType']).to eq('CREDIT')
|
82
|
+
expect(wlt['Currency']).to eq('EUR')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'fetch_wallets_transactions' do
|
87
|
+
it 'fetches transactions for all client wallets' do
|
88
|
+
trns = MangoPay::Client.fetch_wallets_transactions
|
89
|
+
expect(trns).to be_kind_of(Array)
|
90
|
+
expect(trns).not_to be_empty
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe 'fetch_wallets_transactions' do
|
95
|
+
it 'fetches transactions of one of client wallets by funds type (fees) and currency' do
|
96
|
+
trns = MangoPay::Client.fetch_wallet_transactions('fees', 'EUR')
|
97
|
+
expect(trns).to be_kind_of(Array)
|
98
|
+
expect(trns).not_to be_empty
|
99
|
+
expect((trns.map {|m| m['DebitedWalletId']}).uniq).to eq(['FEES_EUR'])
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'fetches transactions of one of client wallets by funds type (credit) and currency' do
|
103
|
+
trns = MangoPay::Client.fetch_wallet_transactions('credit', 'EUR')
|
104
|
+
expect(trns).to be_kind_of(Array)
|
105
|
+
expect(trns).not_to be_empty
|
106
|
+
expect((trns.map {|m| m['DebitedWalletId']}).uniq).to eq(['CREDIT_EUR'])
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
@@ -1,95 +1,95 @@
|
|
1
|
-
describe MangoPay::Configuration do
|
2
|
-
|
3
|
-
it 'fails when calling with wrong client credentials' do
|
4
|
-
expect {
|
5
|
-
c = MangoPay.configuration
|
6
|
-
c.client_id = 'test_asd'
|
7
|
-
c.client_passphrase = '00000'
|
8
|
-
MangoPay::User.fetch()
|
9
|
-
}.to raise_error(MangoPay::ResponseError)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'goes ok when calling with correct client credentials' do
|
13
|
-
reset_mangopay_configuration
|
14
|
-
users = MangoPay::User.fetch()
|
15
|
-
expect(users).to be_kind_of(Array)
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'with multithreading' do
|
19
|
-
after :all do
|
20
|
-
reset_mangopay_configuration
|
21
|
-
end
|
22
|
-
|
23
|
-
before :all do
|
24
|
-
MangoPay.configuration.client_id = 'default'
|
25
|
-
|
26
|
-
thread_a = Thread.new do
|
27
|
-
@default_client_id = MangoPay.configuration.client_id
|
28
|
-
|
29
|
-
MangoPay.configuration.client_id = 'a'
|
30
|
-
|
31
|
-
# Test #configuration= & #configuration
|
32
|
-
config = MangoPay::Configuration.new
|
33
|
-
config.client_id = 'a'
|
34
|
-
MangoPay.configuration = config
|
35
|
-
@before_client_id = MangoPay.configuration.client_id
|
36
|
-
|
37
|
-
# Test multithreading
|
38
|
-
sleep 1 # Waits for thread B to do its business
|
39
|
-
@after_client_id = MangoPay.configuration.client_id
|
40
|
-
|
41
|
-
# Test #configure
|
42
|
-
MangoPay.configure do |c|
|
43
|
-
c.client_id = 'configured'
|
44
|
-
end
|
45
|
-
@configured_client_id = MangoPay.configuration.client_id
|
46
|
-
|
47
|
-
# Test #with_config
|
48
|
-
@before_with_config_client_id = MangoPay.configuration.client_id
|
49
|
-
config = MangoPay::Configuration.new
|
50
|
-
config.client_id = 'with_config'
|
51
|
-
MangoPay.with_configuration(config) do
|
52
|
-
@with_config_client_id = MangoPay.configuration.client_id
|
53
|
-
end
|
54
|
-
@after_with_config_client_id = MangoPay.configuration.client_id
|
55
|
-
end
|
56
|
-
|
57
|
-
thread_b = Thread.new do
|
58
|
-
# Thread A does its business
|
59
|
-
sleep 0.5
|
60
|
-
@thread_b_default_client_id = MangoPay.configuration.client_id
|
61
|
-
|
62
|
-
# Will it impact the configuration in thread A ?
|
63
|
-
MangoPay.configuration.client_id = 'b'
|
64
|
-
end
|
65
|
-
|
66
|
-
# Wait for both threads to complete
|
67
|
-
thread_a.join
|
68
|
-
thread_b.join
|
69
|
-
end
|
70
|
-
|
71
|
-
it '#configuration & #configuration=' do
|
72
|
-
expect(@before_client_id).to eq('a')
|
73
|
-
end
|
74
|
-
|
75
|
-
it '#configure' do
|
76
|
-
expect(@configured_client_id).to eq('configured')
|
77
|
-
end
|
78
|
-
|
79
|
-
it '#with_configuration' do
|
80
|
-
expect(@with_config_client_id).to eq('with_config')
|
81
|
-
expect(@after_with_config_client_id).to eq(@before_with_config_client_id)
|
82
|
-
end
|
83
|
-
|
84
|
-
context "since configurations are thread-local," do
|
85
|
-
it 'threads get the last configuration set as default config.' do
|
86
|
-
expect(@default_client_id).to eq('default')
|
87
|
-
expect(@thread_b_default_client_id).to eq('a')
|
88
|
-
end
|
89
|
-
|
90
|
-
it "configurations are isolated from other threads' activity." do
|
91
|
-
expect(@after_client_id).to eq('a')
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
1
|
+
describe MangoPay::Configuration do
|
2
|
+
|
3
|
+
it 'fails when calling with wrong client credentials' do
|
4
|
+
expect {
|
5
|
+
c = MangoPay.configuration
|
6
|
+
c.client_id = 'test_asd'
|
7
|
+
c.client_passphrase = '00000'
|
8
|
+
MangoPay::User.fetch()
|
9
|
+
}.to raise_error(MangoPay::ResponseError)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'goes ok when calling with correct client credentials' do
|
13
|
+
reset_mangopay_configuration
|
14
|
+
users = MangoPay::User.fetch()
|
15
|
+
expect(users).to be_kind_of(Array)
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with multithreading' do
|
19
|
+
after :all do
|
20
|
+
reset_mangopay_configuration
|
21
|
+
end
|
22
|
+
|
23
|
+
before :all do
|
24
|
+
MangoPay.configuration.client_id = 'default'
|
25
|
+
|
26
|
+
thread_a = Thread.new do
|
27
|
+
@default_client_id = MangoPay.configuration.client_id
|
28
|
+
|
29
|
+
MangoPay.configuration.client_id = 'a'
|
30
|
+
|
31
|
+
# Test #configuration= & #configuration
|
32
|
+
config = MangoPay::Configuration.new
|
33
|
+
config.client_id = 'a'
|
34
|
+
MangoPay.configuration = config
|
35
|
+
@before_client_id = MangoPay.configuration.client_id
|
36
|
+
|
37
|
+
# Test multithreading
|
38
|
+
sleep 1 # Waits for thread B to do its business
|
39
|
+
@after_client_id = MangoPay.configuration.client_id
|
40
|
+
|
41
|
+
# Test #configure
|
42
|
+
MangoPay.configure do |c|
|
43
|
+
c.client_id = 'configured'
|
44
|
+
end
|
45
|
+
@configured_client_id = MangoPay.configuration.client_id
|
46
|
+
|
47
|
+
# Test #with_config
|
48
|
+
@before_with_config_client_id = MangoPay.configuration.client_id
|
49
|
+
config = MangoPay::Configuration.new
|
50
|
+
config.client_id = 'with_config'
|
51
|
+
MangoPay.with_configuration(config) do
|
52
|
+
@with_config_client_id = MangoPay.configuration.client_id
|
53
|
+
end
|
54
|
+
@after_with_config_client_id = MangoPay.configuration.client_id
|
55
|
+
end
|
56
|
+
|
57
|
+
thread_b = Thread.new do
|
58
|
+
# Thread A does its business
|
59
|
+
sleep 0.5
|
60
|
+
@thread_b_default_client_id = MangoPay.configuration.client_id
|
61
|
+
|
62
|
+
# Will it impact the configuration in thread A ?
|
63
|
+
MangoPay.configuration.client_id = 'b'
|
64
|
+
end
|
65
|
+
|
66
|
+
# Wait for both threads to complete
|
67
|
+
thread_a.join
|
68
|
+
thread_b.join
|
69
|
+
end
|
70
|
+
|
71
|
+
it '#configuration & #configuration=' do
|
72
|
+
expect(@before_client_id).to eq('a')
|
73
|
+
end
|
74
|
+
|
75
|
+
it '#configure' do
|
76
|
+
expect(@configured_client_id).to eq('configured')
|
77
|
+
end
|
78
|
+
|
79
|
+
it '#with_configuration' do
|
80
|
+
expect(@with_config_client_id).to eq('with_config')
|
81
|
+
expect(@after_with_config_client_id).to eq(@before_with_config_client_id)
|
82
|
+
end
|
83
|
+
|
84
|
+
context "since configurations are thread-local," do
|
85
|
+
it 'threads get the last configuration set as default config.' do
|
86
|
+
expect(@default_client_id).to eq('default')
|
87
|
+
expect(@thread_b_default_client_id).to eq('a')
|
88
|
+
end
|
89
|
+
|
90
|
+
it "configurations are isolated from other threads' activity." do
|
91
|
+
expect(@after_client_id).to eq('a')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -1,262 +1,262 @@
|
|
1
|
-
describe MangoPay::Dispute do
|
2
|
-
|
3
|
-
=begin
|
4
|
-
comment out all Dispute related unit tests please
|
5
|
-
these require manual actions on our side
|
6
|
-
and it's infact not suitable like that
|
7
|
-
|
8
|
-
# IMPORTANT NOTE!
|
9
|
-
#
|
10
|
-
# Due to the fact the disputes CANNOT be created on user's side,
|
11
|
-
# a special approach in testing is needed.
|
12
|
-
# In order to get the tests below pass, a bunch of disputes have
|
13
|
-
# to be prepared on the API server side - if they're not, you can
|
14
|
-
# just skip these tests, as they won't pass.
|
15
|
-
before(:each) do
|
16
|
-
@disputes = MangoPay::Dispute.fetch({'page' => 1, 'per_page' => 100})
|
17
|
-
end
|
18
|
-
|
19
|
-
describe 'FETCH' do
|
20
|
-
it 'fetches disputes' do
|
21
|
-
expect(@disputes).to be_kind_of(Array)
|
22
|
-
expect(@disputes).not_to be_empty
|
23
|
-
end
|
24
|
-
it 'fetches a dispute' do
|
25
|
-
id = @disputes.first['Id']
|
26
|
-
dispute = MangoPay::Dispute.fetch(id)
|
27
|
-
expect(dispute['Id']).to eq(id)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe 'TRANSACTIONS' do
|
32
|
-
it 'fetches transactions for dispute' do
|
33
|
-
dispute = @disputes.find { |d| d['DisputeType'] == 'NOT_CONTESTABLE' }
|
34
|
-
id = dispute['Id']
|
35
|
-
transactions = MangoPay::Dispute.transactions(id, {'per_page' => 1})
|
36
|
-
expect(transactions).to be_kind_of(Array)
|
37
|
-
expect(transactions).not_to be_empty
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'FETCH FOR USER AND WALLET' do
|
42
|
-
it 'fetches disputes for user' do
|
43
|
-
dispute = @disputes.find { |d| d['DisputeType'] == 'NOT_CONTESTABLE' }
|
44
|
-
id = dispute['Id']
|
45
|
-
transactions = MangoPay::Dispute.transactions(id, {'per_page' => 1})
|
46
|
-
user_id = transactions[0]['AuthorId']
|
47
|
-
disputes = MangoPay::Dispute.fetch_for_user(user_id, {'per_page' => 1})
|
48
|
-
expect(disputes).to be_kind_of(Array)
|
49
|
-
expect(disputes).not_to be_empty
|
50
|
-
end
|
51
|
-
it 'fetches disputes for wallet' do
|
52
|
-
dispute = @disputes.find {|disp| disp['InitialTransactionId'] != nil}
|
53
|
-
expect(dispute).not_to be_nil, "Cannot test fetching disputes for wallet because there's no disputes with transaction ID in the disputes list."
|
54
|
-
payin = MangoPay::PayIn.fetch(dispute['InitialTransactionId'])
|
55
|
-
wallet_id = payin['CreditedWalletId']
|
56
|
-
disputes = MangoPay::Dispute.fetch_for_wallet(wallet_id, {'per_page' => 1})
|
57
|
-
expect(disputes).to be_kind_of(Array)
|
58
|
-
expect(disputes).not_to be_empty
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe 'UPDATE' do
|
63
|
-
it 'updates a dispute' do
|
64
|
-
dispute = @disputes.first
|
65
|
-
id = dispute['Id']
|
66
|
-
new_tag = dispute['Tag'] + '.com'
|
67
|
-
changed_dispute = MangoPay::Dispute.update(id, {Tag: new_tag})
|
68
|
-
expect(changed_dispute['Tag']).to eq(new_tag)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe 'FETCH REPUDIATION' do
|
73
|
-
it 'fetches a repudiation' do
|
74
|
-
dispute = @disputes.find {|disp| disp['InitialTransactionId'] != nil && disp['DisputeType'] == 'NOT_CONTESTABLE'}
|
75
|
-
expect(dispute).not_to be_nil, "Cannot test closing dispute because there's no not contestable disputes with transaction ID in the disputes list."
|
76
|
-
transactions = MangoPay::Dispute.transactions(dispute['Id'], {'per_page' => 1})
|
77
|
-
repudiation_id = transactions[0]['Id']
|
78
|
-
repudiation = MangoPay::Dispute.fetch_repudiation(repudiation_id)
|
79
|
-
expect(repudiation['Id']).to eq(repudiation_id)
|
80
|
-
expect(repudiation['Nature']).to eq('REPUDIATION')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe 'CREATE AND FETCH SETTLEMENT TRANSFER' do
|
85
|
-
it 'creates and fetches settlement transfer' do
|
86
|
-
dispute = @disputes.find {|disp| disp['Status'] == 'CLOSED' && disp['DisputeType'] == 'NOT_CONTESTABLE'}
|
87
|
-
expect(dispute).not_to be_nil, "Cannot test creating settlement transfer because there's no closed, not contestable disputes in the disputes list."
|
88
|
-
transactions = MangoPay::Dispute.transactions(dispute['Id'], {'per_page' => 1})
|
89
|
-
repudiation_id = transactions[0]['Id']
|
90
|
-
repudiation = MangoPay::Dispute.fetch_repudiation(repudiation_id)
|
91
|
-
params = {
|
92
|
-
AuthorId: repudiation['AuthorId'],
|
93
|
-
DebitedFunds: {Currency: 'EUR', Amount: 1},
|
94
|
-
Fees: {Currency: 'EUR', Amount: 0},
|
95
|
-
Tag: 'Custom tag data'
|
96
|
-
}
|
97
|
-
|
98
|
-
transfer = MangoPay::Dispute.create_settlement_transfer(repudiation_id, params)
|
99
|
-
expect(transfer['Type']).to eq('TRANSFER')
|
100
|
-
expect(transfer['Nature']).to eq('SETTLEMENT')
|
101
|
-
|
102
|
-
fetched_transfer = MangoPay::Dispute.fetch_settlement_transfer(transfer['Id'])
|
103
|
-
expect(fetched_transfer['Id']).to eq(transfer['Id'])
|
104
|
-
expect(fetched_transfer['CreationDate']).to eq(transfer['CreationDate'])
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe 'DISPUTE DOCUMENTS API' do
|
109
|
-
|
110
|
-
def find_dispute
|
111
|
-
dispute = @disputes.find {|disp| ['PENDING_CLIENT_ACTION', 'REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status'])}
|
112
|
-
expect(dispute).not_to be_nil, "Cannot test dispute document API because there's no dispute with expected status in the disputes list."
|
113
|
-
dispute
|
114
|
-
end
|
115
|
-
|
116
|
-
def create_doc(dispute = nil)
|
117
|
-
no_dispute_passed = dispute.nil?
|
118
|
-
dispute = find_dispute if no_dispute_passed
|
119
|
-
params = { Type: 'DELIVERY_PROOF', Tag: 'Custom tag data' }
|
120
|
-
doc = MangoPay::Dispute.create_document(dispute['Id'], params)
|
121
|
-
doc['dispute'] = dispute if no_dispute_passed # add it for testing purposes
|
122
|
-
doc
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'creates dispute document' do
|
126
|
-
doc = create_doc
|
127
|
-
expect(doc['Type']).to eq('DELIVERY_PROOF')
|
128
|
-
expect(doc['Tag']).to eq('Custom tag data')
|
129
|
-
expect(doc['Status']).to eq('CREATED')
|
130
|
-
end
|
131
|
-
|
132
|
-
it 'fetches dispute document' do
|
133
|
-
created_doc = create_doc
|
134
|
-
fetched_doc = MangoPay::Dispute.fetch_document(created_doc['Id'])
|
135
|
-
fields = ['Id', 'Type', 'Tag', 'Status', 'CreationDate', 'RefusedReasonType', 'RefusedReasonMessage']
|
136
|
-
fields.each do |field|
|
137
|
-
expect(fetched_doc[field]).to eq(created_doc[field])
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
it 'updates dispute document' do
|
142
|
-
created_doc = create_doc
|
143
|
-
changed_doc = MangoPay::Dispute.update_document(created_doc['dispute']['Id'], created_doc['Id'], {
|
144
|
-
Status: 'VALIDATION_ASKED'
|
145
|
-
})
|
146
|
-
expect(changed_doc['Id']).to eq(created_doc['Id'])
|
147
|
-
expect(changed_doc['Status']).to eq('VALIDATION_ASKED')
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'fetches a list of documents' do
|
151
|
-
disp = @disputes.find {|disp| disp['Status'] == 'SUBMITTED'}
|
152
|
-
disp = test_contest_dispute if disp == nil
|
153
|
-
expect(disp).not_to be_nil, "Cannot test fetching dispute documents because there's no dispute with expected status in the disputes list."
|
154
|
-
|
155
|
-
doc1 = create_doc(disp)
|
156
|
-
doc2 = create_doc(disp) # for the same dispute
|
157
|
-
|
158
|
-
filters = {'per_page' => 2, 'sort' => 'CreationDate:desc'}
|
159
|
-
|
160
|
-
# fetch last 2 docs for the dispute
|
161
|
-
docs = MangoPay::Dispute.fetch_documents(disp['Id'], filters)
|
162
|
-
expect(docs).to be_kind_of(Array)
|
163
|
-
expect(docs.count).to eq 2 # exactly 2 as pagiantion requested
|
164
|
-
# all 2 are at top as lastly created
|
165
|
-
# but may share the same CreationDate
|
166
|
-
# so the order between them is undetermined
|
167
|
-
expect(docs).to include(doc1, doc2)
|
168
|
-
|
169
|
-
# fetch all docs ever
|
170
|
-
docs = MangoPay::Dispute.fetch_documents()
|
171
|
-
expect(docs).to be_kind_of(Array)
|
172
|
-
expect(docs.count).to be >= 2
|
173
|
-
|
174
|
-
# fetch last 2 docs ever (sorting by date descending)
|
175
|
-
docs = MangoPay::Dispute.fetch_documents(nil, filters)
|
176
|
-
expect(docs).to be_kind_of(Array)
|
177
|
-
expect(docs.count).to eq 2 # exactly 2 as pagiantion requested
|
178
|
-
expect(docs).to include(doc1, doc2)
|
179
|
-
end
|
180
|
-
|
181
|
-
def create_doc_page(file)
|
182
|
-
disp = find_dispute
|
183
|
-
doc = create_doc(disp)
|
184
|
-
MangoPay::Dispute.create_document_page(disp['Id'], doc['Id'], file)
|
185
|
-
end
|
186
|
-
|
187
|
-
it 'create_document_page accepts Base64 encoded file content' do
|
188
|
-
fnm = __FILE__.sub('.rb', '.png')
|
189
|
-
bts = File.open(fnm, 'rb') { |f| f.read }
|
190
|
-
b64 = Base64.encode64(bts)
|
191
|
-
ret = create_doc_page(b64)
|
192
|
-
expect(ret).to be_nil
|
193
|
-
end
|
194
|
-
|
195
|
-
it 'create_document_page accepts file path' do
|
196
|
-
fnm = __FILE__.sub('.rb', '.png')
|
197
|
-
disp = find_dispute
|
198
|
-
doc = create_doc(disp)
|
199
|
-
ret = MangoPay::Dispute.create_document_page(disp['Id'], doc['Id'], nil, fnm)
|
200
|
-
expect(ret).to be_nil
|
201
|
-
end
|
202
|
-
|
203
|
-
it 'create_document_page fails when input string is not base64-encoded' do
|
204
|
-
file = 'any file content...'
|
205
|
-
expect { create_doc_page(file) }.to raise_error { |err|
|
206
|
-
expect(err).to be_a MangoPay::ResponseError
|
207
|
-
expect(err.code).to eq '400'
|
208
|
-
expect(err.type).to eq 'param_error'
|
209
|
-
}
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_contest_dispute
|
214
|
-
dispute = @disputes.find do |disp|
|
215
|
-
['PENDING_CLIENT_ACTION', 'REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status']) &&
|
216
|
-
['CONTESTABLE', 'RETRIEVAL'].include?(disp['DisputeType'])
|
217
|
-
end
|
218
|
-
expect(dispute).not_to be_nil, "Cannot test contesting dispute because there's no available disputes with expected status and type in the disputes list."
|
219
|
-
id = dispute['Id']
|
220
|
-
contested_funds = dispute['Status'] == 'PENDING_CLIENT_ACTION' ? { Amount: 10, Currency: 'EUR' } : nil;
|
221
|
-
changed_dispute = MangoPay::Dispute.contest(id, contested_funds)
|
222
|
-
expect(changed_dispute['Id']).to eq(id)
|
223
|
-
expect(changed_dispute['Status']).to eq('SUBMITTED')
|
224
|
-
changed_dispute
|
225
|
-
end
|
226
|
-
|
227
|
-
describe 'CONTEST' do
|
228
|
-
it 'contests a dispute' do
|
229
|
-
test_contest_dispute
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
describe 'RESUBMIT' do
|
234
|
-
it 'resubmits a dispute' do
|
235
|
-
dispute = @disputes.find do |disp|
|
236
|
-
['REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status'])
|
237
|
-
end
|
238
|
-
expect(dispute).not_to be_nil, "Cannot test resubmiting dispute because there's no available disputes with expected status in the disputes list."
|
239
|
-
id = dispute['Id']
|
240
|
-
changed_dispute = MangoPay::Dispute.resubmit(id)
|
241
|
-
expect(changed_dispute['Id']).to eq(id)
|
242
|
-
expect(changed_dispute['Status']).to eq('SUBMITTED')
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
describe 'CLOSE' do
|
247
|
-
it 'closes a dispute' do
|
248
|
-
dispute = @disputes.find do |disp|
|
249
|
-
['PENDING_CLIENT_ACTION', 'REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status']) &&
|
250
|
-
['CONTESTABLE', 'RETRIEVAL'].include?(disp['DisputeType'])
|
251
|
-
end
|
252
|
-
expect(dispute).not_to be_nil, "Cannot test closing dispute because there's no available disputes with expected status in the disputes list."
|
253
|
-
id = dispute['Id']
|
254
|
-
changed_dispute = MangoPay::Dispute.close(id)
|
255
|
-
expect(changed_dispute['Id']).to eq(id)
|
256
|
-
expect(changed_dispute['Status']).to eq('CLOSED')
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
=end
|
261
|
-
|
262
|
-
end
|
1
|
+
describe MangoPay::Dispute do
|
2
|
+
|
3
|
+
=begin
|
4
|
+
comment out all Dispute related unit tests please
|
5
|
+
these require manual actions on our side
|
6
|
+
and it's infact not suitable like that
|
7
|
+
|
8
|
+
# IMPORTANT NOTE!
|
9
|
+
#
|
10
|
+
# Due to the fact the disputes CANNOT be created on user's side,
|
11
|
+
# a special approach in testing is needed.
|
12
|
+
# In order to get the tests below pass, a bunch of disputes have
|
13
|
+
# to be prepared on the API server side - if they're not, you can
|
14
|
+
# just skip these tests, as they won't pass.
|
15
|
+
before(:each) do
|
16
|
+
@disputes = MangoPay::Dispute.fetch({'page' => 1, 'per_page' => 100})
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'FETCH' do
|
20
|
+
it 'fetches disputes' do
|
21
|
+
expect(@disputes).to be_kind_of(Array)
|
22
|
+
expect(@disputes).not_to be_empty
|
23
|
+
end
|
24
|
+
it 'fetches a dispute' do
|
25
|
+
id = @disputes.first['Id']
|
26
|
+
dispute = MangoPay::Dispute.fetch(id)
|
27
|
+
expect(dispute['Id']).to eq(id)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'TRANSACTIONS' do
|
32
|
+
it 'fetches transactions for dispute' do
|
33
|
+
dispute = @disputes.find { |d| d['DisputeType'] == 'NOT_CONTESTABLE' }
|
34
|
+
id = dispute['Id']
|
35
|
+
transactions = MangoPay::Dispute.transactions(id, {'per_page' => 1})
|
36
|
+
expect(transactions).to be_kind_of(Array)
|
37
|
+
expect(transactions).not_to be_empty
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'FETCH FOR USER AND WALLET' do
|
42
|
+
it 'fetches disputes for user' do
|
43
|
+
dispute = @disputes.find { |d| d['DisputeType'] == 'NOT_CONTESTABLE' }
|
44
|
+
id = dispute['Id']
|
45
|
+
transactions = MangoPay::Dispute.transactions(id, {'per_page' => 1})
|
46
|
+
user_id = transactions[0]['AuthorId']
|
47
|
+
disputes = MangoPay::Dispute.fetch_for_user(user_id, {'per_page' => 1})
|
48
|
+
expect(disputes).to be_kind_of(Array)
|
49
|
+
expect(disputes).not_to be_empty
|
50
|
+
end
|
51
|
+
it 'fetches disputes for wallet' do
|
52
|
+
dispute = @disputes.find {|disp| disp['InitialTransactionId'] != nil}
|
53
|
+
expect(dispute).not_to be_nil, "Cannot test fetching disputes for wallet because there's no disputes with transaction ID in the disputes list."
|
54
|
+
payin = MangoPay::PayIn.fetch(dispute['InitialTransactionId'])
|
55
|
+
wallet_id = payin['CreditedWalletId']
|
56
|
+
disputes = MangoPay::Dispute.fetch_for_wallet(wallet_id, {'per_page' => 1})
|
57
|
+
expect(disputes).to be_kind_of(Array)
|
58
|
+
expect(disputes).not_to be_empty
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'UPDATE' do
|
63
|
+
it 'updates a dispute' do
|
64
|
+
dispute = @disputes.first
|
65
|
+
id = dispute['Id']
|
66
|
+
new_tag = dispute['Tag'] + '.com'
|
67
|
+
changed_dispute = MangoPay::Dispute.update(id, {Tag: new_tag})
|
68
|
+
expect(changed_dispute['Tag']).to eq(new_tag)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'FETCH REPUDIATION' do
|
73
|
+
it 'fetches a repudiation' do
|
74
|
+
dispute = @disputes.find {|disp| disp['InitialTransactionId'] != nil && disp['DisputeType'] == 'NOT_CONTESTABLE'}
|
75
|
+
expect(dispute).not_to be_nil, "Cannot test closing dispute because there's no not contestable disputes with transaction ID in the disputes list."
|
76
|
+
transactions = MangoPay::Dispute.transactions(dispute['Id'], {'per_page' => 1})
|
77
|
+
repudiation_id = transactions[0]['Id']
|
78
|
+
repudiation = MangoPay::Dispute.fetch_repudiation(repudiation_id)
|
79
|
+
expect(repudiation['Id']).to eq(repudiation_id)
|
80
|
+
expect(repudiation['Nature']).to eq('REPUDIATION')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'CREATE AND FETCH SETTLEMENT TRANSFER' do
|
85
|
+
it 'creates and fetches settlement transfer' do
|
86
|
+
dispute = @disputes.find {|disp| disp['Status'] == 'CLOSED' && disp['DisputeType'] == 'NOT_CONTESTABLE'}
|
87
|
+
expect(dispute).not_to be_nil, "Cannot test creating settlement transfer because there's no closed, not contestable disputes in the disputes list."
|
88
|
+
transactions = MangoPay::Dispute.transactions(dispute['Id'], {'per_page' => 1})
|
89
|
+
repudiation_id = transactions[0]['Id']
|
90
|
+
repudiation = MangoPay::Dispute.fetch_repudiation(repudiation_id)
|
91
|
+
params = {
|
92
|
+
AuthorId: repudiation['AuthorId'],
|
93
|
+
DebitedFunds: {Currency: 'EUR', Amount: 1},
|
94
|
+
Fees: {Currency: 'EUR', Amount: 0},
|
95
|
+
Tag: 'Custom tag data'
|
96
|
+
}
|
97
|
+
|
98
|
+
transfer = MangoPay::Dispute.create_settlement_transfer(repudiation_id, params)
|
99
|
+
expect(transfer['Type']).to eq('TRANSFER')
|
100
|
+
expect(transfer['Nature']).to eq('SETTLEMENT')
|
101
|
+
|
102
|
+
fetched_transfer = MangoPay::Dispute.fetch_settlement_transfer(transfer['Id'])
|
103
|
+
expect(fetched_transfer['Id']).to eq(transfer['Id'])
|
104
|
+
expect(fetched_transfer['CreationDate']).to eq(transfer['CreationDate'])
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe 'DISPUTE DOCUMENTS API' do
|
109
|
+
|
110
|
+
def find_dispute
|
111
|
+
dispute = @disputes.find {|disp| ['PENDING_CLIENT_ACTION', 'REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status'])}
|
112
|
+
expect(dispute).not_to be_nil, "Cannot test dispute document API because there's no dispute with expected status in the disputes list."
|
113
|
+
dispute
|
114
|
+
end
|
115
|
+
|
116
|
+
def create_doc(dispute = nil)
|
117
|
+
no_dispute_passed = dispute.nil?
|
118
|
+
dispute = find_dispute if no_dispute_passed
|
119
|
+
params = { Type: 'DELIVERY_PROOF', Tag: 'Custom tag data' }
|
120
|
+
doc = MangoPay::Dispute.create_document(dispute['Id'], params)
|
121
|
+
doc['dispute'] = dispute if no_dispute_passed # add it for testing purposes
|
122
|
+
doc
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'creates dispute document' do
|
126
|
+
doc = create_doc
|
127
|
+
expect(doc['Type']).to eq('DELIVERY_PROOF')
|
128
|
+
expect(doc['Tag']).to eq('Custom tag data')
|
129
|
+
expect(doc['Status']).to eq('CREATED')
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'fetches dispute document' do
|
133
|
+
created_doc = create_doc
|
134
|
+
fetched_doc = MangoPay::Dispute.fetch_document(created_doc['Id'])
|
135
|
+
fields = ['Id', 'Type', 'Tag', 'Status', 'CreationDate', 'RefusedReasonType', 'RefusedReasonMessage']
|
136
|
+
fields.each do |field|
|
137
|
+
expect(fetched_doc[field]).to eq(created_doc[field])
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'updates dispute document' do
|
142
|
+
created_doc = create_doc
|
143
|
+
changed_doc = MangoPay::Dispute.update_document(created_doc['dispute']['Id'], created_doc['Id'], {
|
144
|
+
Status: 'VALIDATION_ASKED'
|
145
|
+
})
|
146
|
+
expect(changed_doc['Id']).to eq(created_doc['Id'])
|
147
|
+
expect(changed_doc['Status']).to eq('VALIDATION_ASKED')
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'fetches a list of documents' do
|
151
|
+
disp = @disputes.find {|disp| disp['Status'] == 'SUBMITTED'}
|
152
|
+
disp = test_contest_dispute if disp == nil
|
153
|
+
expect(disp).not_to be_nil, "Cannot test fetching dispute documents because there's no dispute with expected status in the disputes list."
|
154
|
+
|
155
|
+
doc1 = create_doc(disp)
|
156
|
+
doc2 = create_doc(disp) # for the same dispute
|
157
|
+
|
158
|
+
filters = {'per_page' => 2, 'sort' => 'CreationDate:desc'}
|
159
|
+
|
160
|
+
# fetch last 2 docs for the dispute
|
161
|
+
docs = MangoPay::Dispute.fetch_documents(disp['Id'], filters)
|
162
|
+
expect(docs).to be_kind_of(Array)
|
163
|
+
expect(docs.count).to eq 2 # exactly 2 as pagiantion requested
|
164
|
+
# all 2 are at top as lastly created
|
165
|
+
# but may share the same CreationDate
|
166
|
+
# so the order between them is undetermined
|
167
|
+
expect(docs).to include(doc1, doc2)
|
168
|
+
|
169
|
+
# fetch all docs ever
|
170
|
+
docs = MangoPay::Dispute.fetch_documents()
|
171
|
+
expect(docs).to be_kind_of(Array)
|
172
|
+
expect(docs.count).to be >= 2
|
173
|
+
|
174
|
+
# fetch last 2 docs ever (sorting by date descending)
|
175
|
+
docs = MangoPay::Dispute.fetch_documents(nil, filters)
|
176
|
+
expect(docs).to be_kind_of(Array)
|
177
|
+
expect(docs.count).to eq 2 # exactly 2 as pagiantion requested
|
178
|
+
expect(docs).to include(doc1, doc2)
|
179
|
+
end
|
180
|
+
|
181
|
+
def create_doc_page(file)
|
182
|
+
disp = find_dispute
|
183
|
+
doc = create_doc(disp)
|
184
|
+
MangoPay::Dispute.create_document_page(disp['Id'], doc['Id'], file)
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'create_document_page accepts Base64 encoded file content' do
|
188
|
+
fnm = __FILE__.sub('.rb', '.png')
|
189
|
+
bts = File.open(fnm, 'rb') { |f| f.read }
|
190
|
+
b64 = Base64.encode64(bts)
|
191
|
+
ret = create_doc_page(b64)
|
192
|
+
expect(ret).to be_nil
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'create_document_page accepts file path' do
|
196
|
+
fnm = __FILE__.sub('.rb', '.png')
|
197
|
+
disp = find_dispute
|
198
|
+
doc = create_doc(disp)
|
199
|
+
ret = MangoPay::Dispute.create_document_page(disp['Id'], doc['Id'], nil, fnm)
|
200
|
+
expect(ret).to be_nil
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'create_document_page fails when input string is not base64-encoded' do
|
204
|
+
file = 'any file content...'
|
205
|
+
expect { create_doc_page(file) }.to raise_error { |err|
|
206
|
+
expect(err).to be_a MangoPay::ResponseError
|
207
|
+
expect(err.code).to eq '400'
|
208
|
+
expect(err.type).to eq 'param_error'
|
209
|
+
}
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_contest_dispute
|
214
|
+
dispute = @disputes.find do |disp|
|
215
|
+
['PENDING_CLIENT_ACTION', 'REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status']) &&
|
216
|
+
['CONTESTABLE', 'RETRIEVAL'].include?(disp['DisputeType'])
|
217
|
+
end
|
218
|
+
expect(dispute).not_to be_nil, "Cannot test contesting dispute because there's no available disputes with expected status and type in the disputes list."
|
219
|
+
id = dispute['Id']
|
220
|
+
contested_funds = dispute['Status'] == 'PENDING_CLIENT_ACTION' ? { Amount: 10, Currency: 'EUR' } : nil;
|
221
|
+
changed_dispute = MangoPay::Dispute.contest(id, contested_funds)
|
222
|
+
expect(changed_dispute['Id']).to eq(id)
|
223
|
+
expect(changed_dispute['Status']).to eq('SUBMITTED')
|
224
|
+
changed_dispute
|
225
|
+
end
|
226
|
+
|
227
|
+
describe 'CONTEST' do
|
228
|
+
it 'contests a dispute' do
|
229
|
+
test_contest_dispute
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
describe 'RESUBMIT' do
|
234
|
+
it 'resubmits a dispute' do
|
235
|
+
dispute = @disputes.find do |disp|
|
236
|
+
['REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status'])
|
237
|
+
end
|
238
|
+
expect(dispute).not_to be_nil, "Cannot test resubmiting dispute because there's no available disputes with expected status in the disputes list."
|
239
|
+
id = dispute['Id']
|
240
|
+
changed_dispute = MangoPay::Dispute.resubmit(id)
|
241
|
+
expect(changed_dispute['Id']).to eq(id)
|
242
|
+
expect(changed_dispute['Status']).to eq('SUBMITTED')
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe 'CLOSE' do
|
247
|
+
it 'closes a dispute' do
|
248
|
+
dispute = @disputes.find do |disp|
|
249
|
+
['PENDING_CLIENT_ACTION', 'REOPENED_PENDING_CLIENT_ACTION'].include?(disp['Status']) &&
|
250
|
+
['CONTESTABLE', 'RETRIEVAL'].include?(disp['DisputeType'])
|
251
|
+
end
|
252
|
+
expect(dispute).not_to be_nil, "Cannot test closing dispute because there's no available disputes with expected status in the disputes list."
|
253
|
+
id = dispute['Id']
|
254
|
+
changed_dispute = MangoPay::Dispute.close(id)
|
255
|
+
expect(changed_dispute['Id']).to eq(id)
|
256
|
+
expect(changed_dispute['Status']).to eq('CLOSED')
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
=end
|
261
|
+
|
262
|
+
end
|