jira-ruby 1.2.0 → 2.3.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.
Files changed (109) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.travis.yml +5 -3
  4. data/Gemfile +7 -1
  5. data/Guardfile +1 -1
  6. data/README.md +452 -0
  7. data/Rakefile +6 -7
  8. data/example.rb +23 -1
  9. data/http-basic-example.rb +13 -12
  10. data/jira-ruby.gemspec +13 -13
  11. data/lib/jira/base.rb +53 -52
  12. data/lib/jira/base_factory.rb +3 -6
  13. data/lib/jira/client.rb +127 -30
  14. data/lib/jira/has_many_proxy.rb +0 -1
  15. data/lib/jira/http_client.rb +54 -16
  16. data/lib/jira/http_error.rb +3 -5
  17. data/lib/jira/jwt_client.rb +67 -0
  18. data/lib/jira/oauth_client.rb +47 -17
  19. data/lib/jira/request_client.rb +16 -5
  20. data/lib/jira/resource/agile.rb +34 -9
  21. data/lib/jira/resource/applinks.rb +5 -8
  22. data/lib/jira/resource/attachment.rb +41 -3
  23. data/lib/jira/resource/board.rb +91 -0
  24. data/lib/jira/resource/board_configuration.rb +9 -0
  25. data/lib/jira/resource/comment.rb +0 -2
  26. data/lib/jira/resource/component.rb +1 -3
  27. data/lib/jira/resource/createmeta.rb +12 -14
  28. data/lib/jira/resource/field.rb +22 -22
  29. data/lib/jira/resource/filter.rb +2 -2
  30. data/lib/jira/resource/issue.rb +69 -38
  31. data/lib/jira/resource/issue_picker_suggestions.rb +24 -0
  32. data/lib/jira/resource/issue_picker_suggestions_issue.rb +10 -0
  33. data/lib/jira/resource/issuelink.rb +3 -5
  34. data/lib/jira/resource/issuelinktype.rb +0 -1
  35. data/lib/jira/resource/issuetype.rb +1 -3
  36. data/lib/jira/resource/priority.rb +1 -3
  37. data/lib/jira/resource/project.rb +5 -7
  38. data/lib/jira/resource/rapidview.rb +28 -7
  39. data/lib/jira/resource/remotelink.rb +1 -4
  40. data/lib/jira/resource/resolution.rb +2 -4
  41. data/lib/jira/resource/serverinfo.rb +1 -2
  42. data/lib/jira/resource/sprint.rb +86 -17
  43. data/lib/jira/resource/sprint_report.rb +8 -0
  44. data/lib/jira/resource/status.rb +1 -3
  45. data/lib/jira/resource/suggested_issue.rb +9 -0
  46. data/lib/jira/resource/transition.rb +2 -6
  47. data/lib/jira/resource/user.rb +12 -2
  48. data/lib/jira/resource/version.rb +1 -3
  49. data/lib/jira/resource/watcher.rb +35 -0
  50. data/lib/jira/resource/webhook.rb +3 -6
  51. data/lib/jira/resource/worklog.rb +3 -5
  52. data/lib/jira/version.rb +1 -1
  53. data/lib/jira-ruby.rb +12 -2
  54. data/lib/tasks/generate.rake +4 -4
  55. data/spec/integration/attachment_spec.rb +17 -8
  56. data/spec/integration/comment_spec.rb +31 -34
  57. data/spec/integration/component_spec.rb +21 -24
  58. data/spec/integration/field_spec.rb +15 -18
  59. data/spec/integration/issue_spec.rb +45 -46
  60. data/spec/integration/issuelinktype_spec.rb +8 -11
  61. data/spec/integration/issuetype_spec.rb +5 -7
  62. data/spec/integration/priority_spec.rb +5 -8
  63. data/spec/integration/project_spec.rb +13 -20
  64. data/spec/integration/rapidview_spec.rb +17 -10
  65. data/spec/integration/resolution_spec.rb +7 -10
  66. data/spec/integration/status_spec.rb +5 -8
  67. data/spec/integration/transition_spec.rb +17 -20
  68. data/spec/integration/user_spec.rb +24 -8
  69. data/spec/integration/version_spec.rb +21 -25
  70. data/spec/integration/watcher_spec.rb +62 -0
  71. data/spec/integration/webhook.rb +8 -17
  72. data/spec/integration/worklog_spec.rb +30 -34
  73. data/spec/jira/base_factory_spec.rb +11 -12
  74. data/spec/jira/base_spec.rb +216 -229
  75. data/spec/jira/client_spec.rb +227 -159
  76. data/spec/jira/has_many_proxy_spec.rb +11 -12
  77. data/spec/jira/http_client_spec.rb +254 -31
  78. data/spec/jira/http_error_spec.rb +7 -9
  79. data/spec/jira/jwt_uri_builder_spec.rb +59 -0
  80. data/spec/jira/oauth_client_spec.rb +110 -39
  81. data/spec/jira/request_client_spec.rb +36 -9
  82. data/spec/jira/resource/agile_spec.rb +135 -0
  83. data/spec/jira/resource/attachment_spec.rb +127 -9
  84. data/spec/jira/resource/board_spec.rb +224 -0
  85. data/spec/jira/resource/createmeta_spec.rb +29 -32
  86. data/spec/jira/resource/field_spec.rb +42 -48
  87. data/spec/jira/resource/filter_spec.rb +40 -40
  88. data/spec/jira/resource/issue_picker_suggestions_spec.rb +79 -0
  89. data/spec/jira/resource/issue_spec.rb +88 -85
  90. data/spec/jira/resource/issuelink_spec.rb +1 -1
  91. data/spec/jira/resource/jira_picker_suggestions_issue_spec.rb +18 -0
  92. data/spec/jira/resource/project_factory_spec.rb +2 -4
  93. data/spec/jira/resource/project_spec.rb +33 -33
  94. data/spec/jira/resource/sprint_spec.rb +90 -0
  95. data/spec/jira/resource/user_factory_spec.rb +6 -8
  96. data/spec/jira/resource/worklog_spec.rb +9 -11
  97. data/spec/mock_responses/board/1.json +33 -0
  98. data/spec/mock_responses/board/1_issues.json +62 -0
  99. data/spec/mock_responses/empty_issues.json +8 -0
  100. data/spec/mock_responses/issue/10002/watchers.json +13 -0
  101. data/spec/mock_responses/issue.json +1 -1
  102. data/spec/mock_responses/sprint/1_issues.json +125 -0
  103. data/spec/spec_helper.rb +8 -9
  104. data/spec/support/clients_helper.rb +4 -4
  105. data/spec/support/shared_examples/integration.rb +60 -77
  106. metadata +115 -55
  107. data/.ruby-version +0 -1
  108. data/README.rdoc +0 -333
  109. /data/spec/mock_responses/{attachment → issue/10002/attachments}/10000.json +0 -0
