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