require "spec_helper"
require "massive_sitemap/builder/rotating"
require "massive_sitemap/writer/string"
describe MassiveSitemap::Builder::Rotating do
let(:header) { %Q(\n) }
let(:writer) { MassiveSitemap::Writer::String.new }
let(:builder) { MassiveSitemap::Builder::Rotating.new(writer) }
it 'raises error when max_per_sitemap > MAX_URLS' do
expect do
MassiveSitemap::Builder::Rotating.new(writer, :max_per_sitemap => MassiveSitemap::Builder::Rotating::NUM_URLS.max + 1)
end.to raise_error(ArgumentError)
end
it 'generates one url' do
MassiveSitemap::Builder::Rotating.new(writer) do
add_url! 'test'
end
writer.should == %Q(#{header}\n \n test\n \n)
end
it 'generates two url' do
MassiveSitemap::Builder::Rotating.new(writer, :max_per_sitemap => 1) do
add_url! 'test'
add_url! 'test2'
end
writer.should == %Q(#{header}\n \n test\n \n#{header}\n \n test2\n \n)
end
context "with file" do
let(:filename) { 'sitemap.xml' }
let(:filename2) { 'sitemap-1.xml' }
let(:writer) { MassiveSitemap::Writer::File.new }
after do
FileUtils.rm(filename) rescue nil
FileUtils.rm(filename2) rescue nil
end
it 'generates two url' do
expect do
expect do
MassiveSitemap::Builder::Rotating.new(writer, :max_per_sitemap => 1) do
add 'test'
add 'test2'
end
end.to change { File.exists?(filename) }.to(true)
end.to change { File.exists?(filename2) }.to(true)
end
it 'generates two url when file exists' do
File.open(filename, 'w') {}
expect do
expect do
MassiveSitemap::Builder::Rotating.new(writer, :max_per_sitemap => 1) do
begin
add 'test'
rescue MassiveSitemap::Writer::File::FileExistsException => e
end
add 'test2'
end
end.to_not change { File.exists?(filename) }.to(true)
end.to change { File.exists?(filename2) }.to(true)
end
end
describe "#filename_with_rotation" do
context "keeps filename" do
it "rotation is zero" do
builder.send(:filename_with_rotation, "sitemap.xml").should == "sitemap.xml"
end
it "rotation is zero" do
builder.send(:filename_with_rotation, "sitemap2.xml").should == "sitemap2.xml"
end
it "rotation is zero" do
builder.send(:filename_with_rotation, "sitemap.xml", nil).should == "sitemap.xml"
end
it "rotation is nil" do
builder.send(:filename_with_rotation, "sitemap.xml", 0).should == "sitemap.xml"
end
end
context "rotation is 1" do
it "add prefix" do
builder.send(:filename_with_rotation, "sitemap.xml", 1).should == "sitemap-1.xml"
end
it "rotation is zero" do
builder.send(:filename_with_rotation, "sitemap-1.xml", 1).should == "sitemap-1.xml"
end
it "rotation is zero" do
builder.send(:filename_with_rotation, "sitemap-user.xml", 1).should == "sitemap-user-1.xml"
end
end
end
describe "#split_filename" do
FILENAMES = {
nil => ["", nil, nil],
".xml" => ["", nil, ".xml"],
".xml.gz" => ["", nil, ".xml.gz"],
"sitemap" => ["sitemap", nil, nil],
"sitemap.xml" => ["sitemap", nil, ".xml"],
"sitemap.xml.gz" => ["sitemap", nil, ".xml.gz"],
"-1.xml" => ["", "-1", ".xml"],
"-1.xml.gz" => ["", "-1", ".xml.gz"],
"sitemap-1" => ["sitemap", "-1", nil],
"sitemap-1.xml" => ["sitemap", "-1", ".xml"],
"sitemap-1.xml.gz" => ["sitemap", "-1", ".xml.gz"],
"-user-1.xml" => ["-user", "-1", ".xml"],
"-user-1.xml.gz" => ["-user", "-1", ".xml.gz"],
"sitemap-user-1" => ["sitemap-user", "-1", nil],
"sitemap-user-1.xml" => ["sitemap-user", "-1", ".xml"],
"sitemap-user-1.xml.gz" => ["sitemap-user", "-1", ".xml.gz"],
"sitemap1" => ["sitemap1", nil, nil],
"sitemap1.xml" => ["sitemap1", nil, ".xml"],
"sitemap1.xml.gz" => ["sitemap1", nil, ".xml.gz"],
}
FILENAMES.each do |filename, expected|
it "splits filename #{filename} into #{expected.join(' ')}" do
builder.send(:split_filename, filename).should == expected
end
end
end
end