jira-ruby 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +9 -0
  4. data/Gemfile +14 -0
  5. data/Guardfile +14 -0
  6. data/LICENSE +19 -0
  7. data/README.md +427 -0
  8. data/Rakefile +31 -0
  9. data/example.rb +224 -0
  10. data/http-basic-example.rb +113 -0
  11. data/jira-ruby.gemspec +35 -0
  12. data/lib/jira-ruby.rb +49 -0
  13. data/lib/jira/base.rb +525 -0
  14. data/lib/jira/base_factory.rb +46 -0
  15. data/lib/jira/client.rb +308 -0
  16. data/lib/jira/has_many_proxy.rb +42 -0
  17. data/lib/jira/http_client.rb +112 -0
  18. data/lib/jira/http_error.rb +14 -0
  19. data/lib/jira/jwt_client.rb +67 -0
  20. data/lib/jira/oauth_client.rb +114 -0
  21. data/lib/jira/railtie.rb +10 -0
  22. data/lib/jira/request_client.rb +31 -0
  23. data/lib/jira/resource/agile.rb +79 -0
  24. data/lib/jira/resource/applinks.rb +39 -0
  25. data/lib/jira/resource/attachment.rb +50 -0
  26. data/lib/jira/resource/board.rb +91 -0
  27. data/lib/jira/resource/board_configuration.rb +9 -0
  28. data/lib/jira/resource/comment.rb +12 -0
  29. data/lib/jira/resource/component.rb +8 -0
  30. data/lib/jira/resource/createmeta.rb +44 -0
  31. data/lib/jira/resource/field.rb +83 -0
  32. data/lib/jira/resource/filter.rb +15 -0
  33. data/lib/jira/resource/issue.rb +141 -0
  34. data/lib/jira/resource/issuelink.rb +20 -0
  35. data/lib/jira/resource/issuelinktype.rb +14 -0
  36. data/lib/jira/resource/issuetype.rb +8 -0
  37. data/lib/jira/resource/priority.rb +8 -0
  38. data/lib/jira/resource/project.rb +41 -0
  39. data/lib/jira/resource/rapidview.rb +67 -0
  40. data/lib/jira/resource/remotelink.rb +26 -0
  41. data/lib/jira/resource/resolution.rb +8 -0
  42. data/lib/jira/resource/serverinfo.rb +18 -0
  43. data/lib/jira/resource/sprint.rb +105 -0
  44. data/lib/jira/resource/sprint_report.rb +8 -0
  45. data/lib/jira/resource/status.rb +8 -0
  46. data/lib/jira/resource/transition.rb +29 -0
  47. data/lib/jira/resource/user.rb +30 -0
  48. data/lib/jira/resource/version.rb +8 -0
  49. data/lib/jira/resource/watcher.rb +35 -0
  50. data/lib/jira/resource/webhook.rb +37 -0
  51. data/lib/jira/resource/worklog.rb +14 -0
  52. data/lib/jira/tasks.rb +0 -0
  53. data/lib/jira/version.rb +3 -0
  54. data/lib/tasks/generate.rake +18 -0
  55. data/spec/integration/attachment_spec.rb +32 -0
  56. data/spec/integration/comment_spec.rb +52 -0
  57. data/spec/integration/component_spec.rb +39 -0
  58. data/spec/integration/field_spec.rb +32 -0
  59. data/spec/integration/issue_spec.rb +93 -0
  60. data/spec/integration/issuelinktype_spec.rb +26 -0
  61. data/spec/integration/issuetype_spec.rb +24 -0
  62. data/spec/integration/priority_spec.rb +24 -0
  63. data/spec/integration/project_spec.rb +49 -0
  64. data/spec/integration/rapidview_spec.rb +74 -0
  65. data/spec/integration/resolution_spec.rb +26 -0
  66. data/spec/integration/status_spec.rb +24 -0
  67. data/spec/integration/transition_spec.rb +49 -0
  68. data/spec/integration/user_spec.rb +41 -0
  69. data/spec/integration/version_spec.rb +39 -0
  70. data/spec/integration/watcher_spec.rb +62 -0
  71. data/spec/integration/webhook.rb +25 -0
  72. data/spec/integration/worklog_spec.rb +51 -0
  73. data/spec/jira/base_factory_spec.rb +45 -0
  74. data/spec/jira/base_spec.rb +598 -0
  75. data/spec/jira/client_spec.rb +291 -0
  76. data/spec/jira/has_many_proxy_spec.rb +46 -0
  77. data/spec/jira/http_client_spec.rb +328 -0
  78. data/spec/jira/http_error_spec.rb +24 -0
  79. data/spec/jira/jwt_uri_builder_spec.rb +59 -0
  80. data/spec/jira/oauth_client_spec.rb +162 -0
  81. data/spec/jira/request_client_spec.rb +41 -0
  82. data/spec/jira/resource/agile_spec.rb +135 -0
  83. data/spec/jira/resource/attachment_spec.rb +138 -0
  84. data/spec/jira/resource/board_spec.rb +224 -0
  85. data/spec/jira/resource/createmeta_spec.rb +258 -0
  86. data/spec/jira/resource/field_spec.rb +85 -0
  87. data/spec/jira/resource/filter_spec.rb +97 -0
  88. data/spec/jira/resource/issue_spec.rb +227 -0
  89. data/spec/jira/resource/issuelink_spec.rb +14 -0
  90. data/spec/jira/resource/project_factory_spec.rb +11 -0
  91. data/spec/jira/resource/project_spec.rb +123 -0
  92. data/spec/jira/resource/sprint_spec.rb +90 -0
  93. data/spec/jira/resource/user_factory_spec.rb +31 -0
  94. data/spec/jira/resource/worklog_spec.rb +22 -0
  95. data/spec/mock_responses/board/1.json +33 -0
  96. data/spec/mock_responses/board/1_issues.json +62 -0
  97. data/spec/mock_responses/component.post.json +28 -0
  98. data/spec/mock_responses/component/10000.invalid.put.json +5 -0
  99. data/spec/mock_responses/component/10000.json +39 -0
  100. data/spec/mock_responses/component/10000.put.json +39 -0
  101. data/spec/mock_responses/empty_issues.json +8 -0
  102. data/spec/mock_responses/field.json +32 -0
  103. data/spec/mock_responses/field/1.json +15 -0
  104. data/spec/mock_responses/issue.json +1108 -0
  105. data/spec/mock_responses/issue.post.json +5 -0
  106. data/spec/mock_responses/issue/10002.invalid.put.json +6 -0
  107. data/spec/mock_responses/issue/10002.json +126 -0
  108. data/spec/mock_responses/issue/10002.put.missing_field_update.json +6 -0
  109. data/spec/mock_responses/issue/10002/attachments/10000.json +20 -0
  110. data/spec/mock_responses/issue/10002/comment.json +65 -0
  111. data/spec/mock_responses/issue/10002/comment.post.json +29 -0
  112. data/spec/mock_responses/issue/10002/comment/10000.json +29 -0
  113. data/spec/mock_responses/issue/10002/comment/10000.put.json +29 -0
  114. data/spec/mock_responses/issue/10002/transitions.json +49 -0
  115. data/spec/mock_responses/issue/10002/transitions.post.json +1 -0
  116. data/spec/mock_responses/issue/10002/watchers.json +13 -0
  117. data/spec/mock_responses/issue/10002/worklog.json +98 -0
  118. data/spec/mock_responses/issue/10002/worklog.post.json +30 -0
  119. data/spec/mock_responses/issue/10002/worklog/10000.json +31 -0
  120. data/spec/mock_responses/issue/10002/worklog/10000.put.json +30 -0
  121. data/spec/mock_responses/issueLinkType.json +25 -0
  122. data/spec/mock_responses/issueLinkType/10000.json +7 -0
  123. data/spec/mock_responses/issuetype.json +42 -0
  124. data/spec/mock_responses/issuetype/5.json +8 -0
  125. data/spec/mock_responses/jira/rest/webhooks/1.0/webhook.json +11 -0
  126. data/spec/mock_responses/jira/rest/webhooks/1.0/webhook/2.json +11 -0
  127. data/spec/mock_responses/priority.json +42 -0
  128. data/spec/mock_responses/priority/1.json +8 -0
  129. data/spec/mock_responses/project.json +12 -0
  130. data/spec/mock_responses/project/SAMPLEPROJECT.issues.json +1108 -0
  131. data/spec/mock_responses/project/SAMPLEPROJECT.json +84 -0
  132. data/spec/mock_responses/rapidview.json +10 -0
  133. data/spec/mock_responses/rapidview/SAMPLEPROJECT.issues.full.json +276 -0
  134. data/spec/mock_responses/rapidview/SAMPLEPROJECT.issues.json +111 -0
  135. data/spec/mock_responses/rapidview/SAMPLEPROJECT.json +6 -0
  136. data/spec/mock_responses/resolution.json +15 -0
  137. data/spec/mock_responses/resolution/1.json +7 -0
  138. data/spec/mock_responses/sprint/1_issues.json +125 -0
  139. data/spec/mock_responses/status.json +37 -0
  140. data/spec/mock_responses/status/1.json +7 -0
  141. data/spec/mock_responses/user_username=admin.json +17 -0
  142. data/spec/mock_responses/version.post.json +7 -0
  143. data/spec/mock_responses/version/10000.invalid.put.json +5 -0
  144. data/spec/mock_responses/version/10000.json +11 -0
  145. data/spec/mock_responses/version/10000.put.json +7 -0
  146. data/spec/mock_responses/webhook.json +11 -0
  147. data/spec/mock_responses/webhook/webhook.json +11 -0
  148. data/spec/spec_helper.rb +21 -0
  149. data/spec/support/clients_helper.rb +16 -0
  150. data/spec/support/matchers/have_attributes.rb +11 -0
  151. data/spec/support/matchers/have_many.rb +9 -0
  152. data/spec/support/matchers/have_one.rb +5 -0
  153. data/spec/support/shared_examples/integration.rb +177 -0
  154. metadata +491 -0
