require 'spec_helper'
module Resync
describe ChangeDumpIndex do
before(:each) do
@change_dump_index = ChangeDumpIndex.load_from_xml(XML.element(
"
http://example.com/20130101-changedump.xml
http://example.com/20130102-changedump.xml
http://example.com/20130103-changedump.xml
"))
@change_dumps = [
"
http://example.com/20130101-changedump-0.zip
http://example.com/20130101-changedump-1.zip
",
"
http://example.com/20130102-changedump-0.zip
http://example.com/20130102-changedump-1.zip
",
"
http://example.com/20130103-changedump-0.zip
http://example.com/20130103-changedump-1.zip
"
].map { |xml| ChangeDump.load_from_xml(XML.element(xml)) }
@all_package_resources = []
@all_zip_packages = []
@change_dumps.each do |d|
d.resources.each do |r|
@all_package_resources << r
zp = instance_double(Resync::Client::Zip::ZipPackage)
allow(r).to receive(:zip_package) { zp }
@all_zip_packages << zp
end
end
@change_dump_resources = []
@change_dump_index.resources.each_with_index do |r, i|
@change_dump_resources << r
allow(r).to receive(:get_and_parse) { @change_dumps[i] }
end
end
describe '#all_zip_packages' do
it 'should accept an optional time range' do
range = Time.utc(2013, 1, 1)..Time.utc(2013, 1, 2, 6)
all_packages = @change_dump_index.all_zip_packages(in_range: range).to_a
expect(all_packages).to eq(@all_zip_packages[0, 3])
end
it 'should not download unnecessary dumps or packages' do
expect(@change_dump_resources[2]).not_to receive(:get_and_parse)
@all_package_resources[3, 3].each do |r|
expect(r).not_to receive(:zip_package)
end
@change_dump_index.all_zip_packages(in_range: Time.utc(2013, 1, 1)..Time.utc(2013, 1, 2, 6)).to_a
end
it 'should not require a time range' do
all_packages = @change_dump_index.all_zip_packages.to_a
expect(all_packages).to eq(@all_zip_packages)
end
end
end
end