frankfurter/spec/quote/base_spec.rb

97 lines
1.8 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require_relative '../helper'
require 'quote/base'
module Quote
describe Base do
let(:klass) do
Class.new(Base)
end
let(:quote) do
klass.new(date: Date.today)
end
it 'requires data' do
2020-05-02 18:08:47 +02:00
_ { quote.perform }.must_raise NotImplementedError
end
it 'does not know how to format result' do
2020-05-02 18:08:47 +02:00
_ { quote.formatted }.must_raise NotImplementedError
end
it 'does not know how to generate a cache key' do
2020-05-02 18:08:47 +02:00
_ { quote.cache_key }.must_raise NotImplementedError
end
it 'defaults base to Euro' do
2020-05-02 18:08:47 +02:00
_(quote.base).must_equal 'EUR'
end
it 'defaults amount to 1' do
2020-05-02 18:08:47 +02:00
_(quote.amount).must_equal 1
end
describe 'when given data' do
before do
def quote.fetch_data
[]
end
end
it 'performs' do
assert quote.perform
end
it 'performs only once' do
quote.perform
2023-02-28 17:49:48 +01:00
refute quote.perform
end
end
describe 'when rebasing from an unavailable currency' do
let(:date) do
Date.parse('2000-01-01')
end
let(:quote) do
2023-02-28 17:49:48 +01:00
klass.new(date:, base: 'ILS')
end
before do
def quote.fetch_data
2023-02-28 17:49:48 +01:00
[{ date:, iso_code: 'USD', rate: 1 }]
end
end
it 'finds nothing' do
quote.perform
2020-05-02 18:08:47 +02:00
_(quote.not_found?).must_equal true
end
end
describe 'when rebasing and converting to an unavailable currency' do
let(:date) do
Date.today
end
let(:quote) do
2023-02-28 17:49:48 +01:00
klass.new(date:, base: 'USD', symbols: ['FOO'])
end
before do
def quote.fetch_data
2023-02-28 17:49:48 +01:00
[{ date:, iso_code: 'USD', rate: 1 }]
end
end
it 'finds nothing' do
quote.perform
2020-05-02 18:08:47 +02:00
_(quote.not_found?).must_equal true
end
end
end
end