66 lines
1.8 KiB
Ruby
66 lines
1.8 KiB
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
require_relative "../../helper"
|
||
|
|
require "provider/adapters/adapter"
|
||
|
|
|
||
|
|
class Provider < Sequel::Model(:providers)
|
||
|
|
module Adapters
|
||
|
|
describe Adapter do
|
||
|
|
it "requires fetch" do
|
||
|
|
_ { Class.new(Adapter).new.fetch }.must_raise(NotImplementedError)
|
||
|
|
end
|
||
|
|
|
||
|
|
describe ".fetch_each" do
|
||
|
|
it "yields records from fetch" do
|
||
|
|
fetching_klass = Class.new(Adapter) do
|
||
|
|
define_method(:fetch) do |**|
|
||
|
|
[{ date: Date.new(2099, 1, 1), base: "EUR", quote: "USD", rate: 1.1 }]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
batches = []
|
||
|
|
fetching_klass.fetch_each { |records| batches << records }
|
||
|
|
|
||
|
|
_(batches.length).must_equal(1)
|
||
|
|
_(batches[0].length).must_equal(1)
|
||
|
|
end
|
||
|
|
|
||
|
|
it "skips empty results" do
|
||
|
|
empty_klass = Class.new(Adapter) do
|
||
|
|
define_method(:fetch) do |**|
|
||
|
|
[]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
batches = []
|
||
|
|
empty_klass.fetch_each { |records| batches << records }
|
||
|
|
|
||
|
|
_(batches).must_be_empty
|
||
|
|
end
|
||
|
|
|
||
|
|
it "chunks by backfill_range" do
|
||
|
|
after = Date.today - 90
|
||
|
|
params = []
|
||
|
|
chunked_klass = Class.new(Adapter) do
|
||
|
|
class << self
|
||
|
|
def backfill_range = 30
|
||
|
|
end
|
||
|
|
|
||
|
|
define_method(:fetch) do |after: nil, upto: nil|
|
||
|
|
params << { after:, upto: }
|
||
|
|
[{ date: Date.new(2099, 1, 1), base: "EUR", quote: "USD", rate: 1.1 }]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
chunked_klass.fetch_each(after:) { |_| }
|
||
|
|
|
||
|
|
_(params.length).must_equal(4)
|
||
|
|
_(params[0][:after]).must_equal(after)
|
||
|
|
_(params[0][:upto]).must_equal(after + 29)
|
||
|
|
_(params[-1][:upto]).must_be_nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|