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
This commit is contained in:
commit
71ab011a17
30 changed files with 1252 additions and 86 deletions
196
spec/models/gollum_wiki_spec.rb
Normal file
196
spec/models/gollum_wiki_spec.rb
Normal file
|
@ -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
|
164
spec/models/wiki_page_spec.rb
Normal file
164
spec/models/wiki_page_spec.rb
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue