jira-ruby 1.1.3 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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