frankfurter/spec/web/server_spec.rb
Hakan Ensari e5815737c1
Spring cleaning
- bumped gems
- rm bots
- rm pry byebug
- added rubocop-shopify and corrected generated warnings
2024-11-20 14:14:27 +01:00

120 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require_relative "../helper"
require "rack/test"
require "web/server"
describe "the server" do
include Rack::Test::Methods
let(:app) { Web::Server.freeze }
let(:json) { Oj.load(last_response.body) }
let(:headers) { last_response.headers }
it "returns link to docs" do
get "/"
_(json["docs"]).wont_be_nil
end
it "returns latest quotes" do
get "/latest"
_(last_response).must_be(:ok?)
end
it "sets base currency" do
get "/latest"
res = Oj.load(last_response.body)
get "/latest?from=USD"
_(json).wont_equal(res)
end
it "sets base amount" do
get "/latest?amount=10"
_(json["rates"]["USD"]).must_be(:>, 10)
end
it "filters symbols" do
get "/latest?to=USD"
_(json["rates"].keys).must_equal(["USD"])
end
it "returns historical quotes" do
get "/2012-11-20"
_(json["rates"]).wont_be(:empty?)
_(json["date"]).must_equal("2012-11-20")
end
it "works around holidays" do
get "/2010-01-01"
_(json["rates"]).wont_be(:empty?)
end
it "returns an ETag" do
["/latest", "/2012-11-20"].each do |path|
get path
_(headers["ETag"]).wont_be_nil
end
end
it "returns a cache control header" do
["/latest", "/2012-11-20"].each do |path|
get path
_(headers["Cache-Control"]).wont_be_nil
end
end
it "allows cross-origin requests" do
["/", "/latest", "/2012-11-20"].each do |path|
header "Origin", "*"
get path
assert headers.key?("Access-Control-Allow-Methods")
end
end
it "responds to preflight requests" do
["/", "/latest", "/2012-11-20"].each do |path|
header "Origin", "*"
header "Access-Control-Request-Method", "GET"
header "Access-Control-Request-Headers", "Content-Type"
options path
assert headers.key?("Access-Control-Allow-Methods")
end
end
it "converts an amount" do
get "/latest?from=GBP&to=USD&amount=100"
_(json["rates"]["USD"]).must_be(:>, 100)
end
it "returns rates for a given period" do
get "/2010-01-01..2010-12-31"
_(json["start_date"]).wont_be(:empty?)
_(json["end_date"]).wont_be(:empty?)
_(json["rates"]).wont_be(:empty?)
end
it "returns rates when given period does not include end date" do
get "/2010-01-01.."
_(json["start_date"]).wont_be(:empty?)
_(json["end_date"]).wont_be(:empty?)
_(json["rates"]).wont_be(:empty?)
end
it "returns currencies" do
get "/currencies"
_(json["USD"]).must_equal("United States Dollar")
end
it "handles JSONP" do
get "/latest?callback=foo"
_(last_response.body).must_be(:start_with?, "/**/foo")
end
it "sets charset to utf-8" do
get "/currencies"
_(last_response.headers["content-type"]).must_be(:end_with?, "charset=utf-8")
end
end