toolshed 0.0.9 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,260 @@
1
+ require 'helper'
2
+
3
+ class JiraTest < Test::Unit::TestCase
4
+ def self.startup
5
+ Toolshed::Client::ticket_tracker_username = 'sample'
6
+ Toolshed::Client::ticket_tracker_password = 'sample'
7
+ Toolshed::Client::ticket_tracker_owner = 'sample'
8
+ end
9
+
10
+ def test_add_note
11
+ mock_init
12
+ jira_init
13
+
14
+ jira_comments_mock = mock('JIRA::HasManyProxy')
15
+ jira_comments_mock.stubs({
16
+ parent: @jira_issue_mock
17
+ })
18
+
19
+ @jira_issue_mock.expects(:comments).returns(
20
+ jira_comments_mock
21
+ )
22
+
23
+ jira_comment_build_mock = mock('JIRA::Resource::Comment')
24
+ jira_comment_build_mock.stubs({
25
+ parent: @jira_issue_http_mock
26
+ })
27
+
28
+ jira_comments_mock.expects(:build).returns(
29
+ jira_comment_build_mock
30
+ )
31
+
32
+ jira_comment_build_mock.expects(:save).with({ 'body' => 'This is my note' }).returns(
33
+ true
34
+ )
35
+
36
+ assert(@jira.add_note('This is my note'))
37
+ end
38
+
39
+ def test_available_statuses
40
+ mock_init
41
+ jira_init
42
+ available_statuses_mock
43
+
44
+ assert_equal(@jira.available_statuses, @jira_find_all_mock)
45
+ end
46
+
47
+ def test_update_ticket_status
48
+ mock_init
49
+ jira_init
50
+ available_statuses_mock
51
+
52
+ jira_transitions_mock = mock('JIRA::HasManyProxy')
53
+ jira_transitions_mock.stubs({
54
+ parent: @jira_issue_http_mock
55
+ })
56
+
57
+ @jira_issue_mock.expects(:transitions).returns(
58
+ jira_transitions_mock
59
+ )
60
+
61
+ jira_transition_build_mock = mock('JIRA::Resource::Transition')
62
+ jira_transition_build_mock.stubs(
63
+ :true
64
+ )
65
+
66
+ @jira.expects(:transition_status_id_by_status).with('Code Review').returns('1')
67
+
68
+ jira_transitions_mock.expects(:build).returns(
69
+ jira_transition_build_mock
70
+ )
71
+
72
+ jira_transition_build_mock.expects(:save).with({ 'transition' => { 'id' => '1' } }).returns(true)
73
+
74
+
75
+ assert(@jira.update_ticket_status('Code Review'))
76
+ end
77
+
78
+ def test_transition_status_id_by_status
79
+ mock_init
80
+ jira_init
81
+
82
+ jira_status = Struct.new(:id, :name)
83
+ object_1 = jira_status.new(1, 'Code Review')
84
+ object_2 = jira_status.new(2, 'In Development')
85
+
86
+ @jira.expects(:available_statuses).returns(
87
+ [
88
+ object_1,
89
+ object_2
90
+ ]
91
+ )
92
+
93
+ assert('1', @jira.transition_status_id_by_status('Code Review').to_s)
94
+ end
95
+
96
+ def test_transition_status_id_by_status_should_raise_error
97
+ mock_init
98
+ jira_init
99
+
100
+ jira_status = Struct.new(:id, :name)
101
+ object_1 = jira_status.new(1, 'Code Review')
102
+ object_2 = jira_status.new(2, 'In Development')
103
+
104
+ @jira.expects(:available_statuses).returns(
105
+ [
106
+ object_1,
107
+ object_2
108
+ ]
109
+ )
110
+
111
+ assert_raise('Unable to find available status') { @jira.transition_status_id_by_status('bla') }
112
+ end
113
+
114
+ def test_url
115
+ mock_init
116
+ jira_init
117
+
118
+ @jira_issue_mock.expects(:key).returns(
119
+ '11'
120
+ )
121
+
122
+ assert_equal("https://#{Toolshed::Client::ticket_tracker_owner}.atlassian.net/browse/11", @jira.url)
123
+ end
124
+
125
+ def test_username
126
+ assert_equal(Toolshed::TicketTracking::Jira.username, Toolshed::Client::ticket_tracker_username)
127
+ end
128
+
129
+ def test_password
130
+ assert_equal(Toolshed::TicketTracking::Jira.password, Toolshed::Client::ticket_tracker_password)
131
+ end
132
+
133
+ def test_create_instance_raise_project_name
134
+ assert_raise('Unable to use Jira as project name was not supplied') { Toolshed::TicketTracking::Jira.create_instance() }
135
+ end
136
+
137
+ def test_create_instance_raise_ticket_id
138
+ assert_raise('Unable to use Jira as ticket id was not supplied') { Toolshed::TicketTracking::Jira.create_instance({ project: 11 }) }
139
+ end
140
+
141
+ private
142
+
143
+ def jira_init
144
+ @jira = Toolshed::TicketTracking::Jira.create_instance({
145
+ username: Toolshed::Client::ticket_tracker_username,
146
+ password: Toolshed::Client::ticket_tracker_password,
147
+ owner: Toolshed::Client::ticket_tracker_owner,
148
+ project: 'project',
149
+ ticket_id: '11',
150
+ })
151
+ end
152
+
153
+ def mock_init
154
+ #
155
+ # Client MOCK
156
+ #
157
+ @jira_http_client = mock('JIRA::HttpClient')
158
+ @jira_http_client.stubs(jira_http_mock_attributes)
159
+
160
+ @jira_client_mock = mock('JIRA::Client')
161
+
162
+ mock_options = jira_http_mock_attributes.merge!({ request_client: @jira_http_client})
163
+ @jira_client_mock.stubs(mock_options)
164
+
165
+ JIRA::Client.expects(:new).
166
+ with({
167
+ username: Toolshed::Client::ticket_tracker_username,
168
+ password: Toolshed::Client::ticket_tracker_password,
169
+ site: "https://#{Toolshed::Client::ticket_tracker_owner}.atlassian.net",
170
+ context_path: '',
171
+ auth_type: :basic,
172
+ use_ssl: true
173
+ }).
174
+ returns(@jira_client_mock)
175
+
176
+ #
177
+ # Project MOCK
178
+ #
179
+ @jira_project_http_mock = mock('JIRA::HttpClient')
180
+ @jira_project_http_mock.stubs(jira_http_mock_attributes)
181
+
182
+ @jira_project_mock = mock('JIRA::Resource::ProjectFactory')
183
+ @jira_project_mock.stubs({
184
+ :client => @jira_client_mock,
185
+ :request_client => @jira_project_http_mock
186
+ })
187
+
188
+ @jira_client_mock.expects(:Project).returns(
189
+ @jira_project_mock
190
+ )
191
+
192
+ @jira_project_mock.expects(:find).with('project').returns(
193
+ @jira_project_mock
194
+ )
195
+
196
+ #
197
+ # Issue MOCK
198
+ #
199
+ @jira_issue_http_mock = mock('JIRA::HttpClient')
200
+ @jira_issue_http_mock.stubs(jira_http_mock_attributes)
201
+
202
+ @jira_issue_mock = mock('JIRA::Resource::IssueFactory')
203
+ @jira_issue_mock.stubs({
204
+ :client => @jira_client_mock,
205
+ :request_client => @jira_project_http_mock
206
+ })
207
+
208
+ @jira_client_mock.expects(:Issue).returns(
209
+ @jira_issue_mock
210
+ )
211
+
212
+ @jira_issue_mock.expects(:find).with('11').returns(
213
+ @jira_issue_mock
214
+ )
215
+ end
216
+
217
+ def jira_http_mock_attributes
218
+ {
219
+ options: {
220
+ username: Toolshed::Client::ticket_tracker_username,
221
+ password: Toolshed::Client::ticket_tracker_password,
222
+ site: "https://#{Toolshed::Client::ticket_tracker_owner}.atlassian.net",
223
+ context_path: "",
224
+ rest_base_path: "/rest/api/2",
225
+ ssl_verify_mode: 1,
226
+ use_ssl: true,
227
+ auth_type: :basic,
228
+ }
229
+ }
230
+ end
231
+
232
+ def available_statuses_mock
233
+ jira_transition_mock = mock('JIRA::Resource::TransitionFactory')
234
+
235
+ mock_options = jira_http_mock_attributes.merge!({ request_client: @jira_http_client})
236
+ jira_transition_mock.stubs(
237
+ mock_options
238
+ )
239
+
240
+ @jira_client_mock.expects(:Transition).returns(
241
+ jira_transition_mock
242
+ )
243
+
244
+ @jira_find_all_mock = mock('JIRA::Resource::Transition')
245
+ @jira_find_all_mock.stubs(
246
+ {
247
+ id: 1,
248
+ name: 'Code Review',
249
+ },
250
+ {
251
+ id: 2,
252
+ name: 'In Development',
253
+ },
254
+ )
255
+
256
+ jira_transition_mock.expects(:all).with({ issue: @jira_issue_mock }).returns(
257
+ @jira_find_all_mock
258
+ )
259
+ end
260
+ end
@@ -0,0 +1,49 @@
1
+ require 'helper'
2
+
3
+ class HarvestTest < Test::Unit::TestCase
4
+ def self.startup
5
+ Toolshed::Client.time_tracking_tool = 'harvest'
6
+ Toolshed::Client.time_tracking_default_project_id = '1234'
7
+ Toolshed::Client.time_tracking_username = 'sample_username'
8
+ Toolshed::Client.time_tracking_password = 'sample1234'
9
+ Toolshed::Client.time_tracking_owner = 'me'
10
+
11
+ ::Harvest.expects(:client).
12
+ with(Toolshed::Client.time_tracking_owner, Toolshed::Client.time_tracking_username, Toolshed::Client.time_tracking_password).
13
+ returns('')
14
+ end
15
+
16
+ def test_get_previous_time_entries
17
+ harvest_mock = mock('Harvest::TimeEntry')
18
+ harvest_mock.stubs(:notes => 'Worked on this yesterday')
19
+
20
+ second_time_entry_harvest_mock = mock('Harvest::TimeEntry')
21
+ second_time_entry_harvest_mock.stubs(:notes => 'Second thing for the day')
22
+
23
+ Toolshed::TimeTracking::Harvest.any_instance.stubs(:previous_time_entries).
24
+ returns([harvest_mock, second_time_entry_harvest_mock])
25
+
26
+ harvest = Toolshed::TimeTracking::Harvest.new()
27
+ output = harvest.previous_notes
28
+
29
+ assert_match /Worked on this yesterday/, output
30
+ assert_match /Second thing for the day/, output
31
+ end
32
+
33
+ def test_get_todays_time_entries
34
+ harvest_mock = mock('Harvest::TimeEntry')
35
+ harvest_mock.stubs(:notes => 'Worked on this today')
36
+
37
+ second_time_entry_harvest_mock = mock('Harvest::TimeEntry')
38
+ second_time_entry_harvest_mock.stubs(:notes => 'Second thing for the day today')
39
+
40
+ Toolshed::TimeTracking::Harvest.any_instance.stubs(:previous_time_entries).
41
+ returns([harvest_mock, second_time_entry_harvest_mock])
42
+
43
+ harvest = Toolshed::TimeTracking::Harvest.new()
44
+ output = harvest.previous_notes
45
+
46
+ assert_match /Worked on this today/, output
47
+ assert_match /Second thing for the day today/, output
48
+ end
49
+ end
data/toolshed.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "veto"
27
27
  spec.add_dependency "launchy"
