Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-03-15 18:55:07 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-03-15 18:55:07 +0400
commit71ab011a1711db9a1a9ced2c2c92c8427ae6f624 (patch)
tree95e38662d7f022061c2c809f4b6c53067a5df468 /spec
parent4f23c30ace844cdcd2c59da1a758c8a6788ca6f3 (diff)
parentd69a37e0b7163f5a03fcc58fdb6ec0ed1eb20862 (diff)
Merge branch 'use_gollum_wikis' of https://github.com/DanKnox/gitlabhq into DanKnox-use_gollum_wikis
Conflicts: app/views/layouts/project_resource.html.haml app/views/wikis/edit.html.haml app/views/wikis/pages.html.haml app/views/wikis/show.html.haml spec/features/gitlab_flavored_markdown_spec.rb
Diffstat (limited to 'spec')
-rw-r--r--spec/features/gitlab_flavored_markdown_spec.rb21
-rw-r--r--spec/helpers/gitlab_markdown_helper_spec.rb24
-rw-r--r--spec/lib/wiki_to_gollum_migrator_spec.rb114
-rw-r--r--spec/models/gollum_wiki_spec.rb196
-rw-r--r--spec/models/wiki_page_spec.rb164
5 files changed, 498 insertions, 21 deletions
diff --git a/spec/features/gitlab_flavored_markdown_spec.rb b/spec/features/gitlab_flavored_markdown_spec.rb
index 1da18275989..a6485328219 100644
--- a/spec/features/gitlab_flavored_markdown_spec.rb
+++ b/spec/features/gitlab_flavored_markdown_spec.rb
@@ -207,25 +207,4 @@ describe "Gitlab Flavored Markdown" do
page.should have_link("##{issue.id}")
end
end
-
-
- describe "for wikis" do
- before do
- visit project_wiki_path(project, :index)
- fill_in "Title", with: "Circumvent ##{issue.id}"
- fill_in "Content", with: "# Other pages\n\n* [Foo](foo)\n* [Bar](bar)\n\nAlso look at ##{issue.id} :-)"
- click_on "Save"
- end
-
- it "should NOT render title in wikis#show" do
- within(".content .file_title") do # page title
- page.should have_content("Circumvent ##{issue.id}")
- page.should_not have_link("##{issue.id}")
- end
- end
-
- it "should render content in wikis#show" do
- page.should have_link("##{issue.id}")
- end
- end
end
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 1f5fabfbb8e..ac49e4d6da0 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -363,4 +363,28 @@ describe GitlabMarkdownHelper do
markdown(":smile:").should include("src=\"#{url_to_image("emoji/smile")}")
end
end
+
+ describe "#render_wiki_content" do
+ before do
+ @wiki = stub('WikiPage')
+ @wiki.stub(:content).and_return('wiki content')
+ end
+
+ it "should use Gitlab Flavored Markdown for markdown files" do
+ @wiki.stub(:format).and_return(:markdown)
+
+ helper.should_receive(:markdown).with('wiki content')
+
+ helper.render_wiki_content(@wiki)
+ end
+
+ it "should use the Gollum renderer for all other file types" do
+ @wiki.stub(:format).and_return(:rdoc)
+ formatted_content_stub = stub('formatted_content')
+ formatted_content_stub.should_receive(:html_safe)
+ @wiki.stub(:formatted_content).and_return(formatted_content_stub)
+
+ helper.render_wiki_content(@wiki)
+ end
+ end
end
diff --git a/spec/lib/wiki_to_gollum_migrator_spec.rb b/spec/lib/wiki_to_gollum_migrator_spec.rb
new file mode 100644
index 00000000000..a784d836d62
--- /dev/null
+++ b/spec/lib/wiki_to_gollum_migrator_spec.rb
@@ -0,0 +1,114 @@
+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
+ end
+
+
+end
diff --git a/spec/models/gollum_wiki_spec.rb b/spec/models/gollum_wiki_spec.rb
new file mode 100644
index 00000000000..87601683275
--- /dev/null
+++ b/spec/models/gollum_wiki_spec.rb
@@ -0,0 +1,196 @@
+require "spec_helper"
+
+describe GollumWiki do
+
+ def create_temp_repo(path)
+ FileUtils.mkdir_p path
+ command = "git init --quiet #{path};"
+ system(command)
+ end
+
+ def remove_temp_repo(path)
+ FileUtils.rm_rf path
+ end
+
+ def commit_details
+ commit = {name: user.name, email: user.email, message: "test commit"}
+ end
+
+ def create_page(name, content)
+ subject.wiki.write_page(name, :markdown, content, commit_details)
+ end
+
+ def destroy_page(page)
+ subject.wiki.delete_page(page, commit_details)
+ end
+
+ let(:project) { create(:project) }
+ let(:repository) { project.repository }
+ let(:user) { project.owner }
+ let(:gitlab_shell) { Gitlab::Shell.new }
+
+ subject { GollumWiki.new(project, user) }
+
+ before do
+ create_temp_repo(subject.send(:path_to_repo))
+ end
+
+ describe "#path_with_namespace" do
+ it "returns the project path with namespace with the .wiki extension" do
+ subject.path_with_namespace.should == project.path_with_namespace + ".wiki"
+ end
+ end
+
+ describe "#url_to_repo" do
+ it "returns the correct ssh url to the repo" do
+ subject.url_to_repo.should == gitlab_shell.url_to_repo(subject.path_with_namespace)
+ end
+ end
+
+ describe "#ssh_url_to_repo" do
+ it "equals #url_to_repo" do
+ subject.ssh_url_to_repo.should == subject.url_to_repo
+ end
+ end
+
+ describe "#http_url_to_repo" do
+ it "provides the full http url to the repo" do
+ gitlab_url = Gitlab.config.gitlab.url
+ repo_http_url = "#{gitlab_url}/#{subject.path_with_namespace}.git"
+ subject.http_url_to_repo.should == repo_http_url
+ end
+ end
+
+ describe "#wiki" do
+ it "contains a Gollum::Wiki instance" do
+ subject.wiki.should be_a Gollum::Wiki
+ end
+
+ before do
+ Gitlab::Shell.any_instance.stub(:add_repository) do
+ create_temp_repo("#{Rails.root}/tmp/test-git-base-path/non-existant.wiki.git")
+ end
+ project.stub(:path_with_namespace).and_return("non-existant")
+ end
+
+ it "creates a new wiki repo if one does not yet exist" do
+ wiki = GollumWiki.new(project, user)
+ wiki.create_page("index", "test content").should_not == false
+
+ FileUtils.rm_rf wiki.send(:path_to_repo)
+ end
+
+ it "raises CouldNotCreateWikiError if it can't create the wiki repository" do
+ Gitlab::Shell.any_instance.stub(:add_repository).and_return(false)
+ expect { GollumWiki.new(project, user).wiki }.to raise_exception(GollumWiki::CouldNotCreateWikiError)
+ end
+ end
+
+ describe "#pages" do
+ before do
+ create_page("index", "This is an awesome new Gollum Wiki")
+ @pages = subject.pages
+ end
+
+ after do
+ destroy_page(@pages.first.page)
+ end
+
+ it "returns an array of WikiPage instances" do
+ @pages.first.should be_a WikiPage
+ end
+
+ it "returns the correct number of pages" do
+ @pages.count.should == 1
+ end
+ end
+
+ describe "#find_page" do
+ before do
+ create_page("index page", "This is an awesome Gollum Wiki")
+ end
+
+ after do
+ destroy_page(subject.pages.first.page)
+ end
+
+ it "returns the latest version of the page if it exists" do
+ page = subject.find_page("index page")
+ page.title.should == "index page"
+ end
+
+ it "returns nil if the page does not exist" do
+ subject.find_page("non-existant").should == nil
+ end
+
+ it "can find a page by slug" do
+ page = subject.find_page("index-page")
+ page.title.should == "index page"
+ end
+
+ it "returns a WikiPage instance" do
+ page = subject.find_page("index page")
+ page.should be_a WikiPage
+ end
+ end
+
+ describe "#create_page" do
+ after do
+ destroy_page(subject.pages.first.page)
+ end
+
+ it "creates a new wiki page" do
+ subject.create_page("test page", "this is content").should_not == false
+ subject.pages.count.should == 1
+ end
+
+ it "returns false when a duplicate page exists" do
+ subject.create_page("test page", "content")
+ subject.create_page("test page", "content").should == false
+ end
+
+ it "stores an error message when a duplicate page exists" do
+ 2.times { subject.create_page("test page", "content") }
+ subject.error_message.should =~ /Duplicate page:/
+ end
+
+ it "sets the correct commit message" do
+ subject.create_page("test page", "some content", :markdown, "commit message")
+ subject.pages.first.page.version.message.should == "commit message"
+ end
+ end
+
+ describe "#update_page" do
+ before do
+ create_page("update-page", "some content")
+ @gollum_page = subject.wiki.paged("update-page")
+ subject.update_page(@gollum_page, "some other content", :markdown, "updated page")
+ @page = subject.pages.first.page
+ end
+
+ after do
+ destroy_page(@page)
+ end
+
+ it "updates the content of the page" do
+ @page.raw_data.should == "some other content"
+ end
+
+ it "sets the correct commit message" do
+ @page.version.message.should == "updated page"
+ end
+ end
+
+ describe "#delete_page" do
+ before do
+ create_page("index", "some content")
+ @page = subject.wiki.paged("index")
+ end
+
+ it "deletes the page" do
+ subject.delete_page(@page)
+ subject.pages.count.should == 0
+ end
+ end
+
+end
diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb
new file mode 100644
index 00000000000..67f2a6da42d
--- /dev/null
+++ b/spec/models/wiki_page_spec.rb
@@ -0,0 +1,164 @@
+require "spec_helper"
+
+describe WikiPage do
+
+ def create_temp_repo(path)
+ FileUtils.mkdir_p path
+ command = "git init --quiet #{path};"
+ system(command)
+ end
+
+ def remove_temp_repo(path)
+ FileUtils.rm_rf path
+ end
+
+ def commit_details
+ commit = {name: user.name, email: user.email, message: "test commit"}
+ end
+
+ def create_page(name, content)
+ wiki.wiki.write_page(name, :markdown, content, commit_details)
+ end
+
+ def destroy_page(title)
+ page = wiki.wiki.paged(title)
+ wiki.wiki.delete_page(page, commit_details)
+ end
+
+ let(:project) { create(:project) }
+ let(:repository) { project.repository }
+ let(:user) { project.owner }
+ let(:wiki) { GollumWiki.new(project, user) }
+
+ subject { WikiPage.new(wiki) }
+
+ before do
+ create_temp_repo(wiki.send(:path_to_repo))
+ end
+
+ describe "#initialize" do
+ context "when initialized with an existing gollum page" do
+ before do
+ create_page("test page", "test content")
+ @page = wiki.wiki.paged("test page")
+ @wiki_page = WikiPage.new(wiki, @page, true)
+ end
+
+ it "sets the slug attribute" do
+ @wiki_page.slug.should == "test-page"
+ end
+
+ it "sets the title attribute" do
+ @wiki_page.title.should == "test page"
+ end
+
+ it "sets the formatted content attribute" do
+ @wiki_page.content.should == "test content"
+ end
+
+ it "sets the format attribute" do
+ @wiki_page.format.should == :markdown
+ end
+
+ it "sets the message attribute" do
+ @wiki_page.message.should == "test commit"
+ end
+
+ it "sets the version attribute" do
+ @wiki_page.version.should be_a Commit
+ end
+ end
+ end
+
+ describe "validations" do
+ before do
+ subject.attributes = {title: 'title', content: 'content'}
+ end
+
+ it "validates presence of title" do
+ subject.attributes.delete(:title)
+ subject.valid?.should be_false
+ end
+
+ it "validates presence of content" do
+ subject.attributes.delete(:content)
+ subject.valid?.should be_false
+ end
+ end
+
+ before do
+ @wiki_attr = {title: "Index", content: "Home Page", format: "markdown"}
+ end
+
+ describe "#create" do
+ after do
+ destroy_page("Index")
+ end
+
+ context "with valid attributes" do
+ it "saves the wiki page" do
+ subject.create(@wiki_attr)
+ wiki.find_page("Index").should_not be_nil
+ end
+
+ it "returns true" do
+ subject.create(@wiki_attr).should == true
+ end
+ end
+ end
+
+ describe "#update" do
+ before do
+ create_page("Update", "content")
+ @page = wiki.find_page("Update")
+ end
+
+ after do
+ destroy_page("Update")
+ end
+
+ context "with valid attributes" do
+ it "updates the content of the page" do
+ @page.update("new content")
+ @page = wiki.find_page("Update")
+ end
+
+ it "returns true" do
+ @page.update("more content").should be_true
+ end
+ end
+ end
+
+ describe "#destroy" do
+ before do
+ create_page("Delete Page", "content")
+ @page = wiki.find_page("Delete Page")
+ end
+
+ it "should delete the page" do
+ @page.delete
+ wiki.pages.should be_empty
+ end
+
+ it "should return true" do
+ @page.delete.should == true
+ end
+ end
+
+ describe "#versions" do
+ before do
+ create_page("Update", "content")
+ @page = wiki.find_page("Update")
+ end
+
+ after do
+ destroy_page("Update")
+ end
+
+ it "returns an array of all commits for the page" do
+ 3.times { |i| @page.update("content #{i}") }
+ @page.versions.count.should == 4
+ end
+ end
+
+end