jira-ruby 0.1.17 → 1.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/Gemfile +3 -1
- data/Guardfile +14 -0
- data/README.rdoc +29 -12
- data/Rakefile +5 -1
- data/example.rb +24 -2
- data/http-basic-example.rb +1 -1
- data/jira-ruby.gemspec +20 -14
- data/lib/{jira.rb → jira-ruby.rb} +6 -2
- data/lib/jira/base.rb +5 -4
- data/lib/jira/base_factory.rb +3 -3
- data/lib/jira/client.rb +31 -2
- data/lib/jira/resource/agile.rb +54 -0
- data/lib/jira/resource/createmeta.rb +52 -0
- data/lib/jira/resource/field.rb +74 -1
- data/lib/jira/resource/issue.rb +22 -5
- data/lib/jira/resource/resolution.rb +10 -0
- data/lib/jira/resource/sprint.rb +36 -0
- data/lib/jira/resource/user.rb +6 -0
- data/lib/jira/resource/webhook.rb +40 -0
- data/lib/jira/version.rb +1 -1
- data/spec/integration/resolution_spec.rb +29 -0
- data/spec/integration/webhook.rb +34 -0
- data/spec/jira/base_spec.rb +5 -2
- data/spec/jira/resource/createmeta_spec.rb +253 -0
- data/spec/jira/resource/field_spec.rb +132 -0
- data/spec/jira/resource/issue_spec.rb +21 -1
- data/spec/jira/resource/user_factory_spec.rb +33 -0
- data/spec/mock_responses/jira/rest/webhooks/1.0/webhook.json +11 -0
- data/spec/mock_responses/jira/rest/webhooks/1.0/webhook/2.json +11 -0
- data/spec/mock_responses/resolution.json +15 -0
- data/spec/mock_responses/resolution/1.json +7 -0
- data/spec/mock_responses/webhook.json +11 -0
- data/spec/mock_responses/webhook/webhook.json +11 -0
- data/spec/spec_helper.rb +1 -1
- metadata +139 -15
@@ -0,0 +1,52 @@
|
|
1
|
+
module JIRA
|
2
|
+
module Resource
|
3
|
+
|
4
|
+
class CreatemetaFactory < JIRA::BaseFactory # :nodoc:
|
5
|
+
end
|
6
|
+
|
7
|
+
class Createmeta < JIRA::Base
|
8
|
+
def self.endpoint_name
|
9
|
+
'/issue/createmeta'
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.all(client, params={})
|
13
|
+
|
14
|
+
if params.has_key?(:projectKeys)
|
15
|
+
values = Array(params[:projectKeys]).map{|i| (i.is_a?(JIRA::Resource::Project) ? i.key : i)}
|
16
|
+
params[:projectKeys] = values.join(',')
|
17
|
+
end
|
18
|
+
|
19
|
+
if params.has_key?(:projectIds)
|
20
|
+
values = Array(params[:projectIds]).map{|i| (i.is_a?(JIRA::Resource::Project) ? i.id : i)}
|
21
|
+
params[:projectIds] = values.join(',')
|
22
|
+
end
|
23
|
+
|
24
|
+
if params.has_key?(:issuetypeNames)
|
25
|
+
values = Array(params[:issuetypeNames]).map{|i| (i.is_a?(JIRA::Resource::Issuetype) ? i.name : i)}
|
26
|
+
params[:issuetypeNames] = values.join(',')
|
27
|
+
end
|
28
|
+
|
29
|
+
if params.has_key?(:issuetypeIds)
|
30
|
+
values = Array(params[:issuetypeIds]).map{|i| (i.is_a?(JIRA::Resource::Issuetype) ? i.id : i)}
|
31
|
+
params[:issuetypeIds] = values.join(',')
|
32
|
+
end
|
33
|
+
|
34
|
+
create_meta_url = client.options[:rest_base_path] + self.endpoint_name
|
35
|
+
params = hash_to_query_string(params)
|
36
|
+
|
37
|
+
response = params.empty? ? client.get("#{create_meta_url}") : client.get("#{create_meta_url}?#{params}")
|
38
|
+
|
39
|
+
json = parse_json(response.body)
|
40
|
+
self.new(client, {:attrs => json['projects']})
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.hash_to_query_string(query_params)
|
44
|
+
query_params.map do |k,v|
|
45
|
+
CGI.escape(k.to_s) + '=' + CGI.escape(v.to_s)
|
46
|
+
end.join('&')
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/jira/resource/field.rb
CHANGED
@@ -2,9 +2,82 @@ module JIRA
|
|
2
2
|
module Resource
|
3
3
|
|
4
4
|
class FieldFactory < JIRA::BaseFactory # :nodoc:
|
5
|
+
delegate_to_target_class :map_fields, :name_to_id, :field_map
|
5
6
|
end
|
6
7
|
|
7
|
-
class Field < JIRA::Base
|
8
|
+
class Field < JIRA::Base
|
8
9
|
|
10
|
+
#translate a custom field description to a method-safe name
|
11
|
+
def self.safe_name(description)
|
12
|
+
description.gsub(/[^a-zA-Z0-9]/,'_')
|
13
|
+
end
|
14
|
+
|
15
|
+
# safe_name plus disambiguation if it fails it uses the original jira id (customfield_#####)
|
16
|
+
def self.safer_name(description, jira_id)
|
17
|
+
"#{safe_name(description)}_#{jira_id.split('_')[1]}" rescue jira_id
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.map_fields(client)
|
21
|
+
field_map = {}
|
22
|
+
field_map_reverse = {}
|
23
|
+
fields = client.Field.all
|
24
|
+
|
25
|
+
# two pass approach, so that a custom field with the same name
|
26
|
+
# as a system field can't take precedence
|
27
|
+
fields.each do |f|
|
28
|
+
next if f.custom
|
29
|
+
name = safe_name(f.name)
|
30
|
+
field_map_reverse[f.id] = [f.name, name] # capture both the official name, and the mapped name
|
31
|
+
field_map[name] = f.id
|
32
|
+
end
|
33
|
+
|
34
|
+
fields.each do |f|
|
35
|
+
next unless f.custom
|
36
|
+
name = if field_map.key? f.name
|
37
|
+
renamed = safer_name(f.name, f.id)
|
38
|
+
warn "Duplicate Field name #{f.name} #{f.id} - renaming as #{renamed}"
|
39
|
+
renamed
|
40
|
+
else
|
41
|
+
safe_name(f.name)
|
42
|
+
end
|
43
|
+
field_map_reverse[f.id] = [f.name, name] # capture both the official name, and the mapped name
|
44
|
+
field_map[name] = f.id
|
45
|
+
end
|
46
|
+
|
47
|
+
client.cache.field_map_reverse = field_map_reverse # not sure where this will be used yet, but sure to be useful
|
48
|
+
client.cache.field_map = field_map
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.field_map(client)
|
52
|
+
client.cache.field_map
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.name_to_id(client, field_name)
|
56
|
+
field_name = field_name.to_s
|
57
|
+
return field_name unless client.cache.field_map && client.cache.field_map[field_name]
|
58
|
+
client.cache.field_map[field_name]
|
59
|
+
end
|
60
|
+
|
61
|
+
def respond_to?(method_name, include_all=false)
|
62
|
+
if [method_name.to_s, client.Field.name_to_id(method_name)].any? {|k| attrs.key?(k)}
|
63
|
+
true
|
64
|
+
else
|
65
|
+
super(method_name)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def method_missing(method_name, *args, &block)
|
70
|
+
if attrs.keys.include?(method_name.to_s)
|
71
|
+
attrs[method_name.to_s]
|
72
|
+
else
|
73
|
+
official_name=client.Field.name_to_id(method_name)
|
74
|
+
if attrs.keys.include?(official_name)
|
75
|
+
attrs[official_name]
|
76
|
+
else
|
77
|
+
super(method_name, *args, &block)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
9
82
|
end
|
10
83
|
end
|
data/lib/jira/resource/issue.rb
CHANGED
@@ -51,7 +51,7 @@ module JIRA
|
|
51
51
|
def self.jql(client, jql, options = {fields: nil, start_at: nil, max_results: nil, expand: nil})
|
52
52
|
url = client.options[:rest_base_path] + "/search?jql=" + CGI.escape(jql)
|
53
53
|
|
54
|
-
url << "&fields=#{options[:fields].map{ |value| CGI.escape(value
|
54
|
+
url << "&fields=#{options[:fields].map{ |value| CGI.escape(client.Field.name_to_id(value)) }.join(',')}" if options[:fields]
|
55
55
|
url << "&startAt=#{CGI.escape(options[:start_at].to_s)}" if options[:start_at]
|
56
56
|
url << "&maxResults=#{CGI.escape(options[:max_results].to_s)}" if options[:max_results]
|
57
57
|
|
@@ -67,8 +67,16 @@ module JIRA
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
def editmeta
|
71
|
+
editmeta_url = client.options[:rest_base_path] + "/#{self.class.endpoint_name}/#{key}/editmeta"
|
72
|
+
|
73
|
+
response = client.get(editmeta_url)
|
74
|
+
json = self.class.parse_json(response.body)
|
75
|
+
json['fields']
|
76
|
+
end
|
77
|
+
|
70
78
|
def respond_to?(method_name, include_all=false)
|
71
|
-
if attrs.keys.include?('fields') && attrs['fields'].
|
79
|
+
if attrs.keys.include?('fields') && [method_name.to_s, client.Field.name_to_id(method_name)].any? {|k| attrs['fields'].key?(k)}
|
72
80
|
true
|
73
81
|
else
|
74
82
|
super(method_name)
|
@@ -76,10 +84,19 @@ module JIRA
|
|
76
84
|
end
|
77
85
|
|
78
86
|
def method_missing(method_name, *args, &block)
|
79
|
-
if attrs.keys.include?('fields')
|
80
|
-
attrs['fields']
|
87
|
+
if attrs.keys.include?('fields')
|
88
|
+
if attrs['fields'].keys.include?(method_name.to_s)
|
89
|
+
attrs['fields'][method_name.to_s]
|
90
|
+
else
|
91
|
+
official_name=client.Field.name_to_id(method_name)
|
92
|
+
if attrs['fields'].keys.include?(official_name)
|
93
|
+
attrs['fields'][official_name]
|
94
|
+
else
|
95
|
+
super(method_name, *args, &block)
|
96
|
+
end
|
97
|
+
end
|
81
98
|
else
|
82
|
-
super(method_name)
|
99
|
+
super(method_name, *args, &block)
|
83
100
|
end
|
84
101
|
end
|
85
102
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module JIRA
|
4
|
+
module Resource
|
5
|
+
|
6
|
+
class SprintFactory < JIRA::BaseFactory # :nodoc:
|
7
|
+
end
|
8
|
+
|
9
|
+
class Sprint < JIRA::Base
|
10
|
+
|
11
|
+
def self.all(client, key)
|
12
|
+
response = client.get(path_base(client) + '/sprintquery/' + key.to_s)
|
13
|
+
parse_json(response.body)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find(client, key, options = {})
|
17
|
+
options[:maxResults] ||= 100
|
18
|
+
fields = options[:fields].join(',') unless options[:fields].nil?
|
19
|
+
response = client.get("/rest/api/latest/search?jql=sprint=#{key}&fields=#{fields}&maxResults=#{options[:maxResults]}")
|
20
|
+
parse_json(response.body)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def self.path_base(client)
|
26
|
+
client.options[:context_path] + '/rest/greenhopper/1.0'
|
27
|
+
end
|
28
|
+
|
29
|
+
def path_base(client)
|
30
|
+
self.class.path_base(client)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
data/lib/jira/resource/user.rb
CHANGED
@@ -2,6 +2,12 @@ module JIRA
|
|
2
2
|
module Resource
|
3
3
|
|
4
4
|
class UserFactory < JIRA::BaseFactory # :nodoc:
|
5
|
+
def myself
|
6
|
+
instance = build
|
7
|
+
response = client.get("#{client.options[:rest_base_path]}/myself")
|
8
|
+
instance.set_attrs_from_response(response)
|
9
|
+
instance
|
10
|
+
end
|
5
11
|
end
|
6
12
|
|
7
13
|
class User < JIRA::Base
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module JIRA
|
2
|
+
module Resource
|
3
|
+
|
4
|
+
class WebhookFactory < JIRA::BaseFactory # :nodoc:
|
5
|
+
end
|
6
|
+
|
7
|
+
class Webhook < JIRA::Base
|
8
|
+
|
9
|
+
REST_BASE_PATH = '/rest/webhooks/1.0'
|
10
|
+
|
11
|
+
def self.endpoint_name
|
12
|
+
'webhook'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.full_url(client)
|
16
|
+
client.options[:context_path] + REST_BASE_PATH
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.collection_path(client, prefix = '/')
|
20
|
+
self.full_url(client) + prefix + self.endpoint_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.all(client, options = {})
|
24
|
+
response = client.get(collection_path(client))
|
25
|
+
json = parse_json(response.body)
|
26
|
+
json.map do |attrs|
|
27
|
+
self.new(client, {:attrs => attrs}.merge(options))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# def self.save(options={})
|
32
|
+
# end
|
33
|
+
|
34
|
+
# def self.delete(options={})
|
35
|
+
|
36
|
+
# end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/jira/version.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JIRA::Resource::Resolution do
|
4
|
+
|
5
|
+
with_each_client do |site_url, client|
|
6
|
+
let(:client) { client }
|
7
|
+
let(:site_url) { site_url }
|
8
|
+
|
9
|
+
|
10
|
+
let(:key) { "1" }
|
11
|
+
|
12
|
+
let(:expected_attributes) do
|
13
|
+
{
|
14
|
+
'self' => "http://www.example.com/jira/rest/api/2/resolution/1",
|
15
|
+
'id' => key,
|
16
|
+
'name' => 'Fixed',
|
17
|
+
'description' => 'A fix for this issue is checked into the tree and tested.',
|
18
|
+
'iconUrl' => 'http://www.example.com/jira/images/icons/status_resolved.gif'
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:expected_collection_length) { 2 }
|
23
|
+
|
24
|
+
it_should_behave_like "a resource"
|
25
|
+
it_should_behave_like "a resource with a collection GET endpoint"
|
26
|
+
it_should_behave_like "a resource with a singular GET endpoint"
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JIRA::Resource::Webhook do
|
4
|
+
|
5
|
+
with_each_client do |site_url, client|
|
6
|
+
let(:client) { client }
|
7
|
+
let(:site_url) { site_url }
|
8
|
+
|
9
|
+
|
10
|
+
let(:key) { "2" }
|
11
|
+
|
12
|
+
let(:expected_attributes) do
|
13
|
+
{"name"=>"from API", "url"=>"http://localhost:3000/webhooks/1", "excludeBody"=>false, "filters"=>{"issue-related-events-section"=>""}, "events"=>[], "enabled"=>true, "self"=>"http://localhost:2990/jira/rest/webhooks/1.0/webhook/2", "lastUpdatedUser"=>"admin", "lastUpdatedDisplayName"=>"admin", "lastUpdated"=>1453306520188}
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:expected_collection_length) { 1 }
|
17
|
+
|
18
|
+
it_should_behave_like "a resource"
|
19
|
+
it_should_behave_like "a resource with a collection GET endpoint"
|
20
|
+
it_should_behave_like "a resource with a singular GET endpoint"
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
it "returns a collection of components" do
|
25
|
+
|
26
|
+
stub_request(:get, site_url + described_class.singular_path(client, key)).
|
27
|
+
to_return(:status => 200, :body => get_mock_response('webhook/webhook.json'))
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/jira/base_spec.rb
CHANGED
@@ -427,9 +427,12 @@ describe JIRA::Base do
|
|
427
427
|
end
|
428
428
|
|
429
429
|
it "converts to json" do
|
430
|
-
subject.attrs = {
|
431
|
-
|
430
|
+
subject.attrs = { 'foo' => 'bar', 'dead' => 'beef' }
|
432
431
|
expect(subject.to_json).to eq(subject.attrs.to_json)
|
432
|
+
|
433
|
+
h = { 'key' => subject }
|
434
|
+
h_attrs = { 'key' => subject.attrs }
|
435
|
+
expect(h.to_json).to eq(h_attrs.to_json)
|
433
436
|
end
|
434
437
|
|
435
438
|
describe "extract attrs from response" do
|
@@ -0,0 +1,253 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JIRA::Resource::Createmeta do
|
4
|
+
let(:client) {
|
5
|
+
double(
|
6
|
+
'client',
|
7
|
+
:options => {
|
8
|
+
:rest_base_path => '/jira/rest/api/2'
|
9
|
+
}
|
10
|
+
)
|
11
|
+
}
|
12
|
+
|
13
|
+
let(:response) {
|
14
|
+
double(
|
15
|
+
'response',
|
16
|
+
:body => '{"expand":"projects","projects":[{"self":"http://localhost:2029/rest/api/2/project/TST"}]}'
|
17
|
+
)
|
18
|
+
}
|
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
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
describe 'projectKeys' do
|
40
|
+
it 'should query correct url when only one `projectKeys` given as string' do
|
41
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1').and_return(response)
|
42
|
+
JIRA::Resource::Createmeta.all(
|
43
|
+
client,
|
44
|
+
:projectKeys => 'PROJECT_1',
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should query correct url when multiple `projectKeys` given as string' do
|
49
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPROJECT_2').and_return(response)
|
50
|
+
JIRA::Resource::Createmeta.all(
|
51
|
+
client,
|
52
|
+
:projectKeys => ['PROJECT_1', 'PROJECT_2'],
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should query correct url when only one `projectKeys` given as Project' do
|
57
|
+
prj = JIRA::Resource::Project.new(client)
|
58
|
+
allow(prj).to receive(:key).and_return('PRJ')
|
59
|
+
|
60
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ').and_return(response)
|
61
|
+
JIRA::Resource::Createmeta.all(
|
62
|
+
client,
|
63
|
+
:projectKeys => prj,
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should query correct url when multiple `projectKeys` given as Project' do
|
68
|
+
prj_1 = JIRA::Resource::Project.new(client)
|
69
|
+
allow(prj_1).to receive(:key).and_return('PRJ_1')
|
70
|
+
prj_2 = JIRA::Resource::Project.new(client)
|
71
|
+
allow(prj_2).to receive(:key).and_return('PRJ_2')
|
72
|
+
|
73
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PRJ_2%2CPRJ_1').and_return(response)
|
74
|
+
JIRA::Resource::Createmeta.all(
|
75
|
+
client,
|
76
|
+
:projectKeys => [prj_2, prj_1],
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should query correct url when multiple `projectKeys` given as different types' do
|
81
|
+
prj_5 = JIRA::Resource::Project.new(client)
|
82
|
+
allow(prj_5).to receive(:key).and_return('PRJ_5')
|
83
|
+
|
84
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectKeys=PROJECT_1%2CPRJ_5').and_return(response)
|
85
|
+
JIRA::Resource::Createmeta.all(
|
86
|
+
client,
|
87
|
+
:projectKeys => ['PROJECT_1', prj_5],
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
describe 'projectIds' do
|
94
|
+
it 'should query correct url when only one `projectIds` given as string' do
|
95
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101').and_return(response)
|
96
|
+
JIRA::Resource::Createmeta.all(
|
97
|
+
client,
|
98
|
+
:projectIds => '10101',
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should query correct url when multiple `projectIds` given as string' do
|
103
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C20202').and_return(response)
|
104
|
+
JIRA::Resource::Createmeta.all(
|
105
|
+
client,
|
106
|
+
:projectIds => ['10101', '20202'],
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should query correct url when only one `projectIds` given as Project' do
|
111
|
+
prj = JIRA::Resource::Project.new(client)
|
112
|
+
allow(prj).to receive(:id).and_return('30303')
|
113
|
+
|
114
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=30303').and_return(response)
|
115
|
+
JIRA::Resource::Createmeta.all(
|
116
|
+
client,
|
117
|
+
:projectIds => prj,
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'should query correct url when multiple `projectIds` given as Project' do
|
122
|
+
prj_1 = JIRA::Resource::Project.new(client)
|
123
|
+
allow(prj_1).to receive(:id).and_return('30303')
|
124
|
+
prj_2 = JIRA::Resource::Project.new(client)
|
125
|
+
allow(prj_2).to receive(:id).and_return('50505')
|
126
|
+
|
127
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=50505%2C30303').and_return(response)
|
128
|
+
JIRA::Resource::Createmeta.all(
|
129
|
+
client,
|
130
|
+
:projectIds => [prj_2, prj_1],
|
131
|
+
)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should query correct url when multiple `projectIds` given as different types' do
|
135
|
+
prj_5 = JIRA::Resource::Project.new(client)
|
136
|
+
allow(prj_5).to receive(:id).and_return('60606')
|
137
|
+
|
138
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?projectIds=10101%2C60606').and_return(response)
|
139
|
+
JIRA::Resource::Createmeta.all(
|
140
|
+
client,
|
141
|
+
:projectIds => ['10101', prj_5],
|
142
|
+
)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
describe 'issuetypeNames' do
|
148
|
+
it 'should query correct url when only one `issuetypeNames` given as string' do
|
149
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature').and_return(response)
|
150
|
+
JIRA::Resource::Createmeta.all(
|
151
|
+
client,
|
152
|
+
:issuetypeNames => 'Feature',
|
153
|
+
)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'should query correct url when multiple `issuetypeNames` given as string' do
|
157
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CBug').and_return(response)
|
158
|
+
JIRA::Resource::Createmeta.all(
|
159
|
+
client,
|
160
|
+
:issuetypeNames => ['Feature', 'Bug'],
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should query correct url when only one `issuetypeNames` given as Issuetype' do
|
165
|
+
issue_type = JIRA::Resource::Issuetype.new(client)
|
166
|
+
allow(issue_type).to receive(:name).and_return('Epic')
|
167
|
+
|
168
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Epic').and_return(response)
|
169
|
+
JIRA::Resource::Createmeta.all(
|
170
|
+
client,
|
171
|
+
:issuetypeNames => issue_type,
|
172
|
+
)
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'should query correct url when multiple `issuetypeNames` given as Issuetype' do
|
176
|
+
issue_type_1 = JIRA::Resource::Issuetype.new(client)
|
177
|
+
allow(issue_type_1).to receive(:name).and_return('Epic')
|
178
|
+
issue_type_2 = JIRA::Resource::Issuetype.new(client)
|
179
|
+
allow(issue_type_2).to receive(:name).and_return('Sub-Task')
|
180
|
+
|
181
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Sub-Task%2CEpic').and_return(response)
|
182
|
+
JIRA::Resource::Createmeta.all(
|
183
|
+
client,
|
184
|
+
:issuetypeNames => [issue_type_2, issue_type_1],
|
185
|
+
)
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'should query correct url when multiple `issuetypeNames` given as different types' do
|
189
|
+
issue_type = JIRA::Resource::Issuetype.new(client)
|
190
|
+
allow(issue_type).to receive(:name).and_return('Epic')
|
191
|
+
|
192
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeNames=Feature%2CEpic').and_return(response)
|
193
|
+
JIRA::Resource::Createmeta.all(
|
194
|
+
client,
|
195
|
+
:issuetypeNames => ['Feature', issue_type],
|
196
|
+
)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
|
201
|
+
describe 'issuetypeIds' do
|
202
|
+
it 'should query correct url when only one `issuetypeIds` given as string' do
|
203
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101').and_return(response)
|
204
|
+
JIRA::Resource::Createmeta.all(
|
205
|
+
client,
|
206
|
+
:issuetypeIds => '10101',
|
207
|
+
)
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'should query correct url when multiple `issuetypeIds` given as string' do
|
211
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C20202').and_return(response)
|
212
|
+
JIRA::Resource::Createmeta.all(
|
213
|
+
client,
|
214
|
+
:issuetypeIds => ['10101', '20202'],
|
215
|
+
)
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'should query correct url when only one `issuetypeIds` given as Issuetype' do
|
219
|
+
issue_type = JIRA::Resource::Issuetype.new(client)
|
220
|
+
allow(issue_type).to receive(:id).and_return('30303')
|
221
|
+
|
222
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=30303').and_return(response)
|
223
|
+
JIRA::Resource::Createmeta.all(
|
224
|
+
client,
|
225
|
+
:issuetypeIds => issue_type,
|
226
|
+
)
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'should query correct url when multiple `issuetypeIds` given as Issuetype' do
|
230
|
+
issue_type_1 = JIRA::Resource::Issuetype.new(client)
|
231
|
+
allow(issue_type_1).to receive(:id).and_return('30303')
|
232
|
+
issue_type_2 = JIRA::Resource::Issuetype.new(client)
|
233
|
+
allow(issue_type_2).to receive(:id).and_return('50505')
|
234
|
+
|
235
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=50505%2C30303').and_return(response)
|
236
|
+
JIRA::Resource::Createmeta.all(
|
237
|
+
client,
|
238
|
+
:issuetypeIds => [issue_type_2, issue_type_1],
|
239
|
+
)
|
240
|
+
end
|
241
|
+
|
242
|
+
it 'should query correct url when multiple `issuetypeIds` given as different types' do
|
243
|
+
issue_type = JIRA::Resource::Issuetype.new(client)
|
244
|
+
allow(issue_type).to receive(:id).and_return('30303')
|
245
|
+
|
246
|
+
expect(client).to receive(:get).with('/jira/rest/api/2/issue/createmeta?issuetypeIds=10101%2C30303').and_return(response)
|
247
|
+
JIRA::Resource::Createmeta.all(
|
248
|
+
client,
|
249
|
+
:issuetypeIds => ['10101', issue_type],
|
250
|
+
)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|