197 lines
6.1 KiB
Ruby
197 lines
6.1 KiB
Ruby
describe Bitcoin::Wallet do
|
|
let(:wallet) { Bitcoin::Wallet.new }
|
|
|
|
context :configure do
|
|
let(:settings) { { wallet: {}, currency: {} }}
|
|
it 'requires wallet' do
|
|
expect{ wallet.configure(settings.except(:wallet)) }.to raise_error(Peatio::Wallet::MissingSettingError)
|
|
|
|
expect{ wallet.configure(settings) }.to_not raise_error
|
|
end
|
|
|
|
it 'requires currency' do
|
|
expect{ wallet.configure(settings.except(:currency)) }.to raise_error(Peatio::Wallet::MissingSettingError)
|
|
|
|
expect{ wallet.configure(settings) }.to_not raise_error
|
|
end
|
|
|
|
it 'sets settings attribute' do
|
|
wallet.configure(settings)
|
|
expect(wallet.settings).to eq(settings.slice(*Bitcoin::Wallet::SUPPORTED_SETTINGS))
|
|
end
|
|
end
|
|
|
|
context :create_address! do
|
|
around do |example|
|
|
WebMock.disable_net_connect!
|
|
example.run
|
|
WebMock.allow_net_connect!
|
|
end
|
|
|
|
let(:uri) { 'http://user:password@127.0.0.1:18332' }
|
|
let(:uri_without_authority) { 'http://127.0.0.1:18332' }
|
|
|
|
let(:uri_with_wallet) { 'http://user:password@127.0.0.1:18332/wallet/testwallet' }
|
|
let(:uri_with_wallet_no_authority) { 'http://127.0.0.1:18332/wallet/testwallet' }
|
|
|
|
let(:settings) do
|
|
{
|
|
wallet:
|
|
{ address: 'something',
|
|
uri: uri },
|
|
currency: {}
|
|
}
|
|
end
|
|
|
|
before do
|
|
wallet.configure(settings)
|
|
end
|
|
|
|
it 'request rpc and creates new address' do
|
|
address = '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf'
|
|
stub_request(:post, uri_without_authority)
|
|
.with(body: { jsonrpc: '1.0',
|
|
method: :getnewaddress,
|
|
params: [] }.to_json)
|
|
.to_return(body: { result: address,
|
|
error: nil,
|
|
id: nil }.to_json)
|
|
|
|
result = wallet.create_address!(uid: 'UID123')
|
|
expect(result.as_json.symbolize_keys).to eq(address: address)
|
|
end
|
|
|
|
it 'works with wallet path' do
|
|
wallet.configure({
|
|
wallet: {
|
|
address: 'something',
|
|
uri: uri_with_wallet },
|
|
currency: {}
|
|
})
|
|
address = '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf'
|
|
stub_request(:post, uri_with_wallet_no_authority)
|
|
.with(body: { jsonrpc: '1.0',
|
|
method: :getnewaddress,
|
|
params: [] }.to_json)
|
|
.to_return(body: { result: address,
|
|
error: nil,
|
|
id: nil }.to_json)
|
|
result = wallet.create_address!(uid: 'UID123')
|
|
expect(result.as_json.symbolize_keys).to eq(address: address)
|
|
end
|
|
end
|
|
|
|
context :create_transaction! do
|
|
around do |example|
|
|
WebMock.disable_net_connect!
|
|
example.run
|
|
WebMock.allow_net_connect!
|
|
end
|
|
|
|
let(:uri) { 'http://user:password@127.0.0.1:18332' }
|
|
let(:uri_without_authority) { 'http://127.0.0.1:18332' }
|
|
|
|
let(:settings) do
|
|
{
|
|
wallet:
|
|
{ address: 'something',
|
|
uri: uri },
|
|
currency: {}
|
|
}
|
|
end
|
|
|
|
let(:transaction) do
|
|
Peatio::Transaction.new(amount: 1.1, to_address: '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf')
|
|
end
|
|
|
|
before do
|
|
wallet.configure(settings)
|
|
end
|
|
|
|
it 'requests rpc and sends transaction without subtract fees' do
|
|
txid = 'ab6ada9608f4cebf799ee8be20fe3fb84b0d08efcdb0d962df45d6fce70cb017'
|
|
stub_request(:post, uri_without_authority)
|
|
.with(body: { jsonrpc: '1.0',
|
|
method: :sendtoaddress,
|
|
params: [
|
|
transaction.to_address,
|
|
transaction.amount,
|
|
'',
|
|
'',
|
|
false
|
|
] }.to_json)
|
|
.to_return(body: { result: txid,
|
|
error: nil,
|
|
id: nil }.to_json)
|
|
|
|
result = wallet.create_transaction!(transaction)
|
|
expect(result.as_json.symbolize_keys).to eq(amount: 1.1,
|
|
to_address: '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf',
|
|
hash: txid,
|
|
status: 'pending')
|
|
end
|
|
|
|
it 'requests rpc and sends transaction with subtract fees' do
|
|
txid = 'ab6ada9608f4cebf799ee8be20fe3fb84b0d08efcdb0d962df45d6fce70cb017'
|
|
stub_request(:post, uri_without_authority)
|
|
.with(body: { jsonrpc: '1.0',
|
|
method: :sendtoaddress,
|
|
params: [
|
|
transaction.to_address,
|
|
transaction.amount,
|
|
'',
|
|
'',
|
|
true
|
|
] }.to_json)
|
|
.to_return(body: { result: txid,
|
|
error: nil,
|
|
id: nil }.to_json)
|
|
|
|
result = wallet.create_transaction!(transaction, subtract_fee: true)
|
|
expect(result.as_json.symbolize_keys).to eq(amount: 1.1,
|
|
to_address: '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf',
|
|
hash: txid,
|
|
status: 'pending')
|
|
end
|
|
end
|
|
|
|
context :load_balance! do
|
|
around do |example|
|
|
WebMock.disable_net_connect!
|
|
example.run
|
|
WebMock.allow_net_connect!
|
|
end
|
|
|
|
let(:uri) { 'http://user:password@127.0.0.1:18332' }
|
|
let(:uri_without_authority) { 'http://127.0.0.1:18332' }
|
|
|
|
let(:settings) do
|
|
{
|
|
wallet:
|
|
{ address: 'something',
|
|
uri: uri },
|
|
currency: {}
|
|
}
|
|
end
|
|
|
|
before do
|
|
wallet.configure(settings)
|
|
end
|
|
|
|
it 'requests rpc with getbalance call' do
|
|
balance = '6.72201169'
|
|
stub_request(:post, uri_without_authority)
|
|
.with(body: { jsonrpc: '1.0',
|
|
method: :getbalance,
|
|
params: [] }.to_json)
|
|
.to_return(body: { result: balance,
|
|
error: nil,
|
|
id: nil }.to_json)
|
|
|
|
result = wallet.load_balance!
|
|
expect(result).to be_a(BigDecimal)
|
|
expect(result).to eq(balance.to_d)
|
|
end
|
|
end
|
|
end
|