@@ -1,21 +1,21 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe JIRA::Resource::Createmeta do
4
- let(:client) {
4
+ let(:client) do
5
5
  double(
6
6
  'client',
7
- :options => {
8
- :rest_base_path => '/jira/rest/api/2'
7
+ options: {
8
+ rest_base_path: '/jira/rest/api/2'
9
9
  }
10
10
  )
11
- }
11
+ end
12
12
 
13
- let(:response) {
13
+ let(:response) do
14
14
  double(
15
15
  'response',
16
- :body => '{"expand":"projects","projects":[{"self":"http://localhost:2029/rest/api/2/project/TST","id":"10200","key":"test_key","name":"Test Name"}]}'
16
+ body: '{"expand":"projects","projects":[{"self":"http://localhost:2029/rest/api/2/project/TST","id":"10200","key":"test_key","name":"Test Name"}]}'
17
17
  )
18
- }
18
+ end
19
19
 
20
20
  describe 'general' do
21
21
  it 'should query correct url without parameters' do
@@ -25,12 +25,12 @@ describe JIRA::Resource::Createmeta do
25
25
 
26
26
  it 'should query correct url with `expand` parameter' do
27
27
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?expand=projects.issuetypes.fields').and_return(response)
28
- JIRA::Resource::Createmeta.all(client, :expand => 'projects.issuetypes.fields')
28
+ JIRA::Resource::Createmeta.all(client, expand: 'projects.issuetypes.fields')
29
29
  end
30
30
 
31
31
  it 'should query correct url with `foo` parameter' do
32
32
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?foo=bar').and_return(response)
33
- JIRA::Resource::Createmeta.all(client, :foo => 'bar')
33
+ JIRA::Resource::Createmeta.all(client, foo: 'bar')
34
34
  end
35
35
 
36
36
  it 'should return an array of createmeta objects' do
@@ -49,7 +49,7 @@ describe JIRA::Resource::Createmeta do
49
49
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1').and_return(response)
50
50
  JIRA::Resource::Createmeta.all(
51
51
  client,
52
- :projectKeys => 'PROJECT_1',
52
+ projectKeys: 'PROJECT_1'
53
53
  )
54
54
  end
55
55
 
@@ -57,7 +57,7 @@ describe JIRA::Resource::Createmeta do
57
57
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPROJECT_2').and_return(response)
58
58
  JIRA::Resource::Createmeta.all(
59
59
  client,
60
- :projectKeys => ['PROJECT_1', 'PROJECT_2'],
60
+ projectKeys: %w[PROJECT_1 PROJECT_2]
61
61
  )
62
62
  end
63
63
 
@@ -68,7 +68,7 @@ describe JIRA::Resource::Createmeta do
68
68
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ').and_return(response)
69
69
  JIRA::Resource::Createmeta.all(
70
70
  client,
71
- :projectKeys => prj,
71
+ projectKeys: prj
72
72
  )
73
73
  end
74
74
 
@@ -81,7 +81,7 @@ describe JIRA::Resource::Createmeta do
81
81
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ_2%2CPRJ_1').and_return(response)
82
82
  JIRA::Resource::Createmeta.all(
83
83
  client,
84
- :projectKeys => [prj_2, prj_1],
84
+ projectKeys: [prj_2, prj_1]
85
85
  )
86
86
  end
87
87
 
@@ -92,18 +92,17 @@ describe JIRA::Resource::Createmeta do
92
92
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPRJ_5').and_return(response)
93
93
  JIRA::Resource::Createmeta.all(
94
94
  client,
95
- :projectKeys => ['PROJECT_1', prj_5],
95
+ projectKeys: ['PROJECT_1', prj_5]
96
96
  )
97
97
  end
98
98
  end
99
99
 
100
-
101
100
  describe 'projectIds' do
102
101
  it 'should query correct url when only one `projectIds` given as string' do
103
102
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101').and_return(response)
104
103
  JIRA::Resource::Createmeta.all(
105
104
  client,
106
- :projectIds => '10101',
105
+ projectIds: '10101'
107
106
  )
108
107
  end
109
108
 
@@ -111,7 +110,7 @@ describe JIRA::Resource::Createmeta do
111
110
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C20202').and_return(response)
112
111
  JIRA::Resource::Createmeta.all(
113
112
  client,
114
- :projectIds => ['10101', '20202'],
113
+ projectIds: %w[10101 20202]
115
114
  )
116
115
  end
117
116
 
@@ -122,7 +121,7 @@ describe JIRA::Resource::Createmeta do
122
121
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=30303').and_return(response)
123
122
  JIRA::Resource::Createmeta.all(
124
123
  client,
125
- :projectIds => prj,
124
+ projectIds: prj
126
125
  )
127
126
  end
128
127
 
@@ -135,7 +134,7 @@ describe JIRA::Resource::Createmeta do
135
134
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=50505%2C30303').and_return(response)
136
135
  JIRA::Resource::Createmeta.all(
137
136
  client,
138
- :projectIds => [prj_2, prj_1],
137
+ projectIds: [prj_2, prj_1]
139
138
  )
140
139
  end
141
140
 
@@ -146,18 +145,17 @@ describe JIRA::Resource::Createmeta do
146
145
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C60606').and_return(response)
147
146
  JIRA::Resource::Createmeta.all(
148
147
  client,
149
- :projectIds => ['10101', prj_5],
148
+ projectIds: ['10101', prj_5]
150
149
  )
151
150
  end
152
151
  end
153
152
 
154
-
155
153
  describe 'issuetypeNames' do
156
154
  it 'should query correct url when only one `issuetypeNames` given as string' do
157
155
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature').and_return(response)
158
156
  JIRA::Resource::Createmeta.all(
159
157
  client,
160
- :issuetypeNames => 'Feature',
158
+ issuetypeNames: 'Feature'
161
159
  )
162
160
  end
163
161
 
@@ -165,7 +163,7 @@ describe JIRA::Resource::Createmeta do
165
163
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CBug').and_return(response)
166
164
  JIRA::Resource::Createmeta.all(
167
165
  client,
168
- :issuetypeNames => ['Feature', 'Bug'],
166
+ issuetypeNames: %w[Feature Bug]
169
167
  )
170
168
  end
171
169
 
@@ -176,7 +174,7 @@ describe JIRA::Resource::Createmeta do
176
174
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Epic').and_return(response)
177
175
  JIRA::Resource::Createmeta.all(
178
176
  client,
179
- :issuetypeNames => issue_type,
177
+ issuetypeNames: issue_type
180
178
  )
181
179
  end
182
180
 
@@ -189,7 +187,7 @@ describe JIRA::Resource::Createmeta do
189
187
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Sub-Task%2CEpic').and_return(response)
190
188
  JIRA::Resource::Createmeta.all(
191
189
  client,
192
- :issuetypeNames => [issue_type_2, issue_type_1],
190
+ issuetypeNames: [issue_type_2, issue_type_1]
193
191
  )
194
192
  end
195
193
 
@@ -200,18 +198,17 @@ describe JIRA::Resource::Createmeta do
200
198
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CEpic').and_return(response)
201
199
  JIRA::Resource::Createmeta.all(
202
200
  client,
203
- :issuetypeNames => ['Feature', issue_type],
201
+ issuetypeNames: ['Feature', issue_type]
204
202
  )
205
203
  end
206
204
  end
207
205
 
208
-
209
206
  describe 'issuetypeIds' do
210
207
  it 'should query correct url when only one `issuetypeIds` given as string' do
211
208
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101').and_return(response)
212
209
  JIRA::Resource::Createmeta.all(
213
210
  client,
214
- :issuetypeIds => '10101',
211
+ issuetypeIds: '10101'
215
212
  )
216
213
  end
217
214
 
@@ -219,7 +216,7 @@ describe JIRA::Resource::Createmeta do
219
216
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C20202').and_return(response)
220
217
  JIRA::Resource::Createmeta.all(
221
218
  client,
222
- :issuetypeIds => ['10101', '20202'],
219
+ issuetypeIds: %w[10101 20202]
223
220
  )
224
221
  end
225
222
 
@@ -230,7 +227,7 @@ describe JIRA::Resource::Createmeta do
230
227
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=30303').and_return(response)
231
228
  JIRA::Resource::Createmeta.all(
232
229
  client,
233
- :issuetypeIds => issue_type,
230
+ issuetypeIds: issue_type
234
231
  )
235
232
  end
236
233
 
@@ -243,7 +240,7 @@ describe JIRA::Resource::Createmeta do
243
240
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=50505%2C30303').and_return(response)
244
241
  JIRA::Resource::Createmeta.all(
245
242
  client,
246
- :issuetypeIds => [issue_type_2, issue_type_1],
243
+ issuetypeIds: [issue_type_2, issue_type_1]
247
244
  )
248
245
  end
249
246
 
@@ -254,7 +251,7 @@ describe JIRA::Resource::Createmeta do
254
251
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C30303').and_return(response)
255
252
  JIRA::Resource::Createmeta.all(
256
253
  client,
257
- :issuetypeIds => ['10101', issue_type],
254
+ issuetypeIds: ['10101', issue_type]
258
255
  )
259
256
  end
260
257
  end
@@ -1,91 +1,85 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe JIRA::Resource::Field do
4
-
5
4
  let(:cache) { OpenStruct.new }
6
5
 
7
6
  let(:client) do
8
- client = double(options: {rest_base_path: '/jira/rest/api/2'} )
7
+ client = double(options: { rest_base_path: '/jira/rest/api/2' })
9
8
  field = JIRA::Resource::FieldFactory.new(client)
10
9
  allow(client).to receive(:Field).and_return(field)
11
10
  allow(client).to receive(:cache).and_return(cache)
12
11
  # info about all fields on the client
13
12
  allow(client.Field).to receive(:all).and_return([
14
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"customfield_10666", "name" => "Priority", "custom" => true, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["cf[10666]","Priority"], "schema" =>{"type" => "string", "custom" => "com.atlassian.jira.plugin.system.customfieldtypes:select","customId" => 10666}}),
15
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"issuekey", "name" => "Key", "custom" => false, "orderable" => false, "navigable" => true, "searchable" => false, "clauseNames" => ["id","issue","issuekey","key"]}),
16
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"priority", "name" => "Priority", "custom" => false, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["priority"], "schema" =>{"type" => "priority", "system" => "priority"}}),
17
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"summary", "name" => "Summary", "custom" => false, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["summary"], "schema" =>{"type" => "string", "system" => "summary"}}),
18
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"issuetype", "name" => "Issue Type", "custom" => false, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["issuetype","type"], "schema" =>{"type" => "issuetype", "system" => "issuetype"}}),
19
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"customfield_10111", "name" => "SingleWord", "custom" => true, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["cf[10111]","SingleWord"], "schema" =>{"type" => "string", "custom" => "com.atlassian.jira.plugin.system.customfieldtypes:select","customId" => 10111}}),
20
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"customfield_10222", "name" => "Multi Word", "custom" => true, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["cf[10222]","Multi Word"], "schema" =>{"type" => "string", "custom" => "com.atlassian.jira.plugin.system.customfieldtypes:select","customId" => 10222}}),
21
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"customfield_10333", "name" => "Why/N@t", "custom" => true, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["cf[10333]","Why/N@t"], "schema" =>{"type" => "string", "custom" => "com.atlassian.jira.plugin.system.customfieldtypes:select","customId" => 10333}}),
22
- JIRA::Resource::Field.new(client, :attrs => {'id' =>"customfield_10444", "name" => "SingleWord", "custom" => true, "orderable" => true, "navigable" => true, "searchable" => true, "clauseNames" => ["cf[10444]","SingleWord"], "schema" =>{"type" => "string", "custom" => "com.atlassian.jira.plugin.system.customfieldtypes:select","customId" => 10444}})
23
- ])
13
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'customfield_10666', 'name' => 'Priority', 'custom' => true, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10666]', 'Priority'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_666 } }),
14
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'issuekey', 'name' => 'Key', 'custom' => false, 'orderable' => false, 'navigable' => true, 'searchable' => false, 'clauseNames' => %w[id issue issuekey key] }),
15
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'priority', 'name' => 'Priority', 'custom' => false, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['priority'], 'schema' => { 'type' => 'priority', 'system' => 'priority' } }),
16
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'summary', 'name' => 'Summary', 'custom' => false, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['summary'], 'schema' => { 'type' => 'string', 'system' => 'summary' } }),
17
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'issuetype', 'name' => 'Issue Type', 'custom' => false, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => %w[issuetype type], 'schema' => { 'type' => 'issuetype', 'system' => 'issuetype' } }),
18
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'customfield_10111', 'name' => 'SingleWord', 'custom' => true, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10111]', 'SingleWord'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_111 } }),
19
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'customfield_10222', 'name' => 'Multi Word', 'custom' => true, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10222]', 'Multi Word'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_222 } }),
20
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'customfield_10333', 'name' => 'Why/N@t', 'custom' => true, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10333]', 'Why/N@t'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_333 } }),
21
+ JIRA::Resource::Field.new(client, attrs: { 'id' => 'customfield_10444', 'name' => 'SingleWord', 'custom' => true, 'orderable' => true, 'navigable' => true, 'searchable' => true, 'clauseNames' => ['cf[10444]', 'SingleWord'], 'schema' => { 'type' => 'string', 'custom' => 'com.atlassian.jira.plugin.system.customfieldtypes:select', 'customId' => 10_444 } })
22
+ ])
24
23
  client
