1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
require 'spec_helper'
describe API::API, 'ProjectGitHook', api: true do
include ApiHelpers
let(:user) { create(:user) }
let(:user3) { create(:user) }
let!(:project) { create(:project, creator_id: user.id, namespace: user.namespace) }
before do
project.team << [user, :master]
project.team << [user3, :developer]
end
describe "GET /projects/:id/git_hook" do
before do
create(:git_hook, project: project)
end
context "authorized user" do
it "should return project git hook" do
get api("/projects/#{project.id}/git_hook", user)
expect(response.status).to eq(200)
expect(json_response).to be_an Hash
expect(json_response['project_id']).to eq(project.id)
end
end
context "unauthorized user" do
it "should not access project git hooks" do
get api("/projects/#{project.id}/git_hook", user3)
expect(response.status).to eq(403)
end
end
end
describe "POST /projects/:id/git_hook" do
context "authorized user" do
it "should add git hook to project" do
post api("/projects/#{project.id}/git_hook", user),
deny_delete_tag: true
expect(response.status).to eq(201)
expect(json_response).to be_an Hash
expect(json_response['project_id']).to eq(project.id)
expect(json_response['deny_delete_tag']).to eq(true)
end
end
context "unauthorized user" do
it "should not add git hook to project" do
post api("/projects/#{project.id}/git_hook", user3),
deny_delete_tag: true
expect(response.status).to eq(403)
end
end
end
describe "POST /projects/:id/git_hook" do
before do
create(:git_hook, project: project)
end
context "with existing git hook" do
it "should not add git hook to project" do
post api("/projects/#{project.id}/git_hook", user),
deny_delete_tag: true
expect(response.status).to eq(422)
end
end
end
describe "PUT /projects/:id/git_hook" do
before do
create(:git_hook, project: project)
end
it "should update an existing project git hook" do
put api("/projects/#{project.id}/git_hook", user),
deny_delete_tag: false, commit_message_regex: 'Fixes \d+\..*'
expect(response.status).to eq(200)
expect(json_response['deny_delete_tag']).to eq(false)
expect(json_response['commit_message_regex']).to eq('Fixes \d+\..*')
end
end
describe "PUT /projects/:id/git_hook" do
it "should error on non existing project git hook" do
put api("/projects/#{project.id}/git_hook", user),
deny_delete_tag: false, commit_message_regex: 'Fixes \d+\..*'
expect(response.status).to eq(404)
end
it "should not update git hook for unauthorized user" do
post api("/projects/#{project.id}/git_hook", user3),
deny_delete_tag: true
expect(response.status).to eq(403)
end
end
describe "DELETE /projects/:id/git_hook" do
before do
create(:git_hook, project: project)
end
context "authorized user" do
it "should delete git hook from project" do
delete api("/projects/#{project.id}/git_hook", user)
expect(response.status).to eq(200)
expect(json_response).to be_an Hash
end
end
context "unauthorized user" do
it "should return a 403 error" do
delete api("/projects/#{project.id}/git_hook", user3)
expect(response.status).to eq(403)
end
end
end
describe "DELETE /projects/:id/git_hook" do
context "for non existing git hook" do
it "should delete git hook from project" do
delete api("/projects/#{project.id}/git_hook", user)
expect(response.status).to eq(404)
expect(json_response).to be_an Hash
expect(json_response['message']).to eq("404 Not Found")
end
it "should return a 403 error if not authorized" do
delete api("/projects/#{project.id}/git_hook", user3)
expect(response.status).to eq(403)
end
end
end
end
|