toolshed 0.0.9 → 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.
@@ -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