25
24
  end
26
25
 
27
- describe "field_mappings" do
28
-
29
- shared_context "mapped or not" do
30
-
31
- subject {
32
- JIRA::Resource::Field.new(client, :attrs => {
33
- 'priority' => 1,
34
- 'customfield_10111' => 'data_in_custom_field',
35
- 'customfield_10222' => 'multi word custom name',
36
- 'customfield_10333' => 'complex custom name',
37
- 'customfield_10444' => 'duplicated custom name',
38
- 'customfield_10666' => 'duplicate of a system name',
39
- })
40
- }
26
+ describe 'field_mappings' do
27
+ shared_context 'mapped or not' do
28
+ subject do
29
+ JIRA::Resource::Field.new(client, attrs: {
30
+ 'priority' => 1,
31
+ 'customfield_10111' => 'data_in_custom_field',
32
+ 'customfield_10222' => 'multi word custom name',
33
+ 'customfield_10333' => 'complex custom name',
34
+ 'customfield_10444' => 'duplicated custom name',
35
+ 'customfield_10666' => 'duplicate of a system name'
36
+ })
37
+ end
41
38
 
42
- it "can find a standard field by id" do
39
+ it 'can find a standard field by id' do
43
40
  expect(subject.priority).to eq(1)
44
41
  end
