diff options
Diffstat (limited to 'spec/models/wiki_page_spec.rb')
-rw-r--r-- | spec/models/wiki_page_spec.rb | 280 |
1 files changed, 120 insertions, 160 deletions
diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb index b87a2d871e5..cba22b2cc4e 100644 --- a/spec/models/wiki_page_spec.rb +++ b/spec/models/wiki_page_spec.rb @@ -200,180 +200,160 @@ describe WikiPage do end describe '#create' do - shared_examples 'create method' do - context 'with valid attributes' do - it 'raises an error if a page with the same path already exists' do - create_page('New Page', 'content') - create_page('foo/bar', 'content') - expect { create_page('New Page', 'other content') }.to raise_error Gitlab::Git::Wiki::DuplicatePageError - expect { create_page('foo/bar', 'other content') }.to raise_error Gitlab::Git::Wiki::DuplicatePageError - - destroy_page('New Page') - destroy_page('bar', 'foo') - end + context 'with valid attributes' do + it 'raises an error if a page with the same path already exists' do + create_page('New Page', 'content') + create_page('foo/bar', 'content') + expect { create_page('New Page', 'other content') }.to raise_error Gitlab::Git::Wiki::DuplicatePageError + expect { create_page('foo/bar', 'other content') }.to raise_error Gitlab::Git::Wiki::DuplicatePageError - it 'if the title is preceded by a / it is removed' do - create_page('/New Page', 'content') + destroy_page('New Page') + destroy_page('bar', 'foo') + end - expect(wiki.find_page('New Page')).not_to be_nil + it 'if the title is preceded by a / it is removed' do + create_page('/New Page', 'content') - destroy_page('New Page') - end + expect(wiki.find_page('New Page')).not_to be_nil + + destroy_page('New Page') end end + end - context 'when Gitaly is enabled' do - it_behaves_like 'create method' + describe "#update" do + before do + create_page("Update", "content") + @page = wiki.find_page("Update") end - context 'when Gitaly is disabled', :skip_gitaly_mock do - it_behaves_like 'create method' + after do + destroy_page(@page.title, @page.directory) end - end - describe "#update" do - shared_examples 'update method' do - before do - create_page("Update", "content") + context "with valid attributes" do + it "updates the content of the page" do + new_content = "new content" + + @page.update(content: new_content) @page = wiki.find_page("Update") - end - after do - destroy_page(@page.title, @page.directory) + expect(@page.content).to eq("new content") end - context "with valid attributes" do - it "updates the content of the page" do - new_content = "new content" - - @page.update(content: new_content) - @page = wiki.find_page("Update") - - expect(@page.content).to eq("new content") - end + it "updates the title of the page" do + new_title = "Index v.1.2.4" - it "updates the title of the page" do - new_title = "Index v.1.2.4" + @page.update(title: new_title) + @page = wiki.find_page(new_title) - @page.update(title: new_title) - @page = wiki.find_page(new_title) - - expect(@page.title).to eq(new_title) - end + expect(@page.title).to eq(new_title) + end - it "returns true" do - expect(@page.update(content: "more content")).to be_truthy - end + it "returns true" do + expect(@page.update(content: "more content")).to be_truthy end + end - context 'with same last commit sha' do - it 'returns true' do - expect(@page.update(content: 'more content', last_commit_sha: @page.last_commit_sha)).to be_truthy - end + context 'with same last commit sha' do + it 'returns true' do + expect(@page.update(content: 'more content', last_commit_sha: @page.last_commit_sha)).to be_truthy end + end - context 'with different last commit sha' do - it 'raises exception' do - expect { @page.update(content: 'more content', last_commit_sha: 'xxx') }.to raise_error(WikiPage::PageChangedError) - end + context 'with different last commit sha' do + it 'raises exception' do + expect { @page.update(content: 'more content', last_commit_sha: 'xxx') }.to raise_error(WikiPage::PageChangedError) end + end - context 'when renaming a page' do - it 'raises an error if the page already exists' do - create_page('Existing Page', 'content') + context 'when renaming a page' do + it 'raises an error if the page already exists' do + create_page('Existing Page', 'content') - expect { @page.update(title: 'Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError) - expect(@page.title).to eq 'Update' - expect(@page.content).to eq 'new_content' + expect { @page.update(title: 'Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError) + expect(@page.title).to eq 'Update' + expect(@page.content).to eq 'new_content' - destroy_page('Existing Page') - end + destroy_page('Existing Page') + end - it 'updates the content and rename the file' do - new_title = 'Renamed Page' - new_content = 'updated content' + it 'updates the content and rename the file' do + new_title = 'Renamed Page' + new_content = 'updated content' - expect(@page.update(title: new_title, content: new_content)).to be_truthy + expect(@page.update(title: new_title, content: new_content)).to be_truthy - @page = wiki.find_page(new_title) + @page = wiki.find_page(new_title) - expect(@page).not_to be_nil - expect(@page.content).to eq new_content - end + expect(@page).not_to be_nil + expect(@page.content).to eq new_content end + end - context 'when moving a page' do - it 'raises an error if the page already exists' do - create_page('foo/Existing Page', 'content') - - expect { @page.update(title: 'foo/Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError) - expect(@page.title).to eq 'Update' - expect(@page.content).to eq 'new_content' + context 'when moving a page' do + it 'raises an error if the page already exists' do + create_page('foo/Existing Page', 'content') - destroy_page('Existing Page', 'foo') - end + expect { @page.update(title: 'foo/Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError) + expect(@page.title).to eq 'Update' + expect(@page.content).to eq 'new_content' - it 'updates the content and moves the file' do - new_title = 'foo/Other Page' - new_content = 'new_content' - - expect(@page.update(title: new_title, content: new_content)).to be_truthy + destroy_page('Existing Page', 'foo') + end - page = wiki.find_page(new_title) + it 'updates the content and moves the file' do + new_title = 'foo/Other Page' + new_content = 'new_content' - expect(page).not_to be_nil - expect(page.content).to eq new_content - end + expect(@page.update(title: new_title, content: new_content)).to be_truthy - context 'in subdir' do - before do - create_page('foo/Existing Page', 'content') - @page = wiki.find_page('foo/Existing Page') - end + page = wiki.find_page(new_title) - it 'moves the page to the root folder if the title is preceded by /', :skip_gitaly_mock do - expect(@page.slug).to eq 'foo/Existing-Page' - expect(@page.update(title: '/Existing Page', content: 'new_content')).to be_truthy - expect(@page.slug).to eq 'Existing-Page' - end + expect(page).not_to be_nil + expect(page.content).to eq new_content + end - it 'does nothing if it has the same title' do - original_path = @page.slug + context 'in subdir' do + before do + create_page('foo/Existing Page', 'content') + @page = wiki.find_page('foo/Existing Page') + end - expect(@page.update(title: 'Existing Page', content: 'new_content')).to be_truthy - expect(@page.slug).to eq original_path - end + it 'moves the page to the root folder if the title is preceded by /' do + expect(@page.slug).to eq 'foo/Existing-Page' + expect(@page.update(title: '/Existing Page', content: 'new_content')).to be_truthy + expect(@page.slug).to eq 'Existing-Page' end - context 'in root dir' do - it 'does nothing if the title is preceded by /' do - original_path = @page.slug + it 'does nothing if it has the same title' do + original_path = @page.slug - expect(@page.update(title: '/Update', content: 'new_content')).to be_truthy - expect(@page.slug).to eq original_path - end + expect(@page.update(title: 'Existing Page', content: 'new_content')).to be_truthy + expect(@page.slug).to eq original_path end end - context "with invalid attributes" do - it 'aborts update if title blank' do - expect(@page.update(title: '', content: 'new_content')).to be_falsey - expect(@page.content).to eq 'new_content' + context 'in root dir' do + it 'does nothing if the title is preceded by /' do + original_path = @page.slug - page = wiki.find_page('Update') - expect(page.content).to eq 'content' - - @page.title = 'Update' + expect(@page.update(title: '/Update', content: 'new_content')).to be_truthy + expect(@page.slug).to eq original_path end end end - context 'when Gitaly is enabled' do - it_behaves_like 'update method' - end + context "with invalid attributes" do + it 'aborts update if title blank' do + expect(@page.update(title: '', content: 'new_content')).to be_falsey + expect(@page.content).to eq 'new_content' - context 'when Gitaly is disabled', :skip_gitaly_mock do - it_behaves_like 'update method' + page = wiki.find_page('Update') + expect(page.content).to eq 'content' + + @page.title = 'Update' + end end end @@ -394,34 +374,24 @@ describe WikiPage do end describe "#versions" do - shared_examples 'wiki page versions' do - let(:page) { wiki.find_page("Update") } + let(:page) { wiki.find_page("Update") } - before do - create_page("Update", "content") - end - - after do - destroy_page("Update") - end - - it "returns an array of all commits for the page" do - 3.times { |i| page.update(content: "content #{i}") } - - expect(page.versions.count).to eq(4) - end + before do + create_page("Update", "content") + end - it 'returns instances of WikiPageVersion' do - expect(page.versions).to all( be_a(Gitlab::Git::WikiPageVersion) ) - end + after do + destroy_page("Update") end - context 'when Gitaly is enabled' do - it_behaves_like 'wiki page versions' + it "returns an array of all commits for the page" do + 3.times { |i| page.update(content: "content #{i}") } + + expect(page.versions.count).to eq(4) end - context 'when Gitaly is disabled', :disable_gitaly do - it_behaves_like 'wiki page versions' + it 'returns instances of WikiPageVersion' do + expect(page.versions).to all( be_a(Gitlab::Git::WikiPageVersion) ) end end @@ -555,23 +525,13 @@ describe WikiPage do end describe '#formatted_content' do - shared_examples 'fetching page formatted content' do - it 'returns processed content of the page' do - subject.create({ title: "RDoc", content: "*bold*", format: "rdoc" }) - page = wiki.find_page('RDoc') - - expect(page.formatted_content).to eq("\n<p><strong>bold</strong></p>\n") + it 'returns processed content of the page' do + subject.create({ title: "RDoc", content: "*bold*", format: "rdoc" }) + page = wiki.find_page('RDoc') - destroy_page('RDoc') - end - end - - context 'when Gitaly wiki_page_formatted_data is enabled' do - it_behaves_like 'fetching page formatted content' - end + expect(page.formatted_content).to eq("\n<p><strong>bold</strong></p>\n") - context 'when Gitaly wiki_page_formatted_data is disabled', :disable_gitaly do - it_behaves_like 'fetching page formatted content' + destroy_page('RDoc') end end |