204 lines
6.1 KiB
Ruby
204 lines
6.1 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
describe API::V2::Management::Currencies, type: :request do
|
|
before do
|
|
defaults_for_management_api_v1_security_configuration!
|
|
management_api_v1_security_configuration.merge! \
|
|
scopes: {
|
|
read_currencies: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] },
|
|
write_currencies: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] }
|
|
}
|
|
end
|
|
|
|
describe 'get currency by code' do
|
|
def request
|
|
post_json "/api/v2/management/currencies/#{currency.code}", multisig_jwt_management_api_v1({ data: {} }, *signers)
|
|
end
|
|
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:currency) { Currency.find(:usd) }
|
|
|
|
it 'returns currency by code' do
|
|
request
|
|
expect(JSON.parse(response.body).fetch('id')).to eq currency.code
|
|
end
|
|
|
|
context 'currency code with dot' do
|
|
let!(:currency) { create(:currency, :xagm_cx) }
|
|
|
|
it 'returns currency by code' do
|
|
request
|
|
expect(JSON.parse(response.body).fetch('id')).to eq currency.code
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'update currency' do
|
|
def request
|
|
put_json '/api/v2/management/currencies/update', multisig_jwt_management_api_v1({ data: data }, *signers)
|
|
end
|
|
|
|
let(:data) { {} }
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:currency) { Currency.find(:btc) }
|
|
|
|
it 'should validate deposit_fee param' do
|
|
data.merge!(id: currency.id, deposit_fee: -10.0)
|
|
request
|
|
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_deposit_fee/i)
|
|
end
|
|
|
|
it 'should validate min_deposit_amount param' do
|
|
data.merge!(id: currency.id, min_deposit_amount: -123.0)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_min_deposit_amount/i)
|
|
end
|
|
|
|
it 'should validate min_collection_amount param' do
|
|
data.merge!(id: currency.id, min_collection_amount: -100.0)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_min_collection_amount/i)
|
|
end
|
|
|
|
it 'should validate withdraw_fee param' do
|
|
data.merge!(id: currency.id, withdraw_fee: -100.0)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_withdraw_fee/i)
|
|
end
|
|
|
|
it 'should validate min_withdraw_amount param' do
|
|
data.merge!(id: currency.id, min_withdraw_amount: -1)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_min_withdraw_amount/i)
|
|
end
|
|
|
|
it 'should validate withdraw_limit_24h param' do
|
|
data.merge!(id: currency.id, withdraw_limit_24h: -1)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_withdraw_limit_24h/i)
|
|
end
|
|
|
|
it 'should validate withdraw_limit_72h param' do
|
|
data.merge!(id: currency.id, withdraw_limit_72h: -1)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_withdraw_limit_72h/i)
|
|
end
|
|
|
|
it 'should validate options param' do
|
|
data.merge!(id: currency.id, options: 'blah-blah')
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/non_json_options/i)
|
|
end
|
|
|
|
it 'should validate visible param' do
|
|
data.merge!(id: currency.id, visible: 'blah-blah')
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.non_boolean_visible/i)
|
|
end
|
|
|
|
it 'should validate position param' do
|
|
data.merge!(id: currency.id, position: 0)
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.invalid_position/i)
|
|
end
|
|
|
|
it 'should validate deposit_enabled param' do
|
|
data.merge!(id: currency.id, deposit_enabled: 'blah-blah')
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.non_boolean_deposit_enabled/i)
|
|
end
|
|
|
|
it 'should validate withdrawal_enabled param' do
|
|
data.merge!(id: currency.id, withdrawal_enabled: 'blah-blah')
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/management.currency.non_boolean_withdrawal_enabled/i)
|
|
end
|
|
|
|
it 'should check required params' do
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
expect(response.body).to match(/id is missing/i)
|
|
end
|
|
|
|
it 'should update currency' do
|
|
data.merge!(id: currency.id, visible: 'true', withdraw_fee: '0.1')
|
|
request
|
|
|
|
expect(response).to have_http_status 200
|
|
|
|
result = JSON.parse(response.body)
|
|
expect(result.fetch('id')).to eq currency.id
|
|
expect(result.fetch('visible')).to eq true
|
|
expect(result.fetch('withdraw_fee')).to eq '0.1'
|
|
end
|
|
end
|
|
|
|
describe 'POST /api/v2/management/currencies/list' do
|
|
def request
|
|
post_json "/api/v2/management/currencies/list", multisig_jwt_management_api_v1({ data: data }, *signers)
|
|
end
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { {} }
|
|
|
|
it 'lists visible currencies' do
|
|
request
|
|
expect(response).to have_http_status 200
|
|
|
|
result = JSON.parse(response.body)
|
|
expect(result.size).to eq Currency.count
|
|
end
|
|
|
|
it 'lists visible coins' do
|
|
data.merge!(type: 'coin')
|
|
request
|
|
expect(response).to have_http_status 200
|
|
|
|
result = JSON.parse(response.body)
|
|
expect(result.size).to eq Currency.coins.size
|
|
end
|
|
|
|
it 'lists visible fiats' do
|
|
data.merge!(type: 'fiat')
|
|
request
|
|
expect(response).to have_http_status 200
|
|
|
|
result = JSON.parse(response.body, symbolize_names: true)
|
|
expect(result.size).to eq Currency.fiats.size
|
|
expect(result.dig(0, :id)).to eq 'usd'
|
|
end
|
|
|
|
it 'returns error in case of invalid type' do
|
|
data.merge!(type: 'invalid')
|
|
request
|
|
expect(response).to have_http_status 422
|
|
end
|
|
end
|
|
end
|