From 3811eb0ba1e8c0f318060696853b1cab7f99dfa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 26 Apr 2016 12:54:49 +0200 Subject: Fix error when trying to create a wiki page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #15527. Signed-off-by: Rémy Coutable --- CHANGELOG | 3 +- app/controllers/projects/wikis_controller.rb | 4 +- app/services/wiki_pages/create_service.rb | 3 +- .../projects/wiki/user_creates_wiki_page_spec.rb | 87 ++++++++++++++++++++++ .../projects/wiki/user_updates_wiki_page_spec.rb | 46 ++++++++++++ 5 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 spec/features/projects/wiki/user_creates_wiki_page_spec.rb create mode 100644 spec/features/projects/wiki/user_updates_wiki_page_spec.rb 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 -- cgit v1.2.1 From f1e74de47cd9fcf334617023aaa737c83c98a7f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Mon, 2 May 2016 17:49:51 +0200 Subject: Simplify specs by not over-expecting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- CHANGELOG | 2 +- .../projects/wiki/user_creates_wiki_page_spec.rb | 32 ++++++++++------------ .../projects/wiki/user_updates_wiki_page_spec.rb | 18 ++++++------ 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index bcbcdfc3fc6..efaa5f43d58 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,7 +15,7 @@ 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 (unreleased) +v 8.7.2 - The "New Branch" button is now loaded asynchronously - Fix error 500 when trying to create a wiki page diff --git a/spec/features/projects/wiki/user_creates_wiki_page_spec.rb b/spec/features/projects/wiki/user_creates_wiki_page_spec.rb index d709fe8046f..7e6eef65873 100644 --- a/spec/features/projects/wiki/user_creates_wiki_page_spec.rb +++ b/spec/features/projects/wiki/user_creates_wiki_page_spec.rb @@ -11,17 +11,16 @@ feature 'Projects > Wiki > User creates wiki page', feature: true do click_link 'Wiki' end - context 'wiki project is in the user namespace' do + context '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') - + scenario 'directly from the wiki home page' do 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('Home') + expect(page).to have_content("last edited by #{user.name}") expect(page).to have_content('My awesome wiki!') end end @@ -31,34 +30,32 @@ feature 'Projects > Wiki > User creates wiki page', feature: true do WikiPages::CreateService.new(project, user, title: 'home', content: 'Home page').execute end - scenario 'user can create a new wiki page', js: true do + scenario 'via the "new wiki page" 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('Foo') + expect(page).to have_content("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 + context 'in a group 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') - + scenario 'directly from the wiki home page' do 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('Home') + expect(page).to have_content("last edited by #{user.name}") expect(page).to have_content('My awesome wiki!') end end @@ -68,18 +65,17 @@ feature 'Projects > Wiki > User creates wiki page', feature: true do WikiPages::CreateService.new(project, user, title: 'home', content: 'Home page').execute end - scenario 'user can create a new wiki page', js: true do + scenario 'via the "new wiki page" 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('Foo') + expect(page).to have_content("last edited by #{user.name}") expect(page).to have_content('My awesome wiki!') 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 index b69d6b46ac8..ef82d2375dd 100644 --- a/spec/features/projects/wiki/user_updates_wiki_page_spec.rb +++ b/spec/features/projects/wiki/user_updates_wiki_page_spec.rb @@ -12,34 +12,32 @@ feature 'Projects > Wiki > User updates wiki page', feature: true do click_link 'Wiki' end - context 'wiki project is in the user namespace' do + context 'in the user namespace' do let(:project) { create(:project, namespace: user.namespace) } - scenario 'user can update the wiki home page' do + scenario 'the 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('Home') + expect(page).to have_content("last edited by #{user.name}") expect(page).to have_content('My awesome wiki!') end end - context 'wiki project is in the user namespace' do + context 'in a group namespace' do let(:project) { create(:project, namespace: create(:group, :public)) } - scenario 'user can update the wiki home page' do + scenario 'the 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('Home') + expect(page).to have_content("last edited by #{user.name}") expect(page).to have_content('My awesome wiki!') end end -- cgit v1.2.1