45
42
 
46
- it "can find a custom field by customfield_##### name" do
43
+ it 'can find a custom field by customfield_##### name' do
47
44
  expect(subject.customfield_10111).to eq('data_in_custom_field')
48
45
  end
49
46
 
50
- it "is not confused by common attribute keys" do
51
- expect{subject.name}.to raise_error(NoMethodError)
52
- expect{subject.custom}.to raise_error(NoMethodError)
47
+ it 'is not confused by common attribute keys' do
48
+ expect { subject.name }.to raise_error(NoMethodError)
49
+ expect { subject.custom }.to raise_error(NoMethodError)
53
50
  expect(subject.id).to eq(nil) # picks up ID from the parent -
54
51
  end
55
52
  end
56
53
 
57
- context "before fields are mapped" do
54
+ context 'before fields are mapped' do
55
+ include_context 'mapped or not'
58
56
 
59
- include_context "mapped or not"
60
-
61
- it "can find a standard field by id" do
57
+ it 'can find a standard field by id' do
62
58
  expect(subject.priority).to eq(1)
63
59
  end
64
60
 
65
- it "cannot find a standard field by name before mapping" do
66
- expect{subject.Priority}.to raise_error(NoMethodError)
61
+ it 'cannot find a standard field by name before mapping' do
62
+ expect { subject.Priority }.to raise_error(NoMethodError)
67
63
  end