28
28
  spec.add_dependency "clipboard"
29
+ spec.add_dependency "jira-ruby"
29
30
 
30
31
  spec.add_development_dependency "bundler", "~> 1.3"
31
32
  spec.add_development_dependency "rake"
@@ -35,4 +36,5 @@ Gem::Specification.new do |spec|
35
36
  spec.add_development_dependency 'debugger'
36
37
  spec.add_development_dependency 'ci_reporter'
37
38
  spec.add_development_dependency 'simplecov'
39
+ spec.add_development_dependency 'codeclimate-test-reporter'
38
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toolshed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - test
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
11
+ date: 2014-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: jira-ruby
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +234,20 @@ dependencies:
220
234
  - - '>='
221
235
  - !ruby/object:Gem::Version
222
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: codeclimate-test-reporter
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
223
251
  description: Utility that will automate simple daily tasks developers perform like
224
252
  creating a Github pull request
225
253
  email:
@@ -246,15 +274,18 @@ files:
246
274
  - lib/toolshed/commands/create_branch.rb
247
275
  - lib/toolshed/commands/create_pivotal_tracker_note.rb
248
276
  - lib/toolshed/commands/create_pull_request.rb
277
+ - lib/toolshed/commands/create_ticket_comment.rb
249
278
  - lib/toolshed/commands/delete_branch.rb
