Commit 86bd11cbd8796adc31849aa02317604abb1576e2
1 parent
655418be
Exists in
master
and in
4 other branches
System Hooks: rspec
Showing
4 changed files
with
133 additions
and
3 deletions
Show diff stats
app/controllers/admin/hooks_controller.rb
... | ... | @@ -28,9 +28,15 @@ class Admin::HooksController < ApplicationController |
28 | 28 | |
29 | 29 | |
30 | 30 | def test |
31 | - @hook = @project.hooks.find(params[:id]) | |
32 | - commits = @project.commits(@project.default_branch, nil, 3) | |
33 | - data = @project.post_receive_data(commits.last.id, commits.first.id, "refs/heads/#{@project.default_branch}", current_user) | |
31 | + @hook = SystemHook.find(params[:hook_id]) | |
32 | + data = { | |
33 | + event_name: "project_create", | |
34 | + name: "Ruby", | |
35 | + path: "ruby", | |
36 | + project_id: 1, | |
37 | + owner_name: "Someone", | |
38 | + owner_email: "example@gitlabhq.com" | |
39 | + } | |
34 | 40 | @hook.execute(data) |
35 | 41 | |
36 | 42 | redirect_to :back | ... | ... |
spec/factories.rb
... | ... | @@ -7,6 +7,12 @@ Factory.add(:project, Project) do |obj| |
7 | 7 | obj.code = 'LGT' |
8 | 8 | end |
9 | 9 | |
10 | +Factory.add(:project_without_owner, Project) do |obj| | |
11 | + obj.name = Faker::Internet.user_name | |
12 | + obj.path = 'gitlabhq' | |
13 | + obj.code = 'LGT' | |
14 | +end | |
15 | + | |
10 | 16 | Factory.add(:public_project, Project) do |obj| |
11 | 17 | obj.name = Faker::Internet.user_name |
12 | 18 | obj.path = 'gitlabhq' |
... | ... | @@ -64,6 +70,10 @@ Factory.add(:project_hook, ProjectHook) do |obj| |
64 | 70 | obj.url = Faker::Internet.uri("http") |
65 | 71 | end |
66 | 72 | |
73 | +Factory.add(:system_hook, SystemHook) do |obj| | |
74 | + obj.url = Faker::Internet.uri("http") | |
75 | +end | |
76 | + | |
67 | 77 | Factory.add(:wiki, Wiki) do |obj| |
68 | 78 | obj.title = Faker::Lorem.sentence |
69 | 79 | obj.content = Faker::Lorem.sentence | ... | ... |
... | ... | @@ -0,0 +1,61 @@ |
1 | +require "spec_helper" | |
2 | + | |
3 | +describe SystemHook do | |
4 | + describe "execute" do | |
5 | + before(:each) do | |
6 | + @system_hook = Factory :system_hook | |
7 | + WebMock.stub_request(:post, @system_hook.url) | |
8 | + end | |
9 | + | |
10 | + it "project_create hook" do | |
11 | + user = Factory :user | |
12 | + with_resque do | |
13 | + project = Factory :project_without_owner, :owner => user | |
14 | + end | |
15 | + WebMock.should have_requested(:post, @system_hook.url).with(body: /project_create/).once | |
16 | + end | |
17 | + | |
18 | + it "project_destroy hook" do | |
19 | + project = Factory :project | |
20 | + with_resque do | |
21 | + project.destroy | |
22 | + end | |
23 | + WebMock.should have_requested(:post, @system_hook.url).with(body: /project_destroy/).once | |
24 | + end | |
25 | + | |
26 | + it "user_create hook" do | |
27 | + with_resque do | |
28 | + Factory :user | |
29 | + end | |
30 | + WebMock.should have_requested(:post, @system_hook.url).with(body: /user_create/).once | |
31 | + end | |
32 | + | |
33 | + it "user_destroy hook" do | |
34 | + user = Factory :user | |
35 | + with_resque do | |
36 | + user.destroy | |
37 | + end | |
38 | + WebMock.should have_requested(:post, @system_hook.url).with(body: /user_destroy/).once | |
39 | + end | |
40 | + | |
41 | + it "project_create hook" do | |
42 | + user = Factory :user | |
43 | + project = Factory :project | |
44 | + with_resque do | |
45 | + project.users << user | |
46 | + end | |
47 | + WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once | |
48 | + end | |
49 | + | |
50 | + it "project_destroy hook" do | |
51 | + user = Factory :user | |
52 | + project = Factory :project | |
53 | + project.users << user | |
54 | + with_resque do | |
55 | + project.users_projects.clear | |
56 | + end | |
57 | + WebMock.should have_requested(:post, @system_hook.url).with(body: /user_remove_from_team/).once | |
58 | + end | |
59 | + end | |
60 | + | |
61 | +end | ... | ... |
... | ... | @@ -0,0 +1,53 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +describe "Admin::Hooks" do | |
4 | + before do | |
5 | + @project = Factory :project, | |
6 | + :name => "LeGiT", | |
7 | + :code => "LGT" | |
8 | + login_as :admin | |
9 | + | |
10 | + @system_hook = Factory :system_hook | |
11 | + | |
12 | + end | |
13 | + | |
14 | + describe "GET /admin/hooks" do | |
15 | + it "should be ok" do | |
16 | + visit admin_root_path | |
17 | + within ".main_menu" do | |
18 | + click_on "Hooks" | |
19 | + end | |
20 | + current_path.should == admin_hooks_path | |
21 | + end | |
22 | + | |
23 | + it "should have hooks list" do | |
24 | + visit admin_hooks_path | |
25 | + page.should have_content(@system_hook.url) | |
26 | + end | |
27 | + end | |
28 | + | |
29 | + describe "New Hook" do | |
30 | + before do | |
31 | + @url = Faker::Internet.uri("http") | |
32 | + visit admin_hooks_path | |
33 | + fill_in "hook_url", :with => @url | |
34 | + expect { click_button "Add System Hook" }.to change(SystemHook, :count).by(1) | |
35 | + end | |
36 | + | |
37 | + it "should open new hook popup" do | |
38 | + page.current_path.should == admin_hooks_path | |
39 | + page.should have_content(@url) | |
40 | + end | |
41 | + end | |
42 | + | |
43 | + describe "Test" do | |
44 | + before do | |
45 | + WebMock.stub_request(:post, @system_hook.url) | |
46 | + visit admin_hooks_path | |
47 | + click_link "Test Hook" | |
48 | + end | |
49 | + | |
50 | + it { page.current_path.should == admin_hooks_path } | |
51 | + end | |
52 | + | |
53 | +end | ... | ... |