72 lines
1.7 KiB
Ruby
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
|
||
|
|