@@ -0,0 +1,224 @@
1
+ require 'spec_helper'
2
+ require 'active_support/core_ext/hash'
3
+
4
+ describe JIRA::Resource::Board do
5
+ class JIRAResourceDelegation < SimpleDelegator # :nodoc:
6
+ end
7
+
8
+ let(:client) do
9
+ double(options: {
10
+ rest_base_path: '/jira/rest/api/2',
11
+ context_path: ''
12
+ })
13
+ end
14
+
15
+ let(:board) do
16
+ response = double
17
+ api_json_board = "{
18
+ \"id\": 84,
19
+ \"self\": \"http://www.example.com/jira/rest/agile/1.0/board/84\",
20
+ \"name\": \"scrum board\",
21
+ \"type\": \"scrum\"
22
+ }"
23
+ allow(response).to receive(:body).and_return(api_json_board)
24
+ expect(client).to receive(:get).with('/rest/agile/1.0/board/84')
25
+ .and_return(response)
26
+
27
+ expect(client).to receive(:Board).and_return(JIRA::Resource::BoardFactory.new(client))
28
+ JIRA::Resource::Board.find(client, '84')
29
+ end
30
+
31
+ it 'should find all boards' do
32
+ response = double
33
+ api_json = <<eos
34
+ {
35
+ "maxResults": 50,
36
+ "startAt": 0,
37
+ "isLast": true,
38
+ "values": [
39
+ {
40
+ "id": 84,
41
+ "name": "scrum board",
42
+ "type": "scrum"
43
+ },
44
+ {
45
+ "id": 92,
46
+ "name": "kanban board",
47
+ "type": "kanban"
48
+ }
49
+ ]
50
+ }
51
+ eos
52
+ allow(response).to receive(:body).and_return(api_json)
53
+ expect(client).to receive(:get).with('/rest/agile/1.0/board')
54
+ .and_return(response)
55
+ expect(client).to receive(:Board).twice.and_return(JIRA::Resource::BoardFactory.new(client))
56
+ boards = JIRA::Resource::Board.all(client)
57
+ expect(boards.count).to eq(2)
58
+ end
59
+
60
+ it 'should find one board by id' do
61
+ expect(board).to be_a(JIRA::Resource::Board)
62
+ end
63
+
64
+ describe '#issues' do
65
+ it 'should find all issues' do
66
+ issues_response = double
67
+
68
+ api_json_issues = <<eos
69
+ {
70
+ "expand": "names,schema",
71
+ "startAt": 0,
72
+ "maxResults": 50,
73
+ "total": 1,
74
+ "issues": [
75
+ {
76
+ "id": "10001",
77
+ "fields": {
78
+ "sprint": {
79
+ "id": 37,
80
+ "state": "future",
81
+ "name": "sprint 2"
82
+ },
83
+ "description": "example bug report"
84
+ }
85
+ }
86
+ ]
87
+ }
88
+ eos
89
+
90
+ allow(issues_response).to receive(:body).and_return(api_json_issues)
91
+ allow(board).to receive(:id).and_return(84)
92
+ expect(client).to receive(:get).with('/rest/agile/1.0/board/84/issue')
93
+ .and_return(issues_response)
94
+ expect(client).to receive(:Issue).and_return(JIRA::Resource::IssueFactory.new(client))
95
+
96
+ expect(board.issues.size).to be(1)
97
+ end
98
+
99
+ describe 'pagination' do
100
+ subject { described_class.new(client) }
101
+ let(:client) { JIRA::Client.new }
102
+
103
+ before do
104
+ allow(subject).to receive(:id).and_return('123')
105
+ end
106
+
107
+ context 'when there are multiple pages of results' do
108
+ let(:result_1) do
109
+ OpenStruct.new(body: {
110
+ 'startAt' => 0,
111
+ 'maxResults' => 1,
112
+ 'total' => 2,
113
+ 'issues' => []
114
+ }.to_json)
115
+ end
116
+ let(:result_2) do
117
+ OpenStruct.new(body: {
118
+ 'startAt' => 1,
119
+ 'maxResults' => 1,
120
+ 'total' => 2,
121
+ 'issues' => []
122
+ }.to_json)
123
+ end
124
+
125
+ it 'makes multiple requests and increments the startAt param' do
126
+ expect(client).to receive(:get).and_return(result_1)
127
+ expect(client).to receive(:get).and_return(result_2)
128
+ subject.issues
129
+ end
130
+ end
131
+
132
+ context 'when there is only one page of results' do
133
+ let(:result_1) do
134
+ OpenStruct.new(body: {
135
+ 'startAt' => 0,
136
+ 'maxResults' => 2,
137
+ 'total' => 2,
138
+ 'issues' => []
139
+ }.to_json)
140
+ end
141
+
142
+ it 'only requires one request' do
143
+ expect(client).to receive(:get).once.and_return(result_1)
144
+ subject.issues
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ it 'should get all sprints for a board' do
151
+ response = double
152
+
153
+ api_json = <<-eos
154
+ {
155
+ "values": [
156
+ {
157
+ "id": 37,
158
+ "state": "closed",
159
+ "name": "sprint 1"
160
+ },
161
+ {
162
+ "id": 72,
163
+ "state": "future",
164
+ "name": "sprint 2"
165
+ }
166
+ ]
167
+ }
168
+ eos
169
+ allow(response).to receive(:body).and_return(api_json)
170
+ allow(board).to receive(:id).and_return(84)
171
+ expect(client).to receive(:get).with('/rest/agile/1.0/board/84/sprint?').and_return(response)
172
+ expect(client).to receive(:Sprint).twice.and_return(JIRA::Resource::SprintFactory.new(client))
173
+ expect(board.sprints.size).to be(2)
174
+ end
175
+
176
+ it 'should get board configuration for a board' do
177
+ response = double
178
+
179
+ api_json = <<-eos
180
+ {
181
+ "id":1,
182
+ "name":"My Board",
183
+ "type":"kanban",
184
+ "self":"https://mycompany.atlassian.net/rest/agile/1.0/board/1/configuration",
185
+ "location":{
186
+ "type":"project",
187
+ "key":"MYPROJ",
188
+ "id":"10000",
189
+ "self":"https://mycompany.atlassian.net/rest/api/2/project/10000",
190
+ "name":"My Project"
191
+ },
192
+ "filter":{
193
+ "id":"10000",
194
+ "self":"https://mycompany.atlassian.net/rest/api/2/filter/10000"
195
+ },
196
+ "subQuery":{
197
+ "query":"resolution = EMPTY OR resolution != EMPTY AND resolutiondate >= -5d"
198
+ },
199
+ "columnConfig":{
200
+ "columns":[
201
+ {
202
+ "name":"Backlog",
203
+ "statuses":[
204
+ {
205
+ "id":"10000",
206
+ "self":"https://mycompany.atlassian.net/rest/api/2/status/10000"
207
+ }
208
+ ]
209
+ }
210
+ ],
211
+ "constraintType":"issueCount"
212
+ },
213
+ "ranking":{
214
+ "rankCustomFieldId":10011
215
+ }
216
+ }
217
+ eos
218
+ allow(response).to receive(:body).and_return(api_json)
219
+ allow(board).to receive(:id).and_return(84)
220
+ expect(client).to receive(:get).with('/rest/agile/1.0/board/84/configuration').and_return(response)
221
+ expect(client).to receive(:BoardConfiguration).and_return(JIRA::Resource::BoardConfigurationFactory.new(client))
222
+ expect(board.configuration).not_to be(nil)
223
+ end
224
+ end
@@ -0,0 +1,258 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Createmeta do
4
+ let(:client) do
5
+ double(
6
+ 'client',
7
+ options: {
8
+ rest_base_path: '/jira/rest/api/2'
9
+ }
10
+ )
11
+ end
12
+
13
+ let(:response) do
14
+ double(
15
+ 'response',
16
+ body: '{"expand":"projects","projects":[{"self":"http://localhost:2029/rest/api/2/project/TST","id":"10200","key":"test_key","name":"Test Name"}]}'
17
+ )
18
+ end
19
+
20
+ describe 'general' do
21
+ it 'should query correct url without parameters' do
22
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta').and_return(response)
23
+ JIRA::Resource::Createmeta.all(client)
24
+ end
25
+
26
+ it 'should query correct url with `expand` parameter' do
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')
29
+ end
30
+
31
+ it 'should query correct url with `foo` parameter' do
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')
34
+ end
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
45
+ end
46
+
47
+ describe 'projectKeys' do
48
+ it 'should query correct url when only one `projectKeys` given as string' do
49
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1').and_return(response)
50
+ JIRA::Resource::Createmeta.all(
51
+ client,
52
+ projectKeys: 'PROJECT_1'
53
+ )
54
+ end
55
+
56
+ it 'should query correct url when multiple `projectKeys` given as string' do
57
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPROJECT_2').and_return(response)
58
+ JIRA::Resource::Createmeta.all(
59
+ client,
60
+ projectKeys: %w[PROJECT_1 PROJECT_2]
61
+ )
62
+ end
63
+
64
+ it 'should query correct url when only one `projectKeys` given as Project' do
65
+ prj = JIRA::Resource::Project.new(client)
66
+ allow(prj).to receive(:key).and_return('PRJ')
67
+
68
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ').and_return(response)
69
+ JIRA::Resource::Createmeta.all(
70
+ client,
71
+ projectKeys: prj
72
+ )
73
+ end
74
+
75
+ it 'should query correct url when multiple `projectKeys` given as Project' do
76
+ prj_1 = JIRA::Resource::Project.new(client)
77
+ allow(prj_1).to receive(:key).and_return('PRJ_1')
78
+ prj_2 = JIRA::Resource::Project.new(client)
79
+ allow(prj_2).to receive(:key).and_return('PRJ_2')
80
+
81
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ_2%2CPRJ_1').and_return(response)
82
+ JIRA::Resource::Createmeta.all(
83
+ client,
84
+ projectKeys: [prj_2, prj_1]
85
+ )
86
+ end
87
+
88
+ it 'should query correct url when multiple `projectKeys` given as different types' do
89
+ prj_5 = JIRA::Resource::Project.new(client)
90
+ allow(prj_5).to receive(:key).and_return('PRJ_5')
91
+
92
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPRJ_5').and_return(response)
93
+ JIRA::Resource::Createmeta.all(
94
+ client,
95
+ projectKeys: ['PROJECT_1', prj_5]
96
+ )
97
+ end
98
+ end
99
+
100
+ describe 'projectIds' do
101
+ it 'should query correct url when only one `projectIds` given as string' do
102
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101').and_return(response)
103
+ JIRA::Resource::Createmeta.all(
104
+ client,
105
+ projectIds: '10101'
106
+ )
107
+ end
108
+
109
+ it 'should query correct url when multiple `projectIds` given as string' do
110
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C20202').and_return(response)
111
+ JIRA::Resource::Createmeta.all(
112
+ client,
113
+ projectIds: %w[10101 20202]
114
+ )
115
+ end
116
+
117
+ it 'should query correct url when only one `projectIds` given as Project' do
118
+ prj = JIRA::Resource::Project.new(client)
119
+ allow(prj).to receive(:id).and_return('30303')
120
+
121
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=30303').and_return(response)
122
+ JIRA::Resource::Createmeta.all(
123
+ client,
124
+ projectIds: prj
125
+ )
126
+ end
127
+
128
+ it 'should query correct url when multiple `projectIds` given as Project' do
129
+ prj_1 = JIRA::Resource::Project.new(client)
130
+ allow(prj_1).to receive(:id).and_return('30303')
131
+ prj_2 = JIRA::Resource::Project.new(client)
132
+ allow(prj_2).to receive(:id).and_return('50505')
133
+
134
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=50505%2C30303').and_return(response)
135
+ JIRA::Resource::Createmeta.all(
136
+ client,
137
+ projectIds: [prj_2, prj_1]
138
+ )
139
+ end
140
+
141
+ it 'should query correct url when multiple `projectIds` given as different types' do
142
+ prj_5 = JIRA::Resource::Project.new(client)
143
+ allow(prj_5).to receive(:id).and_return('60606')
144
+
145
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C60606').and_return(response)
146
+ JIRA::Resource::Createmeta.all(
147
+ client,
148
+ projectIds: ['10101', prj_5]
149
+ )
150
+ end
151
+ end
152
+
153
+ describe 'issuetypeNames' do
154
+ it 'should query correct url when only one `issuetypeNames` given as string' do
155
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature').and_return(response)
156
+ JIRA::Resource::Createmeta.all(
157
+ client,
158
+ issuetypeNames: 'Feature'
159
+ )
160
+ end
161
+
162
+ it 'should query correct url when multiple `issuetypeNames` given as string' do
163
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CBug').and_return(response)
164
+ JIRA::Resource::Createmeta.all(
165
+ client,
166
+ issuetypeNames: %w[Feature Bug]
167
+ )
168
+ end
169
+
170
+ it 'should query correct url when only one `issuetypeNames` given as Issuetype' do
171
+ issue_type = JIRA::Resource::Issuetype.new(client)
172
+ allow(issue_type).to receive(:name).and_return('Epic')
173
+
174
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Epic').and_return(response)
175
+ JIRA::Resource::Createmeta.all(
176
+ client,
177
+ issuetypeNames: issue_type
178
+ )
179
+ end
180
+
181
+ it 'should query correct url when multiple `issuetypeNames` given as Issuetype' do
182
+ issue_type_1 = JIRA::Resource::Issuetype.new(client)
183
+ allow(issue_type_1).to receive(:name).and_return('Epic')
184
+ issue_type_2 = JIRA::Resource::Issuetype.new(client)
185
+ allow(issue_type_2).to receive(:name).and_return('Sub-Task')
186
+
187
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Sub-Task%2CEpic').and_return(response)
188
+ JIRA::Resource::Createmeta.all(
189
+ client,
190
+ issuetypeNames: [issue_type_2, issue_type_1]
191
+ )
192
+ end
193
+
194
+ it 'should query correct url when multiple `issuetypeNames` given as different types' do
195
+ issue_type = JIRA::Resource::Issuetype.new(client)
196
+ allow(issue_type).to receive(:name).and_return('Epic')
197
+
198
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CEpic').and_return(response)
199
+ JIRA::Resource::Createmeta.all(
200
+ client,
201
+ issuetypeNames: ['Feature', issue_type]
202
+ )
203
+ end
204
+ end
205
+
206
+ describe 'issuetypeIds' do
207
+ it 'should query correct url when only one `issuetypeIds` given as string' do
208
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101').and_return(response)
209
+ JIRA::Resource::Createmeta.all(
210
+ client,
211
+ issuetypeIds: '10101'
212
+ )
213
+ end
214
+
215
+ it 'should query correct url when multiple `issuetypeIds` given as string' do
216
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C20202').and_return(response)
217
+ JIRA::Resource::Createmeta.all(
218
+ client,
219
+ issuetypeIds: %w[10101 20202]
220
+ )
221
+ end
222
+
223
+ it 'should query correct url when only one `issuetypeIds` given as Issuetype' do
224
+ issue_type = JIRA::Resource::Issuetype.new(client)
225
+ allow(issue_type).to receive(:id).and_return('30303')
226
+
227
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=30303').and_return(response)
228
+ JIRA::Resource::Createmeta.all(
229
+ client,
230
+ issuetypeIds: issue_type
231
+ )
232
+ end
233
+
234
+ it 'should query correct url when multiple `issuetypeIds` given as Issuetype' do
235
+ issue_type_1 = JIRA::Resource::Issuetype.new(client)
236
+ allow(issue_type_1).to receive(:id).and_return('30303')
237
+ issue_type_2 = JIRA::Resource::Issuetype.new(client)
238
+ allow(issue_type_2).to receive(:id).and_return('50505')
239
+
240
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=50505%2C30303').and_return(response)
241
+ JIRA::Resource::Createmeta.all(
242
+ client,
243
+ issuetypeIds: [issue_type_2, issue_type_1]
244
+ )
245
+ end
246
+
247
+ it 'should query correct url when multiple `issuetypeIds` given as different types' do
248
+ issue_type = JIRA::Resource::Issuetype.new(client)
249
+ allow(issue_type).to receive(:id).and_return('30303')
250
+
251
+ expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C30303').and_return(response)
252
+ JIRA::Resource::Createmeta.all(
253
+ client,
254
+ issuetypeIds: ['10101', issue_type]
255
+ )
256
+ end
257
+ end
258
+ end