lita-gitlab2jenkins_ghp 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0908ce7f7863a694a3c39bb3259f8cfcccf42351
4
- data.tar.gz: 17ba6f9d09848dfbca5316d81352a5e733866d67
3
+ metadata.gz: 6bba63e1a106fd9ebd7b3774b0bd2d5e05c8a49b
4
+ data.tar.gz: ae494b139b17f091b0f37378c679064424576948
5
5
  SHA512:
6
- metadata.gz: c61e93f9e8cbbc44df5ffb918f26eeb25dfdf2b69d4ec34c798f61f763c13acd92a29d293a30102cd5d8a25bc064cd6f9c7dc58aa997201482651e6fa8886ae1
7
- data.tar.gz: 895512be891ee28d08d326ec0a14b2ee2c28af861ea3921d9454d59a9f725939bf3f0ec8d2598566db956472b45ea6c38e1f6eb0b8450b088f9f37eec158356c
6
+ metadata.gz: b00508be370616f56cc348b8db4b5201b33e30fe2bad98ace1a4e729b8c5888f5cbd050da066862ab604a78a2de36e4aca4b58e243d0deb8f0b1ac14c75d717a
7
+ data.tar.gz: da05910f3094061400fb98614b4b4096681b7291667af966fed84624b48e203a952904a7fb592c13750d175b76262b1c6b038820725f69a012fe1696eccbc5e9
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.0.0-p451
data/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # lita-gitlab2jenkins_ghp
2
2
 
