Commit d40912bb authored by Francisco Javier López's avatar Francisco Javier López Committed by Sean McGivern

Removing gitaly flags

parent 683984f2
...@@ -25,9 +25,8 @@ module Gitlab ...@@ -25,9 +25,8 @@ module Gitlab
@repository.exists? @repository.exists?
end end
# Disabled because of https://gitlab.com/gitlab-org/gitaly/merge_requests/539
def write_page(name, format, content, commit_details) def write_page(name, format, content, commit_details)
@repository.gitaly_migrate(:wiki_write_page, status: Gitlab::GitalyClient::MigrationStatus::DISABLED) do |is_enabled| @repository.gitaly_migrate(:wiki_write_page) do |is_enabled|
if is_enabled if is_enabled
gitaly_write_page(name, format, content, commit_details) gitaly_write_page(name, format, content, commit_details)
gollum_wiki.clear_cache gollum_wiki.clear_cache
...@@ -48,9 +47,8 @@ module Gitlab ...@@ -48,9 +47,8 @@ module Gitlab
end end
end end
# Disable because of https://gitlab.com/gitlab-org/gitlab-ce/issues/42094
def update_page(page_path, title, format, content, commit_details) def update_page(page_path, title, format, content, commit_details)
@repository.gitaly_migrate(:wiki_update_page, status: Gitlab::GitalyClient::MigrationStatus::DISABLED) do |is_enabled| @repository.gitaly_migrate(:wiki_update_page) do |is_enabled|
if is_enabled if is_enabled
gitaly_update_page(page_path, title, format, content, commit_details) gitaly_update_page(page_path, title, format, content, commit_details)
gollum_wiki.clear_cache gollum_wiki.clear_cache
......
require 'spec_helper' require 'spec_helper'
# Remove skip_gitaly_mock flag when gitaly_update_page implements moving pages describe 'User updates wiki page' do
describe 'User updates wiki page', :skip_gitaly_mock do shared_examples 'wiki page user update' do
let(:user) { create(:user) } let(:user) { create(:user) }
before do
project.add_master(user)
sign_in(user)
end
context 'when wiki is empty' do
before do before do
visit(project_wikis_path(project)) project.add_master(user)
sign_in(user)
end end
context 'in a user namespace' do context 'when wiki is empty' do
let(:project) { create(:project, namespace: user.namespace) } before do
visit(project_wikis_path(project))
it 'redirects back to the home edit page' do
page.within(:css, '.wiki-form .form-actions') do
click_on('Cancel')
end
expect(current_path).to eq project_wiki_path(project, :home)
end end
it 'updates a page that has a path', :js do context 'in a user namespace' do
click_on('New page') let(:project) { create(:project, namespace: user.namespace) }
page.within('#modal-new-wiki') do it 'redirects back to the home edit page' do
fill_in(:new_wiki_path, with: 'one/two/three-test') page.within(:css, '.wiki-form .form-actions') do
click_on('Create page') click_on('Cancel')
end end
page.within '.wiki-form' do expect(current_path).to eq project_wiki_path(project, :home)
fill_in(:wiki_content, with: 'wiki content')
click_on('Create page')
end end
expect(current_path).to include('one/two/three-test') it 'updates a page that has a path', :js do
expect(find('.wiki-pages')).to have_content('Three') click_on('New page')
first(:link, text: 'Three').click page.within('#modal-new-wiki') do
fill_in(:new_wiki_path, with: 'one/two/three-test')
click_on('Create page')
end
expect(find('.nav-text')).to have_content('Three') page.within '.wiki-form' do
fill_in(:wiki_content, with: 'wiki content')
click_on('Create page')
end
click_on('Edit') expect(current_path).to include('one/two/three-test')
expect(find('.wiki-pages')).to have_content('Three')
expect(current_path).to include('one/two/three-test') first(:link, text: 'Three').click
expect(page).to have_content('Edit Page')
fill_in('Content', with: 'Updated Wiki Content') expect(find('.nav-text')).to have_content('Three')
click_on('Save changes')
expect(page).to have_content('Updated Wiki Content') click_on('Edit')
end
end
end
context 'when wiki is not empty' do expect(current_path).to include('one/two/three-test')
let(:project_wiki) { create(:project_wiki, project: project, user: project.creator) } expect(page).to have_content('Edit Page')
let!(:wiki_page) { create(:wiki_page, wiki: project_wiki, attrs: { title: 'home', content: 'Home page' }) }
before do fill_in('Content', with: 'Updated Wiki Content')
visit(project_wikis_path(project)) click_on('Save changes')
expect(page).to have_content('Updated Wiki Content')
end
end
end end
context 'in a user namespace' do context 'when wiki is not empty' do
let(:project) { create(:project, namespace: user.namespace) } let(:project_wiki) { create(:project_wiki, project: project, user: project.creator) }
let!(:wiki_page) { create(:wiki_page, wiki: project_wiki, attrs: { title: 'home', content: 'Home page' }) }
it 'updates a page' do before do
click_link('Edit') visit(project_wikis_path(project))
end
# Commit message field should have correct value. context 'in a user namespace' do
expect(page).to have_field('wiki[message]', with: 'Update home') let(:project) { create(:project, namespace: user.namespace) }
fill_in(:wiki_content, with: 'My awesome wiki!') it 'updates a page' do
click_button('Save changes') click_link('Edit')
expect(page).to have_content('Home') # Commit message field should have correct value.
expect(page).to have_content("Last edited by #{user.name}") expect(page).to have_field('wiki[message]', with: 'Update home')
expect(page).to have_content('My awesome wiki!')
end
it 'shows a validation error message' do fill_in(:wiki_content, with: 'My awesome wiki!')
click_link('Edit') click_button('Save changes')
fill_in(:wiki_content, with: '') expect(page).to have_content('Home')
click_button('Save changes') expect(page).to have_content("Last edited by #{user.name}")
expect(page).to have_content('My awesome wiki!')
end
expect(page).to have_selector('.wiki-form') it 'shows a validation error message' do
expect(page).to have_content('Edit Page') click_link('Edit')
expect(page).to have_content('The form contains the following error:')
expect(page).to have_content("Content can't be blank")
expect(find('textarea#wiki_content').value).to eq('')
end
it 'shows the autocompletion dropdown', :js do fill_in(:wiki_content, with: '')
click_link('Edit') click_button('Save changes')
find('#wiki_content').native.send_keys('') expect(page).to have_selector('.wiki-form')
fill_in(:wiki_content, with: '@') expect(page).to have_content('Edit Page')
expect(page).to have_content('The form contains the following error:')
expect(page).to have_content("Content can't be blank")
expect(find('textarea#wiki_content').value).to eq('')
end
expect(page).to have_selector('.atwho-view') it 'shows the autocompletion dropdown', :js do
end click_link('Edit')
it 'shows the error message' do find('#wiki_content').native.send_keys('')
click_link('Edit') fill_in(:wiki_content, with: '@')
wiki_page.update(content: 'Update') expect(page).to have_selector('.atwho-view')
end
click_button('Save changes') it 'shows the error message' do
click_link('Edit')
expect(page).to have_content('Someone edited the page the same time you did.') wiki_page.update(content: 'Update')
end
it 'updates a page' do click_button('Save changes')
click_on('Edit')
fill_in('Content', with: 'Updated Wiki Content')
click_on('Save changes')
expect(page).to have_content('Updated Wiki Content') expect(page).to have_content('Someone edited the page the same time you did.')
end end
it 'cancels edititng of a page' do it 'updates a page' do
click_on('Edit') click_on('Edit')
fill_in('Content', with: 'Updated Wiki Content')
click_on('Save changes')
page.within(:css, '.wiki-form .form-actions') do expect(page).to have_content('Updated Wiki Content')
click_on('Cancel')
end end
expect(current_path).to eq(project_wiki_path(project, wiki_page)) it 'cancels edititng of a page' do
click_on('Edit')
page.within(:css, '.wiki-form .form-actions') do
click_on('Cancel')
end
expect(current_path).to eq(project_wiki_path(project, wiki_page))
end
end end
end
context 'in a group namespace' do context 'in a group namespace' do
let(:project) { create(:project, namespace: create(:group, :public)) } let(:project) { create(:project, namespace: create(:group, :public)) }
it 'updates a page' do it 'updates a page' do
click_link('Edit') click_link('Edit')
# Commit message field should have correct value. # Commit message field should have correct value.
expect(page).to have_field('wiki[message]', with: 'Update home') expect(page).to have_field('wiki[message]', with: 'Update home')
fill_in(:wiki_content, with: 'My awesome wiki!') fill_in(:wiki_content, with: 'My awesome wiki!')
click_button('Save changes') click_button('Save changes')
expect(page).to have_content('Home') expect(page).to have_content('Home')
expect(page).to have_content("Last edited by #{user.name}") expect(page).to have_content("Last edited by #{user.name}")
expect(page).to have_content('My awesome wiki!') expect(page).to have_content('My awesome wiki!')
end
end end
end end
end
context 'when the page is in a subdir' do context 'when the page is in a subdir' do
let!(:project) { create(:project, namespace: user.namespace) } let!(:project) { create(:project, namespace: user.namespace) }
let(:project_wiki) { create(:project_wiki, project: project, user: project.creator) } let(:project_wiki) { create(:project_wiki, project: project, user: project.creator) }
let(:page_name) { 'page_name' } let(:page_name) { 'page_name' }
let(:page_dir) { "foo/bar/#{page_name}" } let(:page_dir) { "foo/bar/#{page_name}" }
let!(:wiki_page) { create(:wiki_page, wiki: project_wiki, attrs: { title: page_dir, content: 'Home page' }) } let!(:wiki_page) { create(:wiki_page, wiki: project_wiki, attrs: { title: page_dir, content: 'Home page' }) }
before do before do
visit(project_wiki_edit_path(project, wiki_page)) visit(project_wiki_edit_path(project, wiki_page))
end end
it 'moves the page to the root folder' do it 'moves the page to the root folder', :skip_gitaly_mock do
fill_in(:wiki_title, with: "/#{page_name}") fill_in(:wiki_title, with: "/#{page_name}")
click_button('Save changes') click_button('Save changes')
expect(current_path).to eq(project_wiki_path(project, page_name)) expect(current_path).to eq(project_wiki_path(project, page_name))
end end
it 'moves the page to other dir' do it 'moves the page to other dir' do
new_page_dir = "foo1/bar1/#{page_name}" new_page_dir = "foo1/bar1/#{page_name}"
fill_in(:wiki_title, with: new_page_dir) fill_in(:wiki_title, with: new_page_dir)
click_button('Save changes') click_button('Save changes')
expect(current_path).to eq(project_wiki_path(project, new_page_dir)) expect(current_path).to eq(project_wiki_path(project, new_page_dir))
end end
it 'remains in the same place if title has not changed' do it 'remains in the same place if title has not changed' do
original_path = project_wiki_path(project, wiki_page) original_path = project_wiki_path(project, wiki_page)
fill_in(:wiki_title, with: page_name) fill_in(:wiki_title, with: page_name)
click_button('Save changes') click_button('Save changes')
expect(current_path).to eq(original_path) expect(current_path).to eq(original_path)
end end
it 'can be moved to a different dir with a different name' do it 'can be moved to a different dir with a different name' do
new_page_dir = "foo1/bar1/new_page_name" new_page_dir = "foo1/bar1/new_page_name"
fill_in(:wiki_title, with: new_page_dir) fill_in(:wiki_title, with: new_page_dir)
click_button('Save changes') click_button('Save changes')
expect(current_path).to eq(project_wiki_path(project, new_page_dir)) expect(current_path).to eq(project_wiki_path(project, new_page_dir))
end end
it 'can be renamed and moved to the root folder' do it 'can be renamed and moved to the root folder' do
new_name = 'new_page_name' new_name = 'new_page_name'
fill_in(:wiki_title, with: "/#{new_name}") fill_in(:wiki_title, with: "/#{new_name}")
click_button('Save changes') click_button('Save changes')
expect(current_path).to eq(project_wiki_path(project, new_name)) expect(current_path).to eq(project_wiki_path(project, new_name))
end end
it 'squishes the title before creating the page' do it 'squishes the title before creating the page' do
new_page_dir = " foo1 / bar1 / #{page_name} " new_page_dir = " foo1 / bar1 / #{page_name} "
fill_in(:wiki_title, with: new_page_dir) fill_in(:wiki_title, with: new_page_dir)
click_button('Save changes') click_button('Save changes')
expect(current_path).to eq(project_wiki_path(project, "foo1/bar1/#{page_name}")) expect(current_path).to eq(project_wiki_path(project, "foo1/bar1/#{page_name}"))
end
end end
end end
context 'when Gitaly is enabled' do
it_behaves_like 'wiki page user update'
end
context 'when Gitaly is disabled', :skip_gitaly_mock do
it_behaves_like 'wiki page user update'
end
end end
require 'spec_helper' require 'spec_helper'
# Remove skip_gitaly_mock flag when gitaly_update_page implements moving pages describe 'User views a wiki page' do
describe 'User views a wiki page', :skip_gitaly_mock do shared_examples 'wiki page user view' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, namespace: user.namespace) } let(:project) { create(:project, namespace: user.namespace) }
let(:wiki_page) do let(:wiki_page) do
create(:wiki_page, create(:wiki_page,
wiki: project.wiki, wiki: project.wiki,
attrs: { title: 'home', content: 'Look at this [image](image.jpg)\n\n ![alt text](image.jpg)' }) attrs: { title: 'home', content: 'Look at this [image](image.jpg)\n\n ![alt text](image.jpg)' })
end end
before do
project.add_master(user)
sign_in(user)
end
context 'when wiki is empty' do
before do before do
visit(project_wikis_path(project)) project.add_master(user)
sign_in(user)
end
click_on('New page') context 'when wiki is empty' do
before do
visit(project_wikis_path(project))
page.within('#modal-new-wiki') do click_on('New page')
fill_in(:new_wiki_path, with: 'one/two/three-test')
click_on('Create page')
end
page.within('.wiki-form') do page.within('#modal-new-wiki') do
fill_in(:wiki_content, with: 'wiki content') fill_in(:new_wiki_path, with: 'one/two/three-test')
click_on('Create page') click_on('Create page')
end
page.within('.wiki-form') do
fill_in(:wiki_content, with: 'wiki content')
click_on('Create page')
end
end end
end
it 'shows the history of a page that has a path', :js do it 'shows the history of a page that has a path', :js do
expect(current_path).to include('one/two/three-test') expect(current_path).to include('one/two/three-test')
first(:link, text: 'Three').click first(:link, text: 'Three').click
click_on('Page history') click_on('Page history')
expect(current_path).to include('one/two/three-test') expect(current_path).to include('one/two/three-test')
page.within(:css, '.nav-text') do page.within(:css, '.nav-text') do
expect(page).to have_content('History') expect(page).to have_content('History')
end
end end
end
it 'shows an old version of a page', :js do it 'shows an old version of a page', :js do
expect(current_path).to include('one/two/three-test') expect(current_path).to include('one/two/three-test')
expect(find('.wiki-pages')).to have_content('Three') expect(find('.wiki-pages')).to have_content('Three')
first(:link, text: 'Three').click first(:link, text: 'Three').click
expect(find('.nav-text')).to have_content('Three') expect(find('.nav-text')).to have_content('Three')
click_on('Edit') click_on('Edit')
expect(current_path).to include('one/two/three-test') expect(current_path).to include('one/two/three-test')
expect(page).to have_content('Edit Page') expect(page).to have_content('Edit Page')
fill_in('Content', with: 'Updated Wiki Content') fill_in('Content', with: 'Updated Wiki Content')
click_on('Save changes') click_on('Save changes')
click_on('Page history') click_on('Page history')
page.within(:css, '.nav-text') do page.within(:css, '.nav-text') do
expect(page).to have_content('History') expect(page).to have_content('History')
end end
find('a[href*="?version_id"]') find('a[href*="?version_id"]')
end
end end
end
context 'when a page does not have history' do context 'when a page does not have history' do
before do before do
visit(project_wiki_path(project, wiki_page)) visit(project_wiki_path(project, wiki_page))
end end
it 'shows all the pages' do it 'shows all the pages' do
expect(page).to have_content(user.name) expect(page).to have_content(user.name)
expect(find('.wiki-pages')).to have_content(wiki_page.title.capitalize) expect(find('.wiki-pages')).to have_content(wiki_page.title.capitalize)
end end
it 'shows a file stored in a page' do it 'shows a file stored in a page' do
gollum_file_double = double('Gollum::File', gollum_file_double = double('Gollum::File',
mime_type: 'image/jpeg', mime_type: 'image/jpeg',
name: 'images/image.jpg', name: 'images/image.jpg',
path: 'images/image.jpg', path: 'images/image.jpg',
raw_data: '') raw_data: '')
wiki_file = Gitlab::Git::WikiFile.new(gollum_file_double) wiki_file = Gitlab::Git::WikiFile.new(gollum_file_double)
allow(wiki_file).to receive(:mime_type).and_return('image/jpeg') allow(wiki_file).to receive(:mime_type).and_return('image/jpeg')
allow_any_instance_of(ProjectWiki).to receive(:find_file).with('image.jpg', nil).and_return(wiki_file) allow_any_instance_of(ProjectWiki).to receive(:find_file).with('image.jpg', nil).and_return(wiki_file)
expect(page).to have_xpath('//img[@data-src="image.jpg"]') expect(page).to have_xpath('//img[@data-src="image.jpg"]')
expect(page).to have_link('image', href: "#{project.wiki.wiki_base_path}/image.jpg") expect(page).to have_link('image', href: "#{project.wiki.wiki_base_path}/image.jpg")
click_on('image') click_on('image')
expect(current_path).to match('wikis/image.jpg') expect(current_path).to match('wikis/image.jpg')
expect(page).not_to have_xpath('/html') # Page should render the image which means there is no html involved expect(page).not_to have_xpath('/html') # Page should render the image which means there is no html involved
end end
it 'shows the creation page if file does not exist' do it 'shows the creation page if file does not exist' do
expect(page).to have_link('image', href: "#{project.wiki.wiki_base_path}/image.jpg") expect(page).to have_link('image', href: "#{project.wiki.wiki_base_path}/image.jpg")
click_on('image') click_on('image')
expect(current_path).to match('wikis/image.jpg') expect(current_path).to match('wikis/image.jpg')
expect(page).to have_content('New Wiki Page') expect(page).to have_content('New Wiki Page')
expect(page).to have_content('Create page') expect(page).to have_content('Create page')
end
end end
end
context 'when a page has history' do context 'when a page has history' do
before do before do
wiki_page.update(message: 'updated home', content: 'updated [some link](other-page)') wiki_page.update(message: 'updated home', content: 'updated [some link](other-page)')
end end
it 'shows the page history' do it 'shows the page history' do
visit(project_wiki_path(project, wiki_page)) visit(project_wiki_path(project, wiki_page))
expect(page).to have_selector('a.btn', text: 'Edit') expect(page).to have_selector('a.btn', text: 'Edit')
click_on('Page history') click_on('Page history')
expect(page).to have_content(user.name) expect(page).to have_content(user.name)
expect(page).to have_content("#{user.username} created page: home") expect(page).to have_content("#{user.username} created page: home")
expect(page).to have_content('updated home') expect(page).to have_content('updated home')
end
it 'does not show the "Edit" button' do
visit(project_wiki_path(project, wiki_page, version_id: wiki_page.versions.last.id))
expect(page).not_to have_selector('a.btn', text: 'Edit')
end
end end
it 'does not show the "Edit" button' do it 'opens a default wiki page', :js do
visit(project_wiki_path(project, wiki_page, version_id: wiki_page.versions.last.id)) visit(project_path(project))
expect(page).not_to have_selector('a.btn', text: 'Edit') find('.shortcuts-wiki').click
expect(page).to have_content('Home · Create Page')
end end
end end
it 'opens a default wiki page', :js do context 'when Gitaly is enabled' do
visit(project_path(project)) it_behaves_like 'wiki page user view'
end
find('.shortcuts-wiki').click
expect(page).to have_content('Home · Create Page') context 'when Gitaly is disabled', :skip_gitaly_mock do
it_behaves_like 'wiki page user view'
end end
end end
...@@ -3,34 +3,38 @@ require 'spec_helper' ...@@ -3,34 +3,38 @@ require 'spec_helper'
describe Gitlab::Git::Wiki do describe Gitlab::Git::Wiki do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:user) { project.owner } let(:user) { project.owner }
let(:wiki) { ProjectWiki.new(project, user) } let(:project_wiki) { ProjectWiki.new(project, user) }
let(:gollum_wiki) { wiki.wiki } subject { project_wiki.wiki }
# Remove skip_gitaly_mock flag when gitaly_find_page when # Remove skip_gitaly_mock flag when gitaly_find_page when
# https://gitlab.com/gitlab-org/gitaly/merge_requests/539 gets merged # https://gitlab.com/gitlab-org/gitlab-ce/issues/42039 is solved
describe '#page', :skip_gitaly_mock do describe '#page', :skip_gitaly_mock do
it 'returns the right page' do before do
create_page('page1', 'content') create_page('page1', 'content')
create_page('foo/page1', 'content') create_page('foo/page1', 'content foo/page1')
end
expect(gollum_wiki.page(title: 'page1', dir: '').url_path).to eq 'page1'
expect(gollum_wiki.page(title: 'page1', dir: 'foo').url_path).to eq 'foo/page1'
after do
destroy_page('page1') destroy_page('page1')
destroy_page('page1', 'foo') destroy_page('page1', 'foo')
end end
it 'returns the right page' do
expect(subject.page(title: 'page1', dir: '').url_path).to eq 'page1'
expect(subject.page(title: 'page1', dir: 'foo').url_path).to eq 'foo/page1'
end
end end
def create_page(name, content) def create_page(name, content)
gollum_wiki.write_page(name, :markdown, content, commit_details) subject.write_page(name, :markdown, content, commit_details(name))
end end
def commit_details def commit_details(name)
Gitlab::Git::Wiki::CommitDetails.new(user.name, user.email, "test commit") Gitlab::Git::Wiki::CommitDetails.new(user.name, user.email, "created page #{name}")
end end
def destroy_page(title, dir = '') def destroy_page(title, dir = '')
page = gollum_wiki.page(title: title, dir: dir) page = subject.page(title: title, dir: dir)
wiki.delete_page(page, "test commit") project_wiki.delete_page(page, "test commit")
end end
end end
...@@ -188,162 +188,181 @@ describe WikiPage do ...@@ -188,162 +188,181 @@ describe WikiPage do
end end
end end
describe '#create', :skip_gitaly_mock do describe '#create' do
context 'with valid attributes' do shared_examples 'create method' do
it 'raises an error if a page with the same path already exists' do context 'with valid attributes' do
create_page('New Page', 'content') it 'raises an error if a page with the same path already exists' do
create_page('foo/bar', 'content') create_page('New Page', 'content')
expect { create_page('New Page', 'other content') }.to raise_error Gitlab::Git::Wiki::DuplicatePageError create_page('foo/bar', 'content')
expect { create_page('foo/bar', 'other content') }.to raise_error Gitlab::Git::Wiki::DuplicatePageError 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') destroy_page('New Page')
end destroy_page('bar', 'foo')
end
it 'if the title is preceded by a / it is removed' do it 'if the title is preceded by a / it is removed' do
create_page('/New Page', 'content') create_page('/New Page', 'content')
expect(wiki.find_page('New Page')).not_to be_nil expect(wiki.find_page('New Page')).not_to be_nil
destroy_page('New Page') destroy_page('New Page')
end
end end
end end
end
# Remove skip_gitaly_mock flag when gitaly_update_page implements moving pages context 'when Gitaly is enabled' do
describe "#update", :skip_gitaly_mock do it_behaves_like 'create method'
before do
create_page("Update", "content")
@page = wiki.find_page("Update")
end end
after do context 'when Gitaly is disabled', :skip_gitaly_mock do
destroy_page(@page.title, @page.directory) it_behaves_like 'create method'
end end
end
context "with valid attributes" do describe "#update" do
it "updates the content of the page" do shared_examples 'update method' do
new_content = "new content" before do
create_page("Update", "content")
@page.update(content: new_content)
@page = wiki.find_page("Update") @page = wiki.find_page("Update")
end
expect(@page.content).to eq("new content") after do
destroy_page(@page.title, @page.directory)
end end
it "updates the title of the page" do context "with valid attributes" do
new_title = "Index v.1.2.4" it "updates the content of the page" do
new_content = "new content"
@page.update(title: new_title) @page.update(content: new_content)
@page = wiki.find_page(new_title) @page = wiki.find_page("Update")
expect(@page.title).to eq(new_title) expect(@page.content).to eq("new content")
end end
it "returns true" do it "updates the title of the page" do
expect(@page.update(content: "more content")).to be_truthy new_title = "Index v.1.2.4"
@page.update(title: new_title)
@page = wiki.find_page(new_title)
expect(@page.title).to eq(new_title)
end
it "returns true" do
expect(@page.update(content: "more content")).to be_truthy
end
end end
end
context 'with same last commit sha' do context 'with same last commit sha' do
it 'returns true' do it 'returns true' do
expect(@page.update(content: 'more content', last_commit_sha: @page.last_commit_sha)).to be_truthy expect(@page.update(content: 'more content', last_commit_sha: @page.last_commit_sha)).to be_truthy
end
end end
end
context 'with different last commit sha' do context 'with different last commit sha' do
it 'raises exception' do it 'raises exception' do
expect { @page.update(content: 'more content', last_commit_sha: 'xxx') }.to raise_error(WikiPage::PageChangedError) expect { @page.update(content: 'more content', last_commit_sha: 'xxx') }.to raise_error(WikiPage::PageChangedError)
end
end end
end
context 'when renaming a page' do context 'when renaming a page' do
it 'raises an error if the page already exists' do it 'raises an error if the page already exists' do
create_page('Existing Page', 'content') create_page('Existing Page', 'content')
expect { @page.update(title: 'Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError) expect { @page.update(title: 'Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError)
expect(@page.title).to eq 'Update' expect(@page.title).to eq 'Update'
expect(@page.content).to eq 'new_content' expect(@page.content).to eq 'new_content'
destroy_page('Existing Page') destroy_page('Existing Page')
end end
it 'updates the content and rename the file' do it 'updates the content and rename the file' do
new_title = 'Renamed Page' new_title = 'Renamed Page'
new_content = 'updated content' 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).not_to be_nil
expect(@page.content).to eq new_content expect(@page.content).to eq new_content
end
end 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) context 'when moving a page' do
expect(@page.title).to eq 'Update' it 'raises an error if the page already exists' do
expect(@page.content).to eq 'new_content' create_page('foo/Existing Page', 'content')
destroy_page('Existing Page', 'foo') expect { @page.update(title: 'foo/Existing Page', content: 'new_content') }.to raise_error(WikiPage::PageRenameError)
end expect(@page.title).to eq 'Update'
expect(@page.content).to eq 'new_content'
it 'updates the content and moves the file' do destroy_page('Existing Page', 'foo')
new_title = 'foo/Other Page' end
new_content = 'new_content'
expect(@page.update(title: new_title, content: new_content)).to be_truthy it 'updates the content and moves the file' do
new_title = 'foo/Other Page'
new_content = 'new_content'
page = wiki.find_page(new_title) expect(@page.update(title: new_title, content: new_content)).to be_truthy
expect(page).not_to be_nil page = wiki.find_page(new_title)
expect(page.content).to eq new_content
end
context 'in subdir' do expect(page).not_to be_nil
before do expect(page.content).to eq new_content
create_page('foo/Existing Page', 'content')
@page = wiki.find_page('foo/Existing Page')
end end
it 'moves the page to the root folder if the title is preceded by /' do context 'in subdir' do
expect(@page.slug).to eq 'foo/Existing-Page' before do
expect(@page.update(title: '/Existing Page', content: 'new_content')).to be_truthy create_page('foo/Existing Page', 'content')
expect(@page.slug).to eq 'Existing-Page' @page = wiki.find_page('foo/Existing Page')
end
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
it 'does nothing if it has the same title' do
original_path = @page.slug
expect(@page.update(title: 'Existing Page', content: 'new_content')).to be_truthy
expect(@page.slug).to eq original_path
end
end end
it 'does nothing if it has the same title' do context 'in root dir' do
original_path = @page.slug it 'does nothing if the title is preceded by /' do
original_path = @page.slug
expect(@page.update(title: 'Existing Page', content: 'new_content')).to be_truthy expect(@page.update(title: '/Update', content: 'new_content')).to be_truthy
expect(@page.slug).to eq original_path expect(@page.slug).to eq original_path
end
end end
end end
context 'in root dir' do context "with invalid attributes" do
it 'does nothing if the title is preceded by /' do it 'aborts update if title blank' do
original_path = @page.slug expect(@page.update(title: '', content: 'new_content')).to be_falsey
expect(@page.content).to eq 'new_content'
expect(@page.update(title: '/Update', content: 'new_content')).to be_truthy page = wiki.find_page('Update')
expect(@page.slug).to eq original_path expect(page.content).to eq 'content'
@page.title = 'Update'
end end
end end
end end
context "with invalid attributes" do context 'when Gitaly is enabled' do
it 'aborts update if title blank' do it_behaves_like 'update method'
expect(@page.update(title: '', content: 'new_content')).to be_falsey end
expect(@page.content).to eq 'new_content'
page = wiki.find_page('Update')
expect(page.content).to eq 'content'
@page.title = 'Update' context 'when Gitaly is disabled', :skip_gitaly_mock do
end it_behaves_like 'update method'
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment