From 1479f1722702c955ed3ee9456107c6a1a7277c7b Mon Sep 17 00:00:00 2001 From: Dan Knox Date: Sun, 10 Mar 2013 14:37:26 -0700 Subject: [PATCH] Add Spinach coverage for Gollum Wiki system and correct the Delete link. The previously failing Spinach steps have been fixed with this commit. I have also added new steps that cover the entire usage of the Wiki system. The new Spinach steps revealed a minor bug in the Delete page process. The path for the "Delete this page" button was previously set to `project_wikis_page(@project, @wiki)` when it should have been using the singular `project_wiki_page(@project, @wiki)` path helper. The link has been corrected and all steps are now passing. --- app/views/wikis/edit.html.haml | 4 +-- features/project/wiki.feature | 31 ++++++++++++++-- features/steps/project/project_wiki.rb | 64 +++++++++++++++++++++++++++++++--- features/steps/shared/paths.rb | 4 +-- features/support/env.rb | 9 +++++ 5 files changed, 102 insertions(+), 10 deletions(-) diff --git a/app/views/wikis/edit.html.haml b/app/views/wikis/edit.html.haml index 1e78d16e5..84d8d27d8 100644 --- a/app/views/wikis/edit.html.haml +++ b/app/views/wikis/edit.html.haml @@ -5,6 +5,6 @@ = render 'form' .pull-right - - if can? current_user, :admin_wiki, @project - = link_to project_wikis_path(@project, @wiki), confirm: "Are you sure you want to delete this page?", method: :delete, class: "btn btn-small btn-remove" do + - if @wiki.persisted? && can?(current_user, :admin_wiki, @project) + = link_to project_wiki_path(@project, @wiki), confirm: "Are you sure you want to delete this page?", method: :delete, class: "btn btn-small btn-remove" do Delete this page diff --git a/features/project/wiki.feature b/features/project/wiki.feature index f052e2f24..45761f09f 100644 --- a/features/project/wiki.feature +++ b/features/project/wiki.feature @@ -5,5 +5,32 @@ Feature: Project Wiki Given I visit project wiki page Scenario: Add new page - Given I create Wiki page - Then I should see newly created wiki page + Given I create the Wiki Home page + Then I should see the newly created wiki page + + Scenario: Edit existing page + Given I have an existing Wiki page + And I browse to that Wiki page + And I click on the Edit button + And I change the content + Then I should see the updated content + + Scenario: View page history + Given I have an existing wiki page + And That page has two revisions + And I browse to that Wiki page + And I click the History button + Then I should see both revisions + + Scenario: Destroy Wiki page + Given I have an existing wiki page + And I browse to that Wiki page + And I click on the Edit button + And I click on the "Delete this page" button + Then The page should be deleted + + Scenario: View all pages + Given I have an existing wiki page + And I browse to that Wiki page + And I click on the "Pages" button + Then I should see the existing page in the pages list diff --git a/features/steps/project/project_wiki.rb b/features/steps/project/project_wiki.rb index 902e9ce15..1a811bad7 100644 --- a/features/steps/project/project_wiki.rb +++ b/features/steps/project/project_wiki.rb @@ -4,17 +4,73 @@ class ProjectWiki < Spinach::FeatureSteps include SharedNote include SharedPaths - Given 'I create Wiki page' do - fill_in "Title", :with => 'Test title' + Given 'I create the Wiki Home page' do fill_in "Content", :with => '[link test](test)' click_on "Save" end - Then 'I should see newly created wiki page' do - page.should have_content "Test title" + Then 'I should see the newly created wiki page' do + page.should have_content "Home" page.should have_content "link test" click_link "link test" page.should have_content "Editing page" end + + Given 'I have an existing Wiki page' do + wiki.create_page("existing", "content", :markdown, "first commit") + @page = wiki.find_page("existing") + end + + And 'I browse to that Wiki page' do + visit project_wiki_path(project, @page) + end + + And 'I click on the Edit button' do + click_on "Edit" + end + + And 'I change the content' do + fill_in "Content", :with => 'Updated Wiki Content' + click_on "Save" + end + + Then 'I should see the updated content' do + page.should have_content "Updated Wiki Content" + end + + And 'That page has two revisions' do + @page.update("new content", :markdown, "second commit") + end + + And 'I click the History button' do + click_on "History" + end + + Then 'I should see both revisions' do + page.should have_content current_user.name + page.should have_content "first commit" + page.should have_content "second commit" + end + + And 'I click on the "Delete this page" button' do + click_on "Delete this page" + end + + Then 'The page should be deleted' do + page.should have_content "Page was successfully deleted" + end + + And 'I click on the "Pages" button' do + click_on "Pages" + end + + Then 'I should see the existing page in the pages list' do + page.should have_content current_user.name + page.should have_content @page.title.titleize + end + + def wiki + @gollum_wiki = GollumWiki.new(project, current_user) + end end diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index 431d5299d..30a3fcaf2 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -161,7 +161,7 @@ module SharedPaths end Given "I visit my project's wiki page" do - visit project_wiki_path(@project, :index) + visit project_wiki_path(@project, :home) end When 'I visit project hooks page' do @@ -256,7 +256,7 @@ module SharedPaths end Given 'I visit project wiki page' do - visit project_wiki_path(@project, :index) + visit project_wiki_path(@project, :home) end def root_ref diff --git a/features/support/env.rb b/features/support/env.rb index 2fd7ffdb8..b83f0d123 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -32,6 +32,9 @@ DatabaseCleaner.strategy = :truncation Spinach.hooks.before_scenario do # Use tmp dir for FS manipulations Gitlab.config.gitlab_shell.stub(repos_path: Rails.root.join('tmp', 'test-git-base-path')) + Gitlab::Shell.any_instance.stub(:add_repository) do |path| + create_temp_repo("#{Rails.root}/tmp/test-git-base-path/#{path}.git") + end FileUtils.rm_rf Gitlab.config.gitlab_shell.repos_path FileUtils.mkdir_p Gitlab.config.gitlab_shell.repos_path DatabaseCleaner.start @@ -46,3 +49,9 @@ Spinach.hooks.before_run do include FactoryGirl::Syntax::Methods end + +def create_temp_repo(path) + FileUtils.mkdir_p path + command = "git init --quiet --bare #{path};" + system(command) +end -- 2.11.0