jira-ruby 1.1.3 → 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 (108) 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 +38 -6
  9. data/http-basic-example.rb +14 -13
  10. data/jira-ruby.gemspec +13 -13
  11. data/lib/jira/base.rb +58 -53
  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 +14 -22
  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 +8 -8
  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 +39 -34
  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 +86 -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 -54
  107. data/README.rdoc +0 -329
  108. /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"}]}'
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,23 +25,31 @@ 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
+ it 'should return an array of createmeta objects' do
37
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta').and_return(response)
38
+ createmetas = JIRA::Resource::Createmeta.all(client)
39
+ expect(createmetas).to be_an Array
40
+ createmeta = createmetas.first
41
+ expect(createmeta.id).to eq '10200'
42
+ expect(createmeta.key).to eq 'test_key'
43
+ expect(createmeta.name).to eq 'Test Name'
44
+ end
36
45
  end
37
46
 
38
-
39
47
  describe 'projectKeys' do
40
48
  it 'should query correct url when only one `projectKeys` given as string' do
41
49
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1').and_return(response)
42
50
  JIRA::Resource::Createmeta.all(
43
51
  client,
44
- :projectKeys => 'PROJECT_1',
52
+ projectKeys: 'PROJECT_1'
45
53
  )
46
54
  end
47
55
 
@@ -49,7 +57,7 @@ describe JIRA::Resource::Createmeta do
49
57
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPROJECT_2').and_return(response)
50
58
  JIRA::Resource::Createmeta.all(
51
59
  client,
52
- :projectKeys => ['PROJECT_1', 'PROJECT_2'],
60
+ projectKeys: %w[PROJECT_1 PROJECT_2]
53
61
  )
54
62
  end
55
63
 
@@ -60,7 +68,7 @@ describe JIRA::Resource::Createmeta do
60
68
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ').and_return(response)
61
69
  JIRA::Resource::Createmeta.all(
62
70
  client,
63
- :projectKeys => prj,
71
+ projectKeys: prj
64
72
  )
65
73
  end
66
74
 
@@ -73,7 +81,7 @@ describe JIRA::Resource::Createmeta do
73
81
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ_2%2CPRJ_1').and_return(response)
74
82
  JIRA::Resource::Createmeta.all(
75
83
  client,
76
- :projectKeys => [prj_2, prj_1],
84
+ projectKeys: [prj_2, prj_1]
77
85
  )
78
86
  end
79
87
 
@@ -84,18 +92,17 @@ describe JIRA::Resource::Createmeta do
84
92
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPRJ_5').and_return(response)
85
93
  JIRA::Resource::Createmeta.all(
86
94
  client,
87
- :projectKeys => ['PROJECT_1', prj_5],
95
+ projectKeys: ['PROJECT_1', prj_5]
88
96
  )
89
97
  end
90
98
  end
91
99
 
92
-
93
100
  describe 'projectIds' do
94
101
  it 'should query correct url when only one `projectIds` given as string' do
95
102
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101').and_return(response)
96
103
  JIRA::Resource::Createmeta.all(
97
104
  client,
98
- :projectIds => '10101',
105
+ projectIds: '10101'
99
106
  )
100
107
  end
101
108
 
@@ -103,7 +110,7 @@ describe JIRA::Resource::Createmeta do
103
110
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C20202').and_return(response)
104
111
  JIRA::Resource::Createmeta.all(
105
112
  client,
106
- :projectIds => ['10101', '20202'],
113
+ projectIds: %w[10101 20202]
107
114
  )
108
115
  end
109
116
 
@@ -114,7 +121,7 @@ describe JIRA::Resource::Createmeta do
114
121
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=30303').and_return(response)
115
122
  JIRA::Resource::Createmeta.all(
116
123
  client,
117
- :projectIds => prj,
124
+ projectIds: prj
118
125
  )
119
126
  end
120
127
 
@@ -127,7 +134,7 @@ describe JIRA::Resource::Createmeta do
127
134
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=50505%2C30303').and_return(response)
128
135
  JIRA::Resource::Createmeta.all(
129
136
  client,
130
- :projectIds => [prj_2, prj_1],
137
+ projectIds: [prj_2, prj_1]
131
138
  )
132
139
  end
