require "spec_helper"

require "massive_sitemap/builder/rotating"
require "massive_sitemap/writer/string"

describe MassiveSitemap::Builder::Rotating do
  let(:header) { %Q(<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">) }
  let(:writer) { MassiveSitemap::Writer::String.new }
  let(:builder) { MassiveSitemap::Builder::Rotating.new(writer) }

  it 'generates one url' do
    MassiveSitemap::Builder::Rotating.new(writer) do
      add_url! 'test'
    end
    writer.should == %Q(#{header}\n  <url>\n    <loc>test</loc>\n  </url>\n</urlset>)
  end

  it 'generates two url' do
    MassiveSitemap::Builder::Rotating.new(writer, :max_urls => 1) do
      add_url! 'test'
      add_url! 'test2'
    end
    writer.should == %Q(#{header}\n  <url>\n    <loc>test</loc>\n  </url>\n</urlset>#{header}\n  <url>\n    <loc>test2</loc>\n  </url>\n</urlset>)
  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_urls => 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') {}
      urls = ['test', 'test2']
      expect do
        expect do
          MassiveSitemap::Builder::Rotating.new(writer, :max_urls => 1) do
            urls.each do |path|
              begin
                add path
              rescue MassiveSitemap::Writer::File::FileExistsException => e
              end
            end
          end
        end.to_not change { File.exists?(filename) }.from(true)
      end.to change { File.exists?(filename2) }.to(true)
    end
  end

end