2013-03-11 03:10:44 +01:00
|
|
|
require "spec_helper"
|
|
|
|
|
|
|
|
describe WikiToGollumMigrator do
|
|
|
|
|
|
|
|
def create_wiki_for(project)
|
|
|
|
3.times { @pages[project.id] << create_page(project) }
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_revisions_for(project)
|
|
|
|
@pages[project.id].each do |page|
|
|
|
|
create_revision(page)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_page(project)
|
|
|
|
page = project.wikis.new(title: "Page #{rand(1000)}", content: "Content")
|
|
|
|
page.user = project.owner
|
|
|
|
page.slug = page.title.parameterize
|
|
|
|
page.save!
|
|
|
|
page
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_revision(page)
|
|
|
|
revision = page.dup
|
|
|
|
revision.content = "Updated Content"
|
|
|
|
revision.save!
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_temp_repo(path)
|
|
|
|
FileUtils.mkdir_p path
|
|
|
|
command = "git init --quiet --bare #{path};"
|
|
|
|
system(command)
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
@repo_path = "#{Rails.root}/tmp/test-git-base-path"
|
|
|
|
@projects = []
|
|
|
|
@pages = Hash.new {|h,k| h[k] = Array.new }
|
|
|
|
|
|
|
|
@projects << create(:project)
|
|
|
|
@projects << create(:project)
|
|
|
|
|
|
|
|
@projects.each do |project|
|
|
|
|
create_wiki_for project
|
|
|
|
create_revisions_for project
|
|
|
|
end
|
|
|
|
|
|
|
|
@project_without_wiki = create(:project)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "Before the migration" do
|
|
|
|
it "has two projects with valid wikis" do
|
|
|
|
@projects.each do |project|
|
|
|
|
pages = project.wikis.group(:slug).all
|
|
|
|
pages.count.should == 3
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "has two revision for each page" do
|
|
|
|
@projects.each do |project|
|
|
|
|
@pages[project.id].each do |page|
|
|
|
|
revisions = project.wikis.where(slug: page.slug)
|
|
|
|
revisions.count.should == 2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#initialize" do
|
|
|
|
it "finds all projects that have existing wiki pages" do
|
|
|
|
Project.count.should == 3
|
|
|
|
subject.projects.count.should == 2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "#migrate!" do
|
|
|
|
before do
|
|
|
|
Gitlab::Shell.any_instance.stub(:add_repository) do |path|
|
|
|
|
create_temp_repo("#{@repo_path}/#{path}.git")
|
|
|
|
end
|
|
|
|
|
|
|
|
subject.stub(:log).as_null_object
|
|
|
|
|
|
|
|
subject.migrate!
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a new Gollum Wiki for each project" do
|
|
|
|
@projects.each do |project|
|
|
|
|
wiki_path = project.path_with_namespace + ".wiki.git"
|
|
|
|
full_path = @repo_path + "/" + wiki_path
|
|
|
|
File.exist?(full_path).should be_true
|
|
|
|
File.directory?(full_path).should be_true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a gollum page for each unique Wiki page" do
|
|
|
|
@projects.each do |project|
|
|
|
|
wiki = GollumWiki.new(project, nil)
|
|
|
|
wiki.pages.count.should == 3
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a new revision for each old revision of the page" do
|
|
|
|
@projects.each do |project|
|
|
|
|
wiki = GollumWiki.new(project, nil)
|
|
|
|
wiki.pages.each do |page|
|
|
|
|
page.versions.count.should == 2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2013-03-17 02:01:48 +01:00
|
|
|
|
|
|
|
context "wikis with pages that have titles that do not match the slugs" do
|
|
|
|
before do
|
|
|
|
project = @projects.last
|
|
|
|
@page = project.wikis.new(title: "test page", content: "Invalid Page")
|
|
|
|
@page.slug = "totally-incorrect-slug"
|
|
|
|
@page.user = project.owner
|
|
|
|
@page.save!
|
|
|
|
|
|
|
|
create_revision(@page)
|
|
|
|
|
|
|
|
subject.rollback!
|
|
|
|
subject.migrate!
|
|
|
|
end
|
|
|
|
|
|
|
|
it "has a page with a title differing the slug" do
|
|
|
|
@page.slug.should_not == @page.title.parameterize
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a new revision for each old revision of the page" do
|
|
|
|
@projects.each do |project|
|
|
|
|
wiki = GollumWiki.new(project, nil)
|
|
|
|
wiki.pages.each do |page|
|
|
|
|
page.versions.count.should == 2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "changing wiki title from index to home" do
|
|
|
|
before do
|
|
|
|
@project = @projects.last
|
|
|
|
@page = @project.wikis.new(title: "Index", content: "Home Page")
|
|
|
|
@page.slug = "index"
|
|
|
|
@page.user = @project.owner
|
|
|
|
@page.save!
|
|
|
|
|
|
|
|
create_revision(@page)
|
|
|
|
|
|
|
|
subject.rollback!
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a page called Home" do
|
|
|
|
subject.migrate!
|
|
|
|
wiki = GollumWiki.new(@project, nil)
|
|
|
|
page = wiki.find_page("home")
|
|
|
|
page.should be_present
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when a page called Home already exists" do
|
|
|
|
before do
|
|
|
|
@index_page = @project.wikis.new(title: "Index", content: "Index Page")
|
|
|
|
@index_page.slug = "index"
|
|
|
|
@index_page.user = @project.owner
|
|
|
|
@index_page.save!
|
|
|
|
|
|
|
|
create_revision(@index_page)
|
|
|
|
|
|
|
|
@home_page = @project.wikis.new(title: "Home", content: "Home Page")
|
|
|
|
@home_page.slug = "home"
|
|
|
|
@home_page.user = @project.owner
|
|
|
|
@home_page.save!
|
|
|
|
|
|
|
|
create_revision(@home_page)
|
|
|
|
subject.migrate!
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates the index page" do
|
|
|
|
wiki = GollumWiki.new(@project, nil)
|
|
|
|
page = wiki.find_page("index")
|
|
|
|
page.should be_present
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates the home page" do
|
|
|
|
wiki = GollumWiki.new(@project, nil)
|
|
|
|
page = wiki.find_page("home")
|
|
|
|
page.should be_present
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "#rollback!" do
|
|
|
|
before do
|
|
|
|
Gitlab::Shell.any_instance.stub(:add_repository) do |path|
|
|
|
|
create_temp_repo("#{@repo_path}/#{path}.git")
|
|
|
|
end
|
|
|
|
|
|
|
|
Gitlab::Shell.any_instance.stub(:remove_repository) do |path|
|
|
|
|
FileUtils.rm_rf "#{@repo_path}/#{path}.git"
|
|
|
|
end
|
|
|
|
|
|
|
|
subject.stub(:log).as_null_object
|
|
|
|
|
|
|
|
subject.migrate!
|
|
|
|
subject.rollback!
|
|
|
|
end
|
|
|
|
|
|
|
|
it "destroys all of the wiki repositories that were created during migrate!" do
|
|
|
|
@projects.each do |project|
|
|
|
|
wiki_path = project.path_with_namespace + ".wiki.git"
|
|
|
|
full_path = @repo_path + "/" + wiki_path
|
|
|
|
File.exist?(full_path).should be_false
|
|
|
|
end
|
|
|
|
end
|
2013-03-11 03:10:44 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
end
|