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