3
- TODO: Add a description of the plugin.
3
+ [![Build Status](https://travis-ci.org/jcalonsoh/lita-gitlab2jenkins_ghp.svg)](https://travis-ci.org/jcalonsoh/lita-gitlab2jenkins_ghp)
4
+ [![Code Climate](https://codeclimate.com/github/jcalonsoh/lita-gitlab2jenkins_ghp.png)](https://codeclimate.com/github/jcalonsoh/lita-gitlab2jenkins_ghp)
5
+ [![Coverage Status](https://coveralls.io/repos/jcalonsoh/lita-gitlab2jenkins_ghp/badge.png)](https://coveralls.io/r/jcalonsoh/lita-gitlab2jenkins_ghp)
6
+
7
+ **lita-fitlab2jenkins_ghp** is a [Lita](https://github.com/jimmycuadra/lita) that uses [GitLab](https://www.gitlab.com/gitlab-ce/)
8
+ webhooks and ci-status to be build with [Jenkins](http://jenkins-ci.org/).
9
+
4
10
 
5
11
  ## Installation
6
12
 
@@ -12,17 +18,37 @@ gem "lita-gitlab2jenkins_ghp"
12
18
 
13
19
  ## Configuration
14
20
 
15
- REQUERIMENTS:
21
+ ### REQUERIMENTS:
16
22
 
17
- from Jenkins =>
18
- Gitlab Hook Plugin 1.0.0
19
- Embeddable Build Status 1.4.0
23
+ You will need to install on Jenkins the next plugins =>
20
24
 
25
+ [Gitlab Hook Plugin 1.0.0](https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin),
26
+ [Embeddable Build Status 1.4](https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin),
27
+ [Notification Plugin 1.5](https://wiki.jenkins-ci.org/display/JENKINS/Notification+Plugin)
21
28
 
22
- ## Usage
29
+ ### Example usage YML
23
30
 
24
- TODO: Describe the plugin's features and how to use them.
31
+ ``` ruby
32
+ Lita.configure do |config|
33
+ config.handlers.gitlab2jenkins_ghp.room = '#error_channel'
34
+ config.handlers.gitlab2jenkins_ghp.url_gitlab = 'http://gitlab.example.com'
35
+ config.handlers.gitlab2jenkins_ghp.url_jenkins = 'http://jenkins.example.com'
36
+ config.handlers.gitlab2jenkins_ghp.url_jenkins_hook = '/gitlab/build_now'
37
+ config.handlers.gitlab2jenkins_ghp.url_jenkins_img = '/buildStatus/icon?job='
38
+ config.handlers.gitlab2jenkins_ghp.url_jenkins_icon = '/static/843013a3/images/jenkins.png'
39
+ config.handlers.gitlab2jenkins_ghp.private_token_gitlab = 'some_gitlab_token_from_admin_user'
40
+ config.redis.host = 'redis.example.com'
41
+ end
42
+ ```
43
+
44
+ For more understanding please read [wiki](https://github.com/jcalonsoh/lita-gitlab2jenkins_ghp/wiki)
25
45
 
26
46
  ## License
27
47
 
28
48
  [MIT](http://opensource.org/licenses/MIT)
49
+
50
+ ## TODO:
51
+
52
+ * Make tests for GET scenarios when GitLab queries ci status
53
+ * Refactoring gem to nit loggic flow
54
+ * Add scenario for "Tag push events" on next version
@@ -1,41 +1,67 @@
1
1
  module Lita
2
2
  module Handlers
3
3
  class Gitlab2jenkinsGhp < Handler
4
+
4
5
  def self.default_config(config)
5
- config.room = '#test2'
6
+ config.room = '#test'
6
7
  config.group = 'group_name'
7
8
  config.gitlab_url = 'http://example.gitlab'
8
9
  config.private_token = 'orwejnweuf'
9
10
  config.jenkins_url = 'http://example.jenkins'
10
11
  config.jenkins_hook = '/gitlab/build'
11
- config.saved_request = ''
12
12
  end
13
13
 
14
- http.post '/lita/gitlab2jenkinsghp', :do_mr
15
-
16
- http.post '/lita/gitlab2jenkinsghp_mr_status', :do_mr_change_status
17
-
18
- http.get '/lita/gitlab2jenkinsghp_ci_status/*id_project/builds/*sha_commit', :do_ci_change_status
14
+ http.post '/lita/gitlab2jenkinsghp/*to_route', :receive
19
15
 
20
- http.get '/lita/gitlab2jenkinsghp_ci_status/*id_project', :do_img_jenkins
16
+ http.get '/lita/gitlab2jenkinsghp/*to_route/*id_project/builds/*sha_commit', :receive
21
17
 
22
- def do_mr(request, response)
23
- json_body = extract_json_from_request(request)
24
- Lita.logger.info("Payload: #{json_body}")
25
- data = symbolize parse_payload(json_body)
26
- message = format_message(data, json_body)
18
+ http.get '/lita/gitlab2jenkinsghp/*to_route/*id_project', :receive
27
19
 
20
+ def receive(request, response)
21
+ routing_to = request.params['to_route'] || request.env['router.params'][:to_route][0].to_s
22
+ routing_to_request_method = request.params['request_method'] || request.request_method
23
+ if routing_to_request_method =='POST'
24
+ json_body = request.params['payload'] || extract_json_from_request(request)
25
+ data = symbolize parse_payload(json_body)
26
+ if data.key? :object_attributes
27
+ project_name_target = request.params['project_name_target'] || git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']
28
+ project_source_id_commit = request.params['project_source_id_commit'] || git_lab_data_branch_info(data[:object_attributes][:source_project_id], data[:object_attributes][:source_branch])['commit']['id']
29
+ else
30
+ project_name_target = ''
31
+ project_source_id_commit = ''
32
+ end
33
+ if routing_to == 'gitlab' #receive hook from gitlab to report commits and merge request event
34
+ do_mr(json_body, data, project_name_target, project_source_id_commit)
35
+ elsif routing_to == 'jenkins' #receive hook from jenkins to report job status build
36
+ project_name_params = request.params['project_name_params']
37
+ do_mr_change_status(request, response, json_body, data, project_name_params)
38
+ end
39
+ elsif routing_to_request_method =='GET'
40
+ if routing_to == 'ci_status'
41
+ if request.params['ref'] == 'master'
42
+ # if request.env['router.params'][:sha_commit][0].nil? false
43
+ # do_ci_change_status(request, response)
44
+ do_img_jenkins(request, response)
45
+ else
46
+ message = do_ci_change_status(request, response)
47
+ if message.to_s != 'true'
48
+ response['status'] = message
49
+ Lita.logger.info "CI Final Status: #{message.to_s}"
50
+ end
51
+ # do_img_jenkins(request, response)
52
+ end
53
+ end
54
+ end
55
+ # robot.send_message(target, message)
28
56
  rescue Exception => e
29
- Lita.logger.error "Could not domr: #{e.inspect}"
57
+ Lita.logger.error "Could not receive: #{e.inspect}"
30
58
  end
31
59
 
32
- def do_mr_change_status(request, response)
33
- json_body = extract_json_from_request(request)
60
+ def do_mr_change_status(request, response, json_body, data, project_name_params) # do_mr_change_status(request, response, json_body, data, project_name_params)
34
61
  id_project = request.params['id_project'].to_s
35
62
  Lita.logger.info "Jenkins Proyect: #{id_project}"
36
63
  Lita.logger.info("Payload: #{json_body}")
37
- data = symbolize parse_payload(json_body)
38
- message = format_message_mr(data, json_body, id_project)
64
+ ci_status_setter(data, json_body, id_project, project_name_params)
39
65
 
40
66
  rescue Exception => e
41
67
  Lita.logger.error "Could not domr_change_status: #{e.inspect}"
@@ -45,13 +71,8 @@ module Lita
45
71
  Lita.logger.info "GitLab CI Project ID: #{request.env['router.params'][:id_project]}"
46
72
  Lita.logger.info "GitLab CI Commit SHA: #{request.env['router.params'][:sha_commit]}"
47
73
  Lita.logger.info "GitLab CI Token: #{request.params['token']}"
48
- message = format_message_ci(request.env['router.params'][:id_project][0], request.env['router.params'][:sha_commit][0])
49
- room = Lita.config.handlers.gitlab2jenkins_ghp.room
50
- target = Source.new(room: room)
51
- if message.to_s != 'true'
52
- response['status'] = message
53
- Lita.logger.info "CI Final Status: #{message.to_s}"
54
- end
74
+ format_message_ci(request.env['router.params'][:id_project][0], request.env['router.params'][:sha_commit][0])
75
+
55
76
  rescue Exception => e
56
77
  Lita.logger.error "Could not domr_change_status: #{e.inspect}"
57
78
  end
@@ -59,9 +80,17 @@ module Lita
59
80
  def do_img_jenkins(request, response)
60
81
  project_name = git_lab_data_project_info(request.env['router.params'][:id_project][0])['name']
61
82
 
62
- gkeys = @redis.keys("mr:#{project_name}:*")
83
+ gkeys = @redis.keys("jenkins:#{project_name}:*")
84
+ gkeys.each do |key|
85
+ json_off = redis.get(key)
86
+ jdata = symbolize parse_payload(json_off)
87
+ job = jdata[:name]
88
+ code_climate(job, response)
89
+ end
63
90
 
64
- code_climate('QA-API', response)
91
+ if gkeys.empty?
92
+ nocode_climate(response)
93
+ end
65
94
 
66
95
  rescue Exception => e
67
96
  Lita.logger.error "Could not do_img_jenkins: #{e.inspect}"
@@ -85,6 +114,22 @@ module Lita
85
114
  Lita.logger.error "Could not do_img_jenkins: #{e.inspect}"
86
115
  end
87
116
 
117
+ def nocode_climate(response)
118
+ url = "#{Lita.config.handlers.gitlab2jenkins_ghp.url_jenkins.to_s}"<<"#{Lita.config.handlers.gitlab2jenkins_ghp.url_jenkins_icon.to_s}"
119
+ uri = URI(url)
120
+ res = Net::HTTP.get_response(uri)
121
+
122
+ if res.is_a?(Net::HTTPSuccess)
123
+ response.body << res.body
124
+ response['Content-Type'] = res['Content-Type']
125
+ end
126
+
127
+ Lita.logger.info "Sending Jenkins to Gitlab Code Climate #{url}"
128
+
129
+ rescue Exception => e
130
+ Lita.logger.error "Could not do_img_jenkins: #{e.inspect}"
131
+ end
132
+
88
133
  def extract_json_from_request(request)
89
134
  request.body.rewind
90
135
  request.body.read
@@ -103,21 +148,20 @@ module Lita
103
148
  obj
104
149
  end
105
150
 
106
- def format_message(data, json)
151
+ def do_mr(json_body, data, project_name_target, project_source_id_commit)
107
152
  if data.key? :before
108
- build_branch_hook(data, json)
153
+ build_branch_hook(json_body, data)
109
154
  elsif data.key? :object_kind
110
- build_merge_hook(data, json)
155
+ build_merge_hook(json_body, data, project_name_target, project_source_id_commit)
111
156
  end
112
157
 
113
158
  rescue => e
114
159
  Lita.logger.error "Could not format message: #{e.inspect}"
115
160
  end
116
161
 
117
- def build_branch_hook(data, json)
118
- data[:link] = "<#{data[:repository][:homepage]}|#{data[:repository][:name]}>"
162
+ def build_branch_hook(json, data)
119
163
  redis.set("commit:#{data[:commits][0][:id]}", json.to_s)
120
- "Commit Stored: #{data[:commits][0][:id]}"
164
+ return "Commit Stored: #{data[:commits][0][:id]}"
121
165
  end
122
166
 
123
167
  def gitlab_rescue_commit(project_id, branch)
@@ -156,19 +200,21 @@ module Lita
156
200
  parse_payload((((rescue_gitlab_project_name(id)).to_hash)[:body]))
157
201
  end
158
202
 
159
- def build_merge_hook(data, json)
160
- redis.set("mr:#{git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']}:#{data[:object_attributes][:id]}", json.to_s)
203
+ def build_merge_hook(json, data, project_name_target, project_source_id_commit)
204
+ redis.set("mr:#{project_name_target}:#{data[:object_attributes][:id]}", json.to_s)
161
205
  if ['reopened', 'opened'].include? data[:object_attributes][:state]
162
- Lita.logger.info "It's a merge request"
163
- payload_rescue = redis.get("commit:#{git_lab_data_branch_info(data[:object_attributes][:source_project_id], data[:object_attributes][:source_branch])['commit']['id']}")
206
+ Lita.logger.info "It's a merge request for #{project_source_id_commit}"
207
+ payload_rescue = redis.get("commit:#{project_source_id_commit}")
164
208
  if (payload_rescue).size > 0
165
209
  Lita.logger.info "Merge request found"
166
210
  jenkins_hook_ghp(payload_rescue)
211
+ "Merge Request found to play #{payload_rescue}"
212
+ else
213
+ "No commit found"
167
214
  end
168
215
  else
169
- redis.del("mr:#{git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']}:#{data[:object_attributes][:id]}")
170
- jproject_name = git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']
171
- gkeys = @redis.keys("jenkins:#{jproject_name}:*")
216
+ redis.del("mr:#{project_name_target}:#{data[:object_attributes][:id]}")
217
+ gkeys = @redis.keys("jenkins:#{project_name_target}:*")
172
218
  gkeys.each do |key|
173
219
  Lita.logger.info "Jenkins Key for Delete: #{key}"
174
220
  json_off = redis.get(key)
@@ -176,29 +222,33 @@ module Lita
176
222
  Lita.logger.info "Branch found for delete: #{jdata[:build][:parameters][:ANY_BRANCH_PATTERN]}"
177
223
  redis.del(key) if data[:object_attributes][:source_branch] == jdata[:build][:parameters][:ANY_BRANCH_PATTERN]
178
224
  end
225
+ "Merge request for delete"
179
226
  end
180
227
 
181
228
  rescue Exception => e
182
229
  Lita.logger.error "Could not make Build Merge Reques #{e.inspect}"
183
230
  end
184
231
 
185
- def key_value_source_project_finder_mr(source_project, project_name)
186
- gkeys = @redis.keys("mr:#{project_name}:*")
187
- gkeys.each do |key|
188
- json = redis.get(key)
189
- data = symbolize parse_payload(json)
190
- source_project_id = data[:object_attributes][:source_project_id] if data[:object_attributes][:source_branch] == source_project
232
+ # def key_value_source_project_finder_mr(source_project, project_name)
233
+ # gkeys = @redis.keys("mr:#{project_name}:*")
234
+ # gkeys.each do |key|
235
+ # json = redis.get(key)
236
+ # data = symbolize parse_payload(json)
237
+ # source_project_id = data[:object_attributes][:source_project_id] if data[:object_attributes][:source_branch] == source_project
238
+ # end
239
+ #
240
+ # rescue Exception => e
241
+ # Lita.logger.error "Could not key_value_source_project_finder_mr #{e.inspect}"
242
+ # end
243
+
244
+ def ci_status_setter(data, json, project_id, project_name_params) # ci_status_setter(data, json_body, id_project, project_name_params)
245
+ if project_name_params.nil?
246
+ project_name = git_lab_data_project_info(project_id)['name']
247
+ redis.set("jenkins:#{project_name}:#{data[:build][:number]}", json)
248
+ else
249
+ redis.set("jenkins:#{project_name_params}:#{data[:build][:number]}", json)
191
250
  end
192
251
 
193
- rescue Exception => e
194
- Lita.logger.error "Could not key_value_source_project_finder_mr #{e.inspect}"
195
- end
196
-
197
- def format_message_mr(data, json, id)
198
- project_name = git_lab_data_project_info(id)['name']
199
- source_project_id = key_value_source_project_finder_mr(data[:build][:parameters]['ANY_BRANCH_PATTERN'],project_name)
200
- redis.set("jenkins:#{project_name}:#{data[:build][:number]}", json)
201
-
202
252
  rescue Exception => e
203
253
  Lita.logger.error "Could not format_message_mr #{e.inspect}"
204
254
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-gitlab2jenkins_ghp'
3
- spec.version = '0.0.1'
3
+ spec.version = '1.0.0'
4
4
  spec.authors = ['Juan Carlos Alonso Holmstron']
5
5
  spec.email = ['j.carlos.alonso.h@gmail.com']
6
6
  spec.description = %q{A Lita Handler for storing gitlabs's pushed events for after send them in a merge request trigger}
@@ -15,8 +15,6 @@ Gem::Specification.new do |spec|
15
15
  spec.require_paths = ['lib']
16
16
 
17
17
  spec.add_runtime_dependency 'lita', '>= 3.0'
18
- spec.add_runtime_dependency 'redis', '~> 3.0.7'
19
- spec.add_runtime_dependency 'gitlab', '~> 3.0.0'
20
18
 
21
19
  spec.add_development_dependency 'bundler', '~> 1.3'
22
20
  spec.add_development_dependency 'rake'
@@ -0,0 +1,21 @@
1
+ {
2
+ "object_kind":"merge_request",
3
+ "object_attributes":
4
+ {
5
+ "id":82,
6
+ "target_branch":"master",
7
+ "source_branch":"testing_hooking_lita",
8
+ "source_project_id":36,
9
+ "author_id":2,
10
+ "assignee_id":null,
11
+ "title":"Testing Hooking Lita",
12
+ "created_at":"2014-04-08T15:44:37.038Z",
13
+ "updated_at":"2014-04-08T17:01:06.705Z",
14
+ "milestone_id":null,
15
+ "state":"closed",
16
+ "merge_status":"can_be_merged",
17
+ "target_project_id":7,
18
+ "iid":37,
19
+ "description":""
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "object_kind":"merge_request",
3
+ "object_attributes":
4
+ {
5
+ "id":82,
6
+ "target_branch":"master",
7
+ "source_branch":"testing_hooking_lita",
8
+ "source_project_id":36,
9
+ "author_id":2,
10
+ "assignee_id":null,
11
+ "title":"Testing Hooking Lita",
12
+ "created_at":"2014-04-08T15:44:37.038Z",
13
+ "updated_at":"2014-04-08T17:01:06.705Z",
14
+ "milestone_id":null,
15
+ "state":"opened",
16
+ "merge_status":"can_be_merged",
17
+ "target_project_id":7,
18
+ "iid":37,
19
+ "description":""
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "object_kind":"merge_request",
3
+ "object_attributes":
4
+ {
5
+ "id":82,
6
+ "target_branch":"master",
7
+ "source_branch":"testing_hooking_lita",
8
+ "source_project_id":36,
9
+ "author_id":2,
10
+ "assignee_id":null,
11
+ "title":"Testing Hooking Lita",
12
+ "created_at":"2014-04-08T15:44:37.038Z",
13
+ "updated_at":"2014-04-08T17:01:06.705Z",
14
+ "milestone_id":null,
15
+ "state":"reopened",
16
+ "merge_status":"can_be_merged",
17
+ "target_project_id":7,
18
+ "iid":37,
19
+ "description":""
20
+ }
21
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "before":"a21ad2af8142546d837d8b811b8c60c60746147e",
3
+ "after":"cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1",
4
+ "ref":"refs/heads/testing_hooking_lita",
5
+ "user_id":2,
6
+ "user_name":"jcalonsoh",
7
+ "project_id":36,
8
+ "repository":
9
+ {
10
+ "name":"api",
11
+ "url":"git@gitlab.bbrmobile.me:jcalonso/api.git",
12
+ "description":"",
13
+ "homepage":"http://gitlab.bbrmobile.me/jcalonso/api"},
14
+ "commits":
15
+ [{
16
+ "id":"cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1",
17
+ "message":"setting database.yml.sample pool to 12",
18
+ "timestamp":"2014-04-09T16:00:54-03:00",
19
+ "url":"http://gitlab.bbrmobile.me/jcalonso/api/commit/cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1",
20
+ "author":
21
+ {
22
+ "name":"Juan Carlos Alonso Holmstron",
23
+ "email":"jcalonso@bbr.cl"
24
+ }
25
+ }],
26
+ "total_commits_count":1
27
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name":"QA-API",
3
+ "url":"job/QA-API/",
4
+ "build":
5
+ {
6
+ "full_url":"http://jenkins.bbrmobile.me/job/QA-API/130/",
7
+ "number":130,
8
+ "phase":"COMPLETED",
9
+ "status":"SUCCESS",
10
+ "url":"job/QA-API/130/",
11
+ "parameters":
12
+ {
13
+ "ANY_BRANCH_PATTERN":"master"
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name":"QA-API",
3
+ "url":"job/QA-API/",
4
+ "build":
5
+ {
6
+ "full_url":"http://jenkins.bbrmobile.me/job/QA-API/130/",
7
+ "number":130,
8
+ "phase":"STARTED",
9
+ "url":"job/QA-API/130/",
10
+ "parameters":
11
+ {
12
+ "ANY_BRANCH_PATTERN":"master"
13
+ }
14
+ }
15
+ }
@@ -1,4 +1,153 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Lita::Handlers::Gitlab2jenkinsGhp, lita_handler: true do
4
+
5
+ http_route_path = '/lita/gitlab2jenkinsghp'
6
+
7
+ it 'registers with Lita' do
8
+ expect(Lita.handlers).to include(described_class)
9
+ end
10
+
11
+ let(:request) do
12
+ request = double('Rack::Request')
13
+ allow(request).to receive(:params).and_return(params)
14
+ request
15
+ end
16
+ let(:response) { Rack::Response.new }
17
+ let(:params) { {} }
18
+ let(:id_project) { '7' }
19
+ let(:commit_id) {'cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1'}
20
+ let(:redis_key_commit) {"commit:#{commit_id}"}
21
+ let(:merge_request) { '82' }
22
+ let(:to_route_gitlab) { 'gitlab' }
23
+ let(:request_method_post) { 'POST' }
24
+ let(:request_method_get) { 'GET' }
25
+ let(:project_name_target) { 'api' }
26
+ let(:redis_key_merge_request) {"mr:#{project_name_target}:#{merge_request}"}
27
+
28
+ let(:to_route_jenkins) { 'jenkins' }
29
+ let(:jenkins_id_project) { '7' }
30
+ let(:redis_key_jenkins_job) { 'jenkins:api:130' }
31
+ let(:project_name_params) { 'api' }
32
+ let(:to_route_ci_status) { 'ci_status' }
33
+
34
+ describe '#receive' do
35
+
36
+ context 'Using POST endpoint for gitlab' do
37
+
38
+ it "route gitlab push event POST #{http_route_path}/gitlab to :receive" do
39
+ routes_http(:post, "#{http_route_path}/#{to_route_gitlab}").to(:receive)
40
+ end
41
+
42
+ context 'when is push event commit hook' do
43
+ let(:push_event_commit_payload) { fixture_file('gitlab/push_event_commit') }
44
+ before do
45
+ allow(params).to receive(:[]).with('payload').and_return(push_event_commit_payload)
46
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
47
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
48
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
49
+ end
50
+ it 'notifies what commit its stored' do
51
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_commit}")).to eq push_event_commit_payload
52
+ end
53
+ end
54
+
55
+ context 'when is a open merge request hook' do
56
+ let(:merge_request_event_open_payload) { fixture_file('gitlab/merge_request_event_open') }
57
+ before do
58
+ allow(params).to receive(:[]).with('payload').and_return(merge_request_event_open_payload)
59
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
60
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
61
+ allow(params).to receive(:[]).with('project_name_target').and_return(project_name_target)
62
+ allow(params).to receive(:[]).with('project_source_id_commit').and_return(commit_id)
63
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
64
+ end
65
+ it 'notifies what merge request its stored' do
66
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_merge_request}")).to eq merge_request_event_open_payload
67
+ end
68
+ end
69
+
70
+ context 'when is a reopened merge request hook' do
71
+ let(:merge_request_event_reopened_payload) { fixture_file('gitlab/merge_request_event_reopened') }
72
+ before do
73
+ allow(params).to receive(:[]).with('payload').and_return(merge_request_event_reopened_payload)
74
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
75
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
76
+ allow(params).to receive(:[]).with('project_name_target').and_return(project_name_target)
77
+ allow(params).to receive(:[]).with('project_source_id_commit').and_return(commit_id)
78
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
79
+ end
80
+ it 'notifies what merge request its stored' do
81
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_merge_request}")).to eq merge_request_event_reopened_payload
82
+ end
83
+ end
84
+
85
+ context 'when is a closed merge request hook' do
86
+ let(:merge_request_event_closed_payload) { fixture_file('gitlab/merge_request_event_closed') }
87
+ before do
88
+ allow(params).to receive(:[]).with('payload').and_return(merge_request_event_closed_payload)
89
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
90
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
91
+ allow(params).to receive(:[]).with('project_name_target').and_return(project_name_target)
92
+ allow(params).to receive(:[]).with('project_source_id_commit').and_return(commit_id)
93
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
94
+ end
95
+ it 'notifies what merge request its stored' do
96
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_merge_request}")).to be_nil
97
+ end
98
+ end
99
+ end
100
+
101
+ context 'Using POST endpoint for jenkins' do
102
+ it "route gitlab push event POST #{http_route_path}/jenkins to :receive" do
103
+ routes_http(:post, "#{http_route_path}/#{to_route_jenkins}").to(:receive)
104
+ end
105
+
106
+ context 'when jenkins post status job when is STARTED' do
107
+ let(:jenkins_started_payload) { fixture_file('jenkins/job_started') }
108
+ before do
109
+ allow(params).to receive(:[]).with('payload').and_return(jenkins_started_payload)
110
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
111
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_jenkins)
112
+ allow(params).to receive(:[]).with('id_project').and_return(jenkins_id_project)
113
+ allow(params).to receive(:[]).with('project_name_params').and_return(project_name_params)
114
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
115
+ end
116
+ it 'notifies what merge request its stored' do
117
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_jenkins_job}")).to eq jenkins_started_payload
118
+ end
119
+ end
120
+
121
+ context 'when jenkins post status job when is FINISHED' do
122
+ let(:jenkins_finished_payload) { fixture_file('jenkins/job_finished') }
123
+ before do
124
+ allow(params).to receive(:[]).with('payload').and_return(jenkins_finished_payload)
125
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
126
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_jenkins)
127
+ allow(params).to receive(:[]).with('id_project').and_return(jenkins_id_project)
128
+ allow(params).to receive(:[]).with('project_name_params').and_return(project_name_params)
129
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
130
+ end
131
+ it 'notifies what merge request its stored' do
132
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_jenkins_job}")).to eq jenkins_finished_payload
133
+ end
134
+ end
135
+ end
136
+
137
+ context 'Using GET endpoint from gitlab' do
138
+ it "route gitlab fetch data of a GET #{http_route_path}/ci_status to :receive" do
139
+ routes_http(:post, "#{http_route_path}/#{to_route_ci_status}").to(:receive)
140
+ end
141
+
142
+ context 'when gitlab get de ci status from commit' do
143
+ # TODO: Add tests for the case when Gitlab requests the status
144
+ end
145
+
146
+ context 'when gitlab get de ci status from master' do
147
+ # TODO: Add tests for the case when Gitlab requests the status
148
+ end
149
+
150
+ end
151
+ end
152
+
4
153
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,17 @@
1
1
  require 'simplecov'
2
2
  require 'coveralls'
3
+ require 'lita-gitlab2jenkins_ghp'
4
+ require 'lita/rspec'
5
+
3
6
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
- SimpleCov::Formatter::HTMLFormatter,
5
- Coveralls::SimpleCov::Formatter
7
+ SimpleCov::Formatter::HTMLFormatter,
8
+ Coveralls::SimpleCov::Formatter
6
9
  ]
10
+
7
11
  SimpleCov.start { add_filter '/spec/' }
8
12
 
9
- require 'lita-gitlab2jenkins_ghp'
10
- require 'lita/rspec'
13
+ def fixture_file(filename)
14
+ return '' if filename == ''
15
+ file_path = File.expand_path("#{File.dirname(__FILE__)}/fixtures/#{filename}.json")
16
+ File.read(file_path)
17
+ end
metadata CHANGED
@@ -1,139 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-gitlab2jenkins_ghp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Carlos Alonso Holmstron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2014-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
- - !ruby/object:Gem::Dependency
28
- name: redis
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 3.0.7
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 3.0.7
41
- - !ruby/object:Gem::Dependency
42
- name: gitlab
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 3.0.0
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 3.0.0
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: bundler
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
- - - "~>"
31
+ - - ~>
60
32
  - !ruby/object:Gem::Version
61
33
  version: '1.3'
62
34
  type: :development
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
- - - "~>"
38
+ - - ~>
67
39
  - !ruby/object:Gem::Version
68
40
  version: '1.3'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: rake
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
- - - ">="
45
+ - - '>='
74
46
  - !ruby/object:Gem::Version
75
47
  version: '0'
76
48
  type: :development
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - ">="
52
+ - - '>='
81
53
  - !ruby/object:Gem::Version
82
54
  version: '0'
83
55
  - !ruby/object:Gem::Dependency
84
56
  name: rspec
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
- - - ">="
59
+ - - '>='
88
60
  - !ruby/object:Gem::Version
89
61
  version: 3.0.0.beta2
90
62
  type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
- - - ">="
66
+ - - '>='
95
67
  - !ruby/object:Gem::Version
96
68
  version: 3.0.0.beta2
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: shoulda
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
- - - ">="
73
+ - - '>='
102
74
  - !ruby/object:Gem::Version
103
75
  version: 3.5.0
104
76
  type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
- - - ">="
80
+ - - '>='
109
81
  - !ruby/object:Gem::Version
110
82
  version: 3.5.0
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: simplecov
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
- - - ">="
87
+ - - '>='
116
88
  - !ruby/object:Gem::Version
117
89
  version: '0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
- - - ">="
94
+ - - '>='
123
95
  - !ruby/object:Gem::Version
124
96
  version: '0'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: coveralls
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
- - - ">="
101
+ - - '>='
130
102
  - !ruby/object:Gem::Version
131
103
  version: '0'
132
104
  type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
- - - ">="
108
+ - - '>='
137
109
  - !ruby/object:Gem::Version
138
110
  version: '0'
139
111
  description: A Lita Handler for storing gitlabs's pushed events for after send them
@@ -144,9 +116,9 @@ executables: []
144
116
  extensions: []
145
117
  extra_rdoc_files: []
146
118
  files:
147
- - ".gitignore"
148
- - ".ruby-version"
149
- - ".travis.yml"
119
+ - .gitignore
120
+ - .ruby-version
121
+ - .travis.yml
150
122
  - Gemfile
151
123
  - LICENSE
152
124
  - README.md
@@ -155,6 +127,12 @@ files:
155
127
  - lib/lita/handlers/gitlab2jenkins_ghp.rb
156
128
  - lita-gitlab2jenkins_ghp.gemspec
157
129
  - locales/en.yml
130
+ - spec/fixtures/gitlab/merge_request_event_closed.json
131
+ - spec/fixtures/gitlab/merge_request_event_open.json
132
+ - spec/fixtures/gitlab/merge_request_event_reopened.json
133
+ - spec/fixtures/gitlab/push_event_commit.json
134
+ - spec/fixtures/jenkins/job_finished.json
135
+ - spec/fixtures/jenkins/job_started.json
158
136
  - spec/lita/handlers/gitlab2jenkins_ghp_spec.rb
159
137
  - spec/spec_helper.rb
160
138
  homepage: https://github.com/jcalonsoh/lita-gitlab2jenkins_ghp
@@ -168,21 +146,27 @@ require_paths:
168
146
  - lib
169
147
  required_ruby_version: !ruby/object:Gem::Requirement
170
148
  requirements:
171
- - - ">="
149
+ - - '>='
172
150
  - !ruby/object:Gem::Version
173
151
  version: '0'
174
152
  required_rubygems_version: !ruby/object:Gem::Requirement
175
153
  requirements:
176
- - - ">="
154
+ - - '>='
177
155
  - !ruby/object:Gem::Version
178
156
  version: '0'
179
157
  requirements: []
180
158
  rubyforge_project:
181
- rubygems_version: 2.2.2
159
+ rubygems_version: 2.0.14
182
160
  signing_key:
183
161
  specification_version: 4
184
162
  summary: A Lita Handler for storing gitlabs's pushed events for after send them in
185
163
  a merge request trigger
186
164
  test_files:
165
+ - spec/fixtures/gitlab/merge_request_event_closed.json
166
+ - spec/fixtures/gitlab/merge_request_event_open.json
167
+ - spec/fixtures/gitlab/merge_request_event_reopened.json
168
+ - spec/fixtures/gitlab/push_event_commit.json
169
+ - spec/fixtures/jenkins/job_finished.json
170
+ - spec/fixtures/jenkins/job_started.json
187
171
  - spec/lita/handlers/gitlab2jenkins_ghp_spec.rb
188
172
  - spec/spec_helper.rb