Design updates with error handling
This commit is contained in:
1 parent
4c73608549
commit
4b84df0af9
9 files changed
+124
-38
No files matched your search
@@ -10,7 +10,7 @@ RSpec.describe StrikeMe::API::Account do
|
||||
allow(ENV).to receive(:[])
|
||||
expect(ENV).to receive(:[]).with('STRIKE_ACCOUNT_ID').and_return 'abc'
|
||||
stub_request(:get, %r{https://api.strike.me/v1/accounts/abc/profile})
|
||||
.to_return(status: 200, body: '{"id":"abc44"}')
|
||||
.to_return(status: 200, body: '{"id":"abc44"}', headers: {'Content-Type' => 'application/json'})
|
||||
expect(subject.id).to eq 'abc44'
|
||||
end
|
||||
|
||||
@@ -19,16 +19,66 @@ RSpec.describe StrikeMe::API::Account do
|
||||
allow(ENV).to receive(:fetch)
|
||||
expect(ENV).to receive(:fetch).with('STRIKE_ACCOUNT_HANDLE').and_return 'abcd'
|
||||
stub_request(:get, %r{https://api.strike.me/v1/accounts/handles/abcd/profile})
|
||||
.to_return(status: 200, body: '{"id":"abc44"}')
|
||||
.to_return(status: 200, body: '{"id":"abc44"}', headers: {'Content-Type' => 'application/json'})
|
||||
expect(subject.id).to eq 'abc44'
|
||||
end
|
||||
|
||||
it 'throws exception when unauthorized' do
|
||||
allow(ENV).to receive(:[])
|
||||
expect(ENV).to receive(:[]).with('STRIKE_ACCOUNT_ID').and_return 'abc'
|
||||
stub_request(:get, %r{https://api.strike.me/v1/accounts/abc/profile})
|
||||
.to_return(status: 401, body: '{"data":{"status":401,"code":"UNAUTHORIZED","message":"Invalid or unspecified identity."}}', headers: {'Content-Type' => 'application/json'})
|
||||
expect{ subject.id }.to raise_error '[401, {}, ["Invalid or unspecified identity."]]'
|
||||
end
|
||||
end
|
||||
|
||||
describe 'balances' do
|
||||
subject { described_class.new.balances }
|
||||
|
||||
before { stub_request(:get, 'https://api.strike.me/v1/balances').to_return(status: 200, body: []) }
|
||||
before { stub_request(:get, 'https://api.strike.me/v1/balances').to_return(status: 200, body: '[{"currency":"BTC","current":"0.00085408","pending":"0.000023","outgoing":"0.00000532","reserved":"0.00234","available":"0.00085408","total":"0.00085408"},{"currency":"USDT","current":"50.04","pending":"40.06","outgoing":"60.15","reserved":"0.00","available":"0.00","total":"0.00"}]', headers: {'Content-Type' => 'application/json'}) }
|
||||
|
||||
it { is_expected.to be_an_instance_of StrikeMe::API::Account::Balances }
|
||||
|
||||
it '#to_a properly returns the attributes' do
|
||||
expect(subject.to_a).to eq [
|
||||
{
|
||||
"currency" => "BTC",
|
||||
"current" => 0.00085408,
|
||||
"pending" => 2.3e-05,
|
||||
"outgoing" => 5.32e-06,
|
||||
"reserved" => 0.00234,
|
||||
"available" => 0.00085408,
|
||||
"total" => 0.00085408
|
||||
}, {
|
||||
"currency" => "USDT",
|
||||
"current" => 50.04,
|
||||
"pending" => 40.06,
|
||||
"outgoing" => 60.15,
|
||||
"reserved" => 0.0,
|
||||
"available" => 0.0,
|
||||
"total" => 0.0
|
||||
}]
|
||||
end
|
||||
|
||||
it '#btc returns the BTC balance' do
|
||||
btc = subject.btc
|
||||
expect(btc).to be_present
|
||||
expect(btc).to be_a StrikeMe::API::Account::Balance
|
||||
expect(btc.attributes).to eq(
|
||||
"available" => 0.00085408,
|
||||
"currency" => "BTC",
|
||||
"current" => 0.00085408,
|
||||
"outgoing" => 5.32e-06,
|
||||
"pending" => 2.3e-05,
|
||||
"reserved" => 0.00234,
|
||||
"total" => 0.00085408
|
||||
)
|
||||
end
|
||||
|
||||
it 'raises error when not authorized' do
|
||||
stub_request(:get, %r{https://api.strike.me/v1/balances})
|
||||
.to_return(status: 401, body: '{"data":{"status":403,"code":"FORBIDDEN","message":"Insufficient permissions."}}', headers: {'Content-Type' => 'application/json'})
|
||||
expect{ subject }.to raise_error '[403, {}, ["Insufficient permissions."]]'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -44,7 +44,7 @@ RSpec.describe StrikeMe::BTC do
|
||||
|
||||
context 'arithmetic' do
|
||||
it 'supports multiplication with numbers' do
|
||||
btc1 = described_class.new(234_529)
|
||||
btc1 = described_class.new 234_529
|
||||
btc2 = btc1 * 3
|
||||
btc3 = btc2 * 2.9
|
||||
|
||||
@@ -54,14 +54,14 @@ RSpec.describe StrikeMe::BTC do
|
||||
expect(btc2).not_to eq btc1
|
||||
expect(btc2).not_to eq btc3
|
||||
|
||||
expect(btc1.sats).to eq 234_529
|
||||
expect(btc1).to eq 234_529
|
||||
expect(btc2).to eq 703_587
|
||||
expect(btc3).to eq 2_040_402
|
||||
expect(btc1.sats).to eq 234_529
|
||||
expect(btc1).to eq 234_529
|
||||
expect(btc2).to eq 703_587
|
||||
expect(btc3).to eq 2_040_402
|
||||
end
|
||||
|
||||
it 'supports division with numbers' do
|
||||
btc1 = described_class.new(34_529)
|
||||
btc1 = described_class.new 34_529
|
||||
btc2 = btc1 / 3
|
||||
btc3 = btc2 / 2.9
|
||||
|
||||
@@ -74,7 +74,7 @@ RSpec.describe StrikeMe::BTC do
|
||||
expect(btc1.sats).to eq 34_529
|
||||
expect(btc1).to eq 34_529
|
||||
expect(btc2).to eq 11_509
|
||||
expect(btc3).to eq 3_968
|
||||
expect(btc3).to eq 3_968
|
||||
end
|
||||
|
||||
it 'supports addition with other BTC objects' do
|
||||
@@ -89,8 +89,8 @@ RSpec.describe StrikeMe::BTC do
|
||||
end
|
||||
|
||||
it 'supports subtraction with other BTC objects' do
|
||||
btc1 = described_class.new(34_529)
|
||||
btc2 = described_class.new(2_556)
|
||||
btc1 = described_class.new 34_529
|
||||
btc2 = described_class.new 2_556
|
||||
btc3 = btc1 - btc2
|
||||
|
||||
expect { btc1 - 23 }.to raise_error StrikeMe::BTC::Error
|
||||
@@ -101,6 +101,7 @@ RSpec.describe StrikeMe::BTC do
|
||||
end
|
||||
|
||||
it 'is consistent for small values' do
|
||||
# if floor is used instead of round, the small number 3, multiplied by 100 million can result in 2.99999999 leading to 2
|
||||
string = 3.sats.to_s
|
||||
expect(string).to eq '0.00000003'
|
||||
expect(string.to_f.btc.sats).to eq 3
|
||||
|
||||
Reference in new issue
Block a user