250
279
  - lib/toolshed/commands/get_daily_time_update.rb
251
280
  - lib/toolshed/commands/list_branches.rb
252
281
  - lib/toolshed/commands/push_branch.rb
253
282
  - lib/toolshed/commands/ticket_information.rb
254
283
  - lib/toolshed/commands/update_pivotal_tracker_story_status.rb
284
+ - lib/toolshed/commands/update_ticket_status.rb
255
285
  - lib/toolshed/error.rb
256
286
  - lib/toolshed/git/git.rb
257
287
  - lib/toolshed/git/github.rb
288
+ - lib/toolshed/ticket_tracking/jira.rb
258
289
  - lib/toolshed/ticket_tracking/pivotal_tracker.rb
259
290
  - lib/toolshed/ticket_tracking/ticket_tracking.rb
260
291
  - lib/toolshed/time_tracking/harvest.rb
@@ -265,12 +296,15 @@ files:
265
296
  - test/commands/create_branch_test.rb
266
297
  - test/commands/create_pull_request_test.rb
267
298
  - test/commands/delete_branch_test.rb
299
+ - test/commands/get_daily_time_update_test.rb
268
300
  - test/commands/push_branch_test.rb
269
301
  - test/config.rb
270
302
  - test/git/git_helper.rb
271
303
  - test/git/git_test.rb
272
304
  - test/git/github_test.rb
273
305
  - test/helper.rb
306
+ - test/ticket_tracking/jira_test.rb
307
+ - test/time_tracking/harvest_test.rb
274
308
  - toolshed.gemspec
275
309
  homepage: ''
276
310
  licenses:
@@ -292,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
326
  version: '0'
293
327
  requirements: []
294
328
  rubyforge_project:
295
- rubygems_version: 2.1.11
329
+ rubygems_version: 2.2.2
296
330
  signing_key:
297
331
  specification_version: 4
298
332
  summary: Create a Github pull request with minimal work. Will automatically read ticket
@@ -303,9 +337,12 @@ test_files:
303
337
  - test/commands/create_branch_test.rb
304
338
  - test/commands/create_pull_request_test.rb
305
339
  - test/commands/delete_branch_test.rb
340
+ - test/commands/get_daily_time_update_test.rb
306
341
  - test/commands/push_branch_test.rb
307
342
  - test/config.rb
308
343
  - test/git/git_helper.rb
309
344
  - test/git/git_test.rb
310
345
  - test/git/github_test.rb
311
346
  - test/helper.rb
347
+ - test/ticket_tracking/jira_test.rb
348
+ - test/time_tracking/harvest_test.rb