diff --git a/features/project/hooks.feature b/features/project/hooks.feature new file mode 100644 index 00000000000..b158e07ad33 --- /dev/null +++ b/features/project/hooks.feature @@ -0,0 +1,21 @@ +Feature: Project Hooks + Background: + Given I sign in as a user + And I own project "Shop" + + Scenario: I should see hook list + Given project has hook + When I visit project hooks page + Then I should see project hook + + Scenario: I add new hook + Given I visit project hooks page + When I submit new hook + Then I should see newly created hook + + Scenario: I test hook + Given project has hook + And I visit project hooks page + When I click test hook button + Then hook should be triggered + diff --git a/features/steps/project/project_hooks.rb b/features/steps/project/project_hooks.rb new file mode 100644 index 00000000000..1786fe5bc05 --- /dev/null +++ b/features/steps/project/project_hooks.rb @@ -0,0 +1,36 @@ +class ProjectHooks < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + include RSpec::Matchers + include RSpec::Mocks::ExampleMethods + + Given 'project has hook' do + @hook = Factory :project_hook, project: current_project + end + + Then 'I should see project hook' do + page.should have_content @hook.url + end + + When 'I submit new hook' do + @url = Faker::Internet.uri("http") + fill_in "hook_url", with: @url + expect { click_button "Add Web Hook" }.to change(ProjectHook, :count).by(1) + end + + Then 'I should see newly created hook' do + page.current_path.should == project_hooks_path(current_project) + page.should have_content(@url) + end + + When 'I click test hook button' do + test_hook_context = double(execute: true) + TestHookContext.should_receive(:new).and_return(test_hook_context) + click_link 'Test Hook' + end + + Then 'hook should be triggered' do + page.current_path.should == project_hooks_path(current_project) + end +end diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index 8efedfa1083..eda5ab94116 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -125,6 +125,10 @@ module SharedPaths visit project_wiki_path(@project, :index) end + When 'I visit project hooks page' do + visit project_hooks_path(@project) + end + # ---------------------------------------- # "Shop" Project # ---------------------------------------- diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb index 0f93d675786..ae871d63ed5 100644 --- a/features/steps/shared/project.rb +++ b/features/steps/shared/project.rb @@ -12,4 +12,8 @@ module SharedProject @project = Factory :project, :name => "Shop" @project.add_access(@user, :admin) end + + def current_project + @project ||= Project.first + end end diff --git a/spec/requests/hooks_spec.rb b/spec/requests/hooks_spec.rb deleted file mode 100644 index 7cfe7cfe849..00000000000 --- a/spec/requests/hooks_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'spec_helper' - -describe "Hooks" do - before do - login_as :user - @project = Factory :project - @project.add_access(@user, :read, :admin) - end - - describe "GET index" do - it "should be available" do - @hook = Factory :project_hook, project: @project - visit project_hooks_path(@project) - page.should have_content "Hooks" - page.should have_content @hook.url - end - end - - describe "New Hook" do - before do - @url = Faker::Internet.uri("http") - visit project_hooks_path(@project) - fill_in "hook_url", with: @url - expect { click_button "Add Web Hook" }.to change(ProjectHook, :count).by(1) - end - - it "should open new team member popup" do - page.current_path.should == project_hooks_path(@project) - page.should have_content(@url) - end - end - - describe "Test" do - before do - @hook = Factory :project_hook, project: @project - stub_request(:post, @hook.url) - visit project_hooks_path(@project) - click_link "Test Hook" - end - - it { page.current_path.should == project_hooks_path(@project) } - end -end