68
64
 
69
- it "can find a custom field by customfield_##### name" do
65
+ it 'can find a custom field by customfield_##### name' do
70
66
  expect(subject.customfield_10111).to eq('data_in_custom_field')
71
67
  end
72
68
 
73
- it "is not confused by common attribute keys and raises error" do
74
- expect{subject.name}.to raise_error(NoMethodError)
75
- expect{subject.custom}.to raise_error(NoMethodError)
69
+ it 'is not confused by common attribute keys and raises error' do
70
+ expect { subject.name }.to raise_error(NoMethodError)
71
+ expect { subject.custom }.to raise_error(NoMethodError)
76
72
  expect(subject.id).to eq(nil) # picks up ID from the parent -
77
73
  end
78
74
  end
79
75
 
80
- context "after fields are mapped" do
81
-
82
- include_context "mapped or not"
76
+ context 'after fields are mapped' do
77
+ include_context 'mapped or not'
83
78
 
84
- it "warns of duplicate fields" do
85
- expect{client.Field.map_fields}.to output(/renaming as Priority_10666/).to_stderr
86
- expect{client.Field.map_fields}.to output(/renaming as SingleWord_10444/).to_stderr
79
+ it 'warns of duplicate fields' do
80
+ expect { client.Field.map_fields }.to output(/renaming as Priority_10666/).to_stderr
81
+ expect { client.Field.map_fields }.to output(/renaming as SingleWord_10444/).to_stderr
87
82
  end
