cartodb/services/synchronizer/spec/unit/collection_spec.rb
2020-06-15 10:58:47 +08:00

72 lines
1.7 KiB
Ruby

gem 'minitest'
require 'minitest/autorun'
require_relative '../../lib/synchronizer/collection'
require_relative '../factories/pg_connection'
require_relative '../../../data-repository/backend/sequel'
include CartoDB::Synchronizer
describe Collection do
before do
@stop = lambda { |result| EventMachine.stop }
@run_call = lambda { |records| records.process; EventMachine.stop }
db = Factories::PGConnection.new
@connection = db.connection
@options = db.pg_options
end
describe '#fetch' do
it 'fetchs all pending jobs from the synchronizations relation' do
repository =
DataRepository::Backend::Sequel.new(@connection, :synchronizations)
ensure_table_created_in(@connection)
id = repository.next_id.to_s
repository.store(id, synchronization(id))
collection = Collection.new(@options)
EventMachine.run { collection.fetch(@run_call, @stop) }
collection.members.to_a.length.must_equal ensure_table_created_in
collection.members.first.must_be_instance_of CartoDB::Synchronization::Member
end
end
describe '#process' do
it 'tells all members to run' do
member = Minitest::Mock.new
collection = Collection.new(@options)
member.expect(:enqueue, self)
collection.process([member])
member.verify
end
end
def synchronization(id)
{
id: id,
url: 'foo',
user_id: 1,
interval: 3600,
run_at: Time.now.utc - 2,
created_at: Time.now.utc,
updated_at: Time.now.utc
}
end
def fake_member
member = Object.new
def member.run; self; end
member
end
def ensure_table_created_in(connection)
end
end