jira-ruby 2.1.3

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 (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