summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-04-26 12:54:49 +0200
committerStan Hu <stanhu@gmail.com>2016-04-29 06:50:18 -0700
commit3811eb0ba1e8c0f318060696853b1cab7f99dfa3 (patch)
treeb24961856597d9d4c14450d32e8aa640874872b8
parentbfc6a0e3718c1b4d5e3d2adcc1ef16cf5274df5c (diff)
downloadgitlab-ce-3811eb0ba1e8c0f318060696853b1cab7f99dfa3.tar.gz
Fix error when trying to create a wiki page
Closes #15527. Signed-off-by: Rémy Coutable <remy@rymai.me>
-rw-r--r--CHANGELOG3
-rw-r--r--app/controllers/projects/wikis_controller.rb4
-rw-r--r--app/services/wiki_pages/create_service.rb3
-rw-r--r--spec/features/projects/wiki/user_creates_wiki_page_spec.rb87
-rw-r--r--spec/features/projects/wiki/user_updates_wiki_page_spec.rb46
5 files changed, 139 insertions, 4 deletions
diff --git a/CHANGELOG b/CHANGELOG
index ed151df9e25..bcbcdfc3fc6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -15,8 +15,9 @@ v 8.8.0 (unreleased)
- Files over 5MB can only be viewed in their raw form, files over 1MB without highlighting !3718
- Add support for supressing text diffs using .gitattributes on the default branch (Matt Oakes)
-v 8.7.2
+v 8.7.2 (unreleased)
- The "New Branch" button is now loaded asynchronously
+ - Fix error 500 when trying to create a wiki page
v 8.7.1
- Throttle the update of `project.last_activity_at` to 1 minute. !3848
diff --git a/app/controllers/projects/wikis_controller.rb b/app/controllers/projects/wikis_controller.rb
index c02bc28acef..0d6c32fabd2 100644
--- a/app/controllers/projects/wikis_controller.rb
+++ b/app/controllers/projects/wikis_controller.rb
@@ -40,10 +40,10 @@ class Projects::WikisController < Projects::ApplicationController
end
def update
- @page = @project_wiki.find_page(params[:id])
-
return render('empty') unless can?(current_user, :create_wiki, @project)
+ @page = @project_wiki.find_page(params[:id])
+
if @page = WikiPages::UpdateService.new(@project, current_user, wiki_params).execute(@page)
redirect_to(
namespace_project_wiki_path(@project.namespace, @project, @page),
diff --git a/app/services/wiki_pages/create_service.rb b/app/services/wiki_pages/create_service.rb
index 988c663b9d0..24a817c06c9 100644
--- a/app/services/wiki_pages/create_service.rb
+++ b/app/services/wiki_pages/create_service.rb
@@ -1,7 +1,8 @@
module WikiPages
class CreateService < WikiPages::BaseService
def execute
- page = WikiPage.new(@project.wiki)
+ project_wiki = ProjectWiki.new(@project, current_user)
+ page = WikiPage.new(project_wiki)
if page.create(@params)
execute_hooks(page, 'create')
diff --git a/spec/features/projects/wiki/user_creates_wiki_page_spec.rb b/spec/features/projects/wiki/user_creates_wiki_page_spec.rb
new file mode 100644
index 00000000000..d709fe8046f
--- /dev/null
+++ b/spec/features/projects/wiki/user_creates_wiki_page_spec.rb
@@ -0,0 +1,87 @@
+require 'spec_helper'
+
+feature 'Projects > Wiki > User creates wiki page', feature: true do
+ let(:user) { create(:user) }
+
+ background do
+ project.team << [user, :master]
+ login_as(user)
+
+ visit namespace_project_path(project.namespace, project)
+ click_link 'Wiki'
+ end
+
+ context 'wiki project is in the user namespace' do
+ let(:project) { create(:project, namespace: user.namespace) }
+
+ context 'when wiki is empty' do
+ scenario 'user can create a new wiki page from the wiki home page' do
+ expect(page).to have_content('Home · Edit Page')
+
+ fill_in :wiki_content, with: 'My awesome wiki!'
+ click_button 'Create page'
+
+ expect(page).to have_content("Home · last edited by #{user.name}")
+ expect(page).to have_content('My awesome wiki!')
+ end
+ end
+
+ context 'when wiki is not empty' do
+ before do
+ WikiPages::CreateService.new(project, user, title: 'home', content: 'Home page').execute
+ end
+
+ scenario 'user can create a new wiki page', js: true do
+ click_link 'New Page'
+
+ fill_in :new_wiki_path, with: 'foo'
+ click_button 'Create Page'
+
+ expect(page).to have_content('Foo · Edit Page')
+
+ fill_in :wiki_content, with: 'My awesome wiki!'
+ click_button 'Create page'
+
+ expect(page).to have_content("Foo · last edited by #{user.name}")
+ expect(page).to have_content('My awesome wiki!')
+ end
+ end
+ end
+
+ context 'wiki project is in the user namespace' do
+ let(:project) { create(:project, namespace: create(:group, :public)) }
+
+ context 'when wiki is empty' do
+ scenario 'user can create a new wiki page from the wiki home page' do
+ expect(page).to have_content('Home · Edit Page')
+
+ fill_in :wiki_content, with: 'My awesome wiki!'
+ click_button 'Create page'
+
+ expect(page).to have_content("Home · last edited by #{user.name}")
+ expect(page).to have_content('My awesome wiki!')
+ end
+ end
+
+ context 'when wiki is not empty' do
+ before do
+ WikiPages::CreateService.new(project, user, title: 'home', content: 'Home page').execute
+ end
+
+ scenario 'user can create a new wiki page', js: true do
+ click_link 'New Page'
+
+ fill_in :new_wiki_path, with: 'foo'
+ click_button 'Create Page'
+
+ expect(page).to have_content('Foo · Edit Page')
+
+ fill_in :wiki_content, with: 'My awesome wiki!'
+ click_button 'Create page'
+
+ expect(page).to have_content("Foo · last edited by #{user.name}")
+ expect(page).to have_content('My awesome wiki!')
+ end
+ end
+ end
+end
diff --git a/spec/features/projects/wiki/user_updates_wiki_page_spec.rb b/spec/features/projects/wiki/user_updates_wiki_page_spec.rb
new file mode 100644
index 00000000000..b69d6b46ac8
--- /dev/null
+++ b/spec/features/projects/wiki/user_updates_wiki_page_spec.rb
@@ -0,0 +1,46 @@
+require 'spec_helper'
+
+feature 'Projects > Wiki > User updates wiki page', feature: true do
+ let(:user) { create(:user) }
+
+ background do
+ project.team << [user, :master]
+ login_as(user)
+
+ visit namespace_project_path(project.namespace, project)
+ WikiPages::CreateService.new(project, user, title: 'home', content: 'Home page').execute
+ click_link 'Wiki'
+ end
+
+ context 'wiki project is in the user namespace' do
+ let(:project) { create(:project, namespace: user.namespace) }
+
+ scenario 'user can update the wiki home page' do
+ click_link 'Edit'
+
+ expect(page).to have_content('Home · Edit Page')
+
+ fill_in :wiki_content, with: 'My awesome wiki!'
+ click_button 'Save changes'
+
+ expect(page).to have_content("Home · last edited by #{user.name}")
+ expect(page).to have_content('My awesome wiki!')
+ end
+ end
+
+ context 'wiki project is in the user namespace' do
+ let(:project) { create(:project, namespace: create(:group, :public)) }
+
+ scenario 'user can update the wiki home page' do
+ click_link 'Edit'
+
+ expect(page).to have_content('Home · Edit Page')
+
+ fill_in :wiki_content, with: 'My awesome wiki!'
+ click_button 'Save changes'
+
+ expect(page).to have_content("Home · last edited by #{user.name}")
+ expect(page).to have_content('My awesome wiki!')
+ end
+ end
+end