133
140
 
@@ -138,18 +145,17 @@ describe JIRA::Resource::Createmeta do
138
145
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C60606').and_return(response)
139
146
  JIRA::Resource::Createmeta.all(
140
147
  client,
141
- :projectIds => ['10101', prj_5],
148
+ projectIds: ['10101', prj_5]
142
149
  )
143
150
  end
144
151
  end
145
152
 
146
-
147
153
  describe 'issuetypeNames' do
148
154
  it 'should query correct url when only one `issuetypeNames` given as string' do
149
155
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature').and_return(response)
150
156
  JIRA::Resource::Createmeta.all(
151
157
  client,
152
- :issuetypeNames => 'Feature',
158
+ issuetypeNames: 'Feature'
153
159
  )
154
160
  end
155
161
 
@@ -157,7 +163,7 @@ describe JIRA::Resource::Createmeta do
157
163
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CBug').and_return(response)
158
164
  JIRA::Resource::Createmeta.all(
159
165
  client,
160
- :issuetypeNames => ['Feature', 'Bug'],
166
+ issuetypeNames: %w[Feature Bug]
161
167
  )
162
168
  end
163
169
 
@@ -168,7 +174,7 @@ describe JIRA::Resource::Createmeta do
168
174
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Epic').and_return(response)
169
175
  JIRA::Resource::Createmeta.all(
170
176
  client,
171
- :issuetypeNames => issue_type,
177
+ issuetypeNames: issue_type
172
178
  )
173
179
  end
174
180
 
@@ -181,7 +187,7 @@ describe JIRA::Resource::Createmeta do
181
187
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Sub-Task%2CEpic').and_return(response)
182
188
  JIRA::Resource::Createmeta.all(
183
189
  client,
184
- :issuetypeNames => [issue_type_2, issue_type_1],
190
+ issuetypeNames: [issue_type_2, issue_type_1]
185
191
  )
186
192
  end
187
193
 
@@ -192,18 +198,17 @@ describe JIRA::Resource::Createmeta do
192
198
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CEpic').and_return(response)
193
199
  JIRA::Resource::Createmeta.all(
194
200
  client,
195
- :issuetypeNames => ['Feature', issue_type],
201
+ issuetypeNames: ['Feature', issue_type]
196
202
  )
197
203
  end
198
204
  end
199
205
 
200
-
201
206
  describe 'issuetypeIds' do
202
207
  it 'should query correct url when only one `issuetypeIds` given as string' do
203
208
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101').and_return(response)
204
209
  JIRA::Resource::Createmeta.all(
205
210
  client,
206
- :issuetypeIds => '10101',
211
+ issuetypeIds: '10101'
207
212
  )
208
213
  end
209
214
 
@@ -211,7 +216,7 @@ describe JIRA::Resource::Createmeta do
211
216
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C20202').and_return(response)
212
217
  JIRA::Resource::Createmeta.all(
213
218
  client,
214
- :issuetypeIds => ['10101', '20202'],
219
+ issuetypeIds: %w[10101 20202]
215
220
  )
216
221
  end
217
222
 
@@ -222,7 +227,7 @@ describe JIRA::Resource::Createmeta do
222
227
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=30303').and_return(response)
223
228
  JIRA::Resource::Createmeta.all(
224
229
  client,
225
- :issuetypeIds => issue_type,
230
+ issuetypeIds: issue_type
226
231
  )
227
232
  end
228
233
 
@@ -235,7 +240,7 @@ describe JIRA::Resource::Createmeta do
235
240
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=50505%2C30303').and_return(response)
236
241
  JIRA::Resource::Createmeta.all(
237
242
  client,
238
- :issuetypeIds => [issue_type_2, issue_type_1],
243
+ issuetypeIds: [issue_type_2, issue_type_1]
239
244
  )
240
245
  end
241
246
 
@@ -246,8 +251,8 @@ describe JIRA::Resource::Createmeta do
246
251
  expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C30303').and_return(response)
247
252
  JIRA::Resource::Createmeta.all(
248
253
  client,
249
- :issuetypeIds => ['10101', issue_type],
254
+ issuetypeIds: ['10101', issue_type]
250
255
  )
251
256
  end
252
257
  end
253
- end
258
+ 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