Design updates with error handling

This commit is contained in:
bterkuile committed 2025-10-18 09:13:12 -05:00
1 parent 4c73608549
commit 4b84df0af9
9 files changed
+124 -38

No files matched your search

+53 -3
View File
@@ -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