88
-
89
83
  end
90
84
  end
91
85
  end
@@ -2,48 +2,48 @@ require 'spec_helper'
2
2
 
3
3
  describe JIRA::Resource::Filter do
4
4
  let(:client) do
5
- client = double()
5
+ client = double
6
6
  allow(client).to receive(:Issue).and_return(JIRA::Resource::IssueFactory.new(self))
7
7
  client
8
8
  end
9
9
  let(:collection_path) { '/rest/api/2/filter' }
10
10
  let(:jira_user) do
11
11
  {
12
- :self => "https://localhost/rest/api/2/user?username=ljharb",
13
- :name => 'ljharb',
14
- :avatarUrls => {
12
+ self: 'https://localhost/rest/api/2/user?username=ljharb',
13
+ name: 'ljharb',
14
+ avatarUrls: {
15
15
  '16x16' => 'https://localhost/secure/useravatar?size=small&ownerId=ljharb&avatarId=1',
16
16
  '48x48' => 'https://localhost/secure/useravatar?ownerId=ljharb&avatarId=1'
17
17
  },
18
- :displayName => 'Jordan Harband',
19
- :active => true
18
+ displayName: 'Jordan Harband',
19
+ active: true
20
20
  }
21
21
  end
22
22
  let(:filter_attrs) do
23
23
  {
24
- :self => "https://localhost#{collection_path}/42",
25
- :id => 42,
26
- :name => 'Resolved Tickets',
27
- :description => '',
28
- :owner => jira_user,
29
- :jql => '"Git Repository" ~ jira-ruby AND status = Resolved',
30
- :viewUrl => 'https://localhost/secure/IssueNavigator.jspa?mode=hide&requestId=42',
31
- :searchUrl => 'https://localhost/rest/api/2/search?jql=%22Git+Repository%22+~+jira-ruby+AND+status+%3D+Resolved',
32
- :favourite => false,
33
- :sharePermissions => [
24
+ self: "https://localhost#{collection_path}/42",
25
+ id: 42,
26
+ name: 'Resolved Tickets',
27
+ description: '',
28
+ owner: jira_user,
29
+ jql: '"Git Repository" ~ jira-ruby AND status = Resolved',
30
+ viewUrl: 'https://localhost/secure/IssueNavigator.jspa?mode=hide&requestId=42',
31
+ searchUrl: 'https://localhost/rest/api/2/search?jql=%22Git+Repository%22+~+jira-ruby+AND+status+%3D+Resolved',
32
+ favourite: false,
33
+ sharePermissions: [
34
34
  {
35
- :id => 123,
36
- :type => 'global'
35
+ id: 123,
36
+ type: 'global'
37
37
  }
38
38
  ],
39
- :subscriptions => {
40
- :size => 0,
41
- :items => []
39
+ subscriptions: {
40
+ size: 0,
41
+ items: []
42
42
  }
43
43
  }
44
44
  end
45
45
  let(:filter_response) do
46
- response = double()
46
+ response = double
47
47
  allow(response).to receive(:body).and_return(filter_attrs.to_json)
48
48
  response
49
49
  end
@@ -54,40 +54,40 @@ describe JIRA::Resource::Filter do
54
54
  end
55
55
  let(:jql_issue) do
56
56
  {
57
- :id => '663147',
58
- :self => 'https://localhost/rest/api/2/issue/663147',
59
- :key => "JIRARUBY-2386",
60
- :fields => {
61
- :reporter => jira_user,
62
- :created => '2013-12-11T23:28:02.000+0000',
63
- :assignee => jira_user
57
+ id: '663147',
58
+ self: 'https://localhost/rest/api/2/issue/663147',
59
+ key: 'JIRARUBY-2386',
60
+ fields: {
61
+ reporter: jira_user,
62
+ created: '2013-12-11T23:28:02.000+0000',
63
+ assignee: jira_user
64
64
  }
65
65
  }
66
66
  end
67
67
  let(:jql_attrs) do
68
68
  {
69
- :startAt => 0,
70
- :maxResults => 50,
71
- :total => 2,
72
- :issues => [jql_issue]
69
+ startAt: 0,
70
+ maxResults: 50,
71
+ total: 2,
72
+ issues: [jql_issue]
73
73
  }
74
74
  end
75
75
  let(:issue_jql_response) do
76
- response = double()
76
+ response = double
77
77
  allow(response).to receive(:body).and_return(jql_attrs.to_json)
78
78
  response
79
79
  end
80
80
 
81
- it "can be found by ID" do
81
+ it 'can be found by ID' do
82
82
  expect(JSON.parse(filter.attrs.to_json)).to eql(JSON.parse(filter_attrs.to_json))
83
83
  end
84
84
 
85
- it "returns issues" do
85
+ it 'returns issues' do
86
86
  expect(filter).to be_present
87
- allow(client).to receive(:options).and_return({ :rest_base_path => 'localhost' })
88
- expect(client).to receive(:get).
89
- with("localhost/search?jql=#{CGI.escape(filter.jql)}").
90
- and_return(issue_jql_response)
87
+ allow(client).to receive(:options).and_return(rest_base_path: 'localhost')
88
+ expect(client).to receive(:get)
89
+ .with("localhost/search?jql=#{CGI.escape(filter.jql)}")
90
+ .and_return(issue_jql_response)
91
91
  issues = filter.issues
92
92
  expect(issues).to be_an(Array)
93
93
  expect(issues.size).to eql(1)
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::IssuePickerSuggestions do
4
+ let(:client) do
5
+ double('client', options: {
6
+ rest_base_path: '/jira/rest/api/2'
7
+ })
8
+ end
9
+
10
+ describe 'relationships' do
11
+ subject do
12
+ JIRA::Resource::IssuePickerSuggestions.new(client, attrs: {
13
+ 'sections' => [{ 'id' => 'hs'}, { 'id' => 'cs' }]
14
+ })
15
+ end
16
+
17
+ it 'has the correct relationships' do
18
+ expect(subject).to have_many(:sections, JIRA::Resource::IssuePickerSuggestionsIssue)
19
+ expect(subject.sections.length).to eq(2)
20
+ end
21
+ end
22
+
23
+ describe '#all' do
24
+ let(:response) { double }
25
+ let(:issue_picker_suggestions) { double }
26
+
27
+ before do
28
+ allow(response).to receive(:body).and_return('{"sections":[{"id": "cs"}]}')
29
+ allow(client).to receive(:IssuePickerSuggestions).and_return(issue_picker_suggestions)
30
+ allow(issue_picker_suggestions).to receive(:build)
31
+ end
32
+
33
+ it 'should autocomplete issues' do
34
+ allow(response).to receive(:body).and_return('{"sections":[{"id": "cs"}]}')
35
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/picker?query=query')
36
+ .and_return(response)
37
+
38
+ expect(client).to receive(:IssuePickerSuggestions).and_return(issue_picker_suggestions)
39
+ expect(issue_picker_suggestions).to receive(:build).with({ 'sections' => [{ 'id' => 'cs' }] })
40
+
41
+ JIRA::Resource::IssuePickerSuggestions.all(client, 'query')
42
+ end
43
+
44
+ it 'should autocomplete issues with current jql' do
45
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/picker?query=query&currentJQL=project+%3D+PR')
46
+ .and_return(response)
47
+
48
+ JIRA::Resource::IssuePickerSuggestions.all(client, 'query', current_jql: 'project = PR')
49
+ end
50
+
51
+ it 'should autocomplete issues with current issue jey' do
52
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/picker?query=query&currentIssueKey=PR-42')
53
+ .and_return(response)
54
+
55
+ JIRA::Resource::IssuePickerSuggestions.all(client, 'query', current_issue_key: 'PR-42')
56
+ end
57
+
58
+ it 'should autocomplete issues with current project id' do
59
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/picker?query=query&currentProjectId=PR')
60
+ .and_return(response)
61
+
62
+ JIRA::Resource::IssuePickerSuggestions.all(client, 'query', current_project_id: 'PR')
63
+ end
64
+
65
+ it 'should autocomplete issues with show sub tasks' do
66
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/picker?query=query&showSubTasks=true')
67
+ .and_return(response)
68
+
69
+ JIRA::Resource::IssuePickerSuggestions.all(client, 'query', show_sub_tasks: true)
70
+ end
71
+
72
+ it 'should autocomplete issues with show sub tasks parent' do
73
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/picker?query=query&showSubTaskParent=true')
74
+ .and_return(response)
75
+
76
+ JIRA::Resource::IssuePickerSuggestions.all(client, 'query', show_sub_task_parent: true)
77
+ end
78
+ end
79
+ end