mirror of
https://github.com/hakanensari/frankfurter.git
synced 2024-11-22 11:02:30 +01:00
Handle more edge cases
This commit is contained in:
parent
88447a1856
commit
3c146f643f
@ -9,7 +9,9 @@ class Snapshot
|
|||||||
|
|
||||||
def quote
|
def quote
|
||||||
self.date = if date
|
self.date = if date
|
||||||
Currency.where("date <= '#{date}'").order(:date).last.date
|
last_date = Currency.where("date <= '#{date}'").order(:date).last
|
||||||
|
raise ArgumentError.new('Date too old') unless last_date
|
||||||
|
last_date.date
|
||||||
else
|
else
|
||||||
Currency.last_date
|
Currency.last_date
|
||||||
end
|
end
|
||||||
@ -28,6 +30,7 @@ class Snapshot
|
|||||||
def rebase(rates)
|
def rebase(rates)
|
||||||
if base.upcase! != 'EUR'
|
if base.upcase! != 'EUR'
|
||||||
denominator = rates.update('EUR' => 1.0).delete(base)
|
denominator = rates.update('EUR' => 1.0).delete(base)
|
||||||
|
raise ArgumentError.new('Invalid base') unless denominator
|
||||||
|
|
||||||
rates.each do |iso_code, rate|
|
rates.each do |iso_code, rate|
|
||||||
rates[iso_code] = round(rate / denominator)
|
rates[iso_code] = round(rate / denominator)
|
||||||
|
@ -7,7 +7,6 @@ describe 'the API' do
|
|||||||
|
|
||||||
let(:app) { Sinatra::Application }
|
let(:app) { Sinatra::Application }
|
||||||
let(:json) { Yajl::Parser.new.parse last_response.body }
|
let(:json) { Yajl::Parser.new.parse last_response.body }
|
||||||
let(:status) { last_response.status }
|
|
||||||
|
|
||||||
it 'returns latest snapshot' do
|
it 'returns latest snapshot' do
|
||||||
get '/latest'
|
get '/latest'
|
||||||
@ -34,14 +33,4 @@ describe 'the API' do
|
|||||||
get '/2010-01-01'
|
get '/2010-01-01'
|
||||||
json['rates'].wont_be :empty?
|
json['rates'].wont_be :empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'considers an invalid date unprocessable' do
|
|
||||||
get '/2010-31-01'
|
|
||||||
last_response.must_be :unprocessable?
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'handles unfound pages' do
|
|
||||||
get '/'
|
|
||||||
last_response.status.must_equal 404
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
29
spec/edge_cases_spec.rb
Normal file
29
spec/edge_cases_spec.rb
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
require_relative 'helper'
|
||||||
|
require 'rack/test'
|
||||||
|
require 'api'
|
||||||
|
|
||||||
|
describe 'the API' do
|
||||||
|
include Rack::Test::Methods
|
||||||
|
|
||||||
|
let(:app) { Sinatra::Application }
|
||||||
|
|
||||||
|
it 'handles unfound pages' do
|
||||||
|
get '/'
|
||||||
|
last_response.status.must_equal 404
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'will not process an invalid date' do
|
||||||
|
get '/2010-31-01'
|
||||||
|
last_response.must_be :unprocessable?
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'will not process a date before 2000' do
|
||||||
|
get '/1999-01-01'
|
||||||
|
last_response.must_be :unprocessable?
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'will not process an invalid base' do
|
||||||
|
get '/latest?base=UAH'
|
||||||
|
last_response.must_be :unprocessable?
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user