Commit cfcf24dce53d79c950de12eca0353b890ad95508
1 parent
25951b91
Exists in
master
and in
4 other branches
Execute project hooks when issue or merge request created
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
4 changed files
with
31 additions
and
33 deletions
Show diff stats
app/observers/issue_observer.rb
1 | 1 | class IssueObserver < BaseObserver |
2 | 2 | def after_create(issue) |
3 | 3 | notification.new_issue(issue, current_user) |
4 | - | |
5 | 4 | issue.create_cross_references!(issue.project, current_user) |
5 | + execute_hooks(issue) | |
6 | 6 | end |
7 | 7 | |
8 | 8 | def after_close(issue, transition) |
9 | 9 | notification.close_issue(issue, current_user) |
10 | - | |
11 | 10 | create_note(issue) |
11 | + execute_hooks(issue) | |
12 | 12 | end |
13 | 13 | |
14 | 14 | def after_reopen(issue, transition) |
... | ... | @@ -29,4 +29,8 @@ class IssueObserver < BaseObserver |
29 | 29 | def create_note(issue) |
30 | 30 | Note.create_status_change_note(issue, issue.project, current_user, issue.state, current_commit) |
31 | 31 | end |
32 | + | |
33 | + def execute_hooks(issue) | |
34 | + issue.project.execute_hooks(issue.to_hook_data, :issue_hooks) | |
35 | + end | |
32 | 36 | end | ... | ... |
app/observers/merge_request_observer.rb
... | ... | @@ -7,15 +7,15 @@ class MergeRequestObserver < ActivityObserver |
7 | 7 | end |
8 | 8 | |
9 | 9 | notification.new_merge_request(merge_request, current_user) |
10 | - | |
11 | 10 | merge_request.create_cross_references!(merge_request.project, current_user) |
11 | + execute_hooks(merge_request) | |
12 | 12 | end |
13 | 13 | |
14 | 14 | def after_close(merge_request, transition) |
15 | 15 | create_event(merge_request, Event::CLOSED) |
16 | - Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil) | |
17 | - | |
18 | 16 | notification.close_mr(merge_request, current_user) |
17 | + create_note(merge_request) | |
18 | + execute_hooks(merge_request) | |
19 | 19 | end |
20 | 20 | |
21 | 21 | def after_merge(merge_request, transition) |
... | ... | @@ -31,11 +31,13 @@ class MergeRequestObserver < ActivityObserver |
31 | 31 | action: Event::MERGED, |
32 | 32 | author_id: merge_request.author_id_of_changes |
33 | 33 | ) |
34 | + | |
35 | + execute_hooks(merge_request) | |
34 | 36 | end |
35 | 37 | |
36 | 38 | def after_reopen(merge_request, transition) |
37 | 39 | create_event(merge_request, Event::REOPENED) |
38 | - Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil) | |
40 | + create_note(merge_request) | |
39 | 41 | end |
40 | 42 | |
41 | 43 | def after_update(merge_request) |
... | ... | @@ -53,4 +55,15 @@ class MergeRequestObserver < ActivityObserver |
53 | 55 | author_id: current_user.id |
54 | 56 | ) |
55 | 57 | end |
58 | + | |
59 | + private | |
60 | + | |
61 | + # Create merge request note with service comment like 'Status changed to closed' | |
62 | + def create_note(merge_request) | |
63 | + Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil) | |
64 | + end | |
65 | + | |
66 | + def execute_hooks(merge_request) | |
67 | + merge_request.project.execute_hooks(merge_request.to_hook_data, :merge_request_hooks) | |
68 | + end | |
56 | 69 | end | ... | ... |
app/services/git_push_service.rb
spec/services/git_push_service_spec.rb
... | ... | @@ -74,38 +74,19 @@ describe GitPushService do |
74 | 74 | end |
75 | 75 | |
76 | 76 | describe "Web Hooks" do |
77 | - context "with web hooks" do | |
78 | - before do | |
79 | - @project_hook = create(:project_hook) | |
80 | - @project_hook_2 = create(:project_hook) | |
81 | - project.hooks << [@project_hook, @project_hook_2] | |
82 | - | |
83 | - stub_request(:post, @project_hook.url) | |
84 | - stub_request(:post, @project_hook_2.url) | |
85 | - end | |
86 | - | |
87 | - it "executes multiple web hook" do | |
88 | - @project_hook.should_receive(:async_execute).once | |
89 | - @project_hook_2.should_receive(:async_execute).once | |
90 | - | |
91 | - service.execute(project, user, @oldrev, @newrev, @ref) | |
92 | - end | |
93 | - end | |
94 | - | |
95 | 77 | context "execute web hooks" do |
96 | - before do | |
97 | - @project_hook = create(:project_hook) | |
98 | - project.hooks << [@project_hook] | |
99 | - stub_request(:post, @project_hook.url) | |
100 | - end | |
101 | - | |
102 | 78 | it "when pushing a branch for the first time" do |
103 | - @project_hook.should_receive(:async_execute) | |
79 | + project.should_receive(:execute_hooks) | |
104 | 80 | service.execute(project, user, @blankrev, 'newrev', 'refs/heads/master') |
105 | 81 | end |
106 | 82 | |
83 | + it "when pushing new commits to existing branch" do | |
84 | + project.should_receive(:execute_hooks) | |
85 | + service.execute(project, user, 'oldrev', 'newrev', 'refs/heads/master') | |
86 | + end | |
87 | + | |
107 | 88 | it "when pushing tags" do |
108 | - @project_hook.should_not_receive(:async_execute) | |
89 | + project.should_not_receive(:execute_hooks) | |
109 | 90 | service.execute(project, user, 'newrev', 'newrev', 'refs/tags/v1.0.0') |
110 | 91 | end |
111 | 92 | end | ... | ... |