sclemmer-jira-ruby 0.1.12

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 (107) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +46 -0
  6. data/README.rdoc +309 -0
  7. data/Rakefile +28 -0
  8. data/example.rb +119 -0
  9. data/http-basic-example.rb +112 -0
  10. data/lib/jira.rb +33 -0
  11. data/lib/jira/base.rb +497 -0
  12. data/lib/jira/base_factory.rb +49 -0
  13. data/lib/jira/client.rb +165 -0
  14. data/lib/jira/has_many_proxy.rb +43 -0
  15. data/lib/jira/http_client.rb +69 -0
  16. data/lib/jira/http_error.rb +16 -0
  17. data/lib/jira/oauth_client.rb +84 -0
  18. data/lib/jira/railtie.rb +10 -0
  19. data/lib/jira/request_client.rb +18 -0
  20. data/lib/jira/resource/attachment.rb +12 -0
  21. data/lib/jira/resource/comment.rb +14 -0
  22. data/lib/jira/resource/component.rb +10 -0
  23. data/lib/jira/resource/field.rb +10 -0
  24. data/lib/jira/resource/filter.rb +15 -0
  25. data/lib/jira/resource/issue.rb +80 -0
  26. data/lib/jira/resource/issuetype.rb +10 -0
  27. data/lib/jira/resource/priority.rb +10 -0
  28. data/lib/jira/resource/project.rb +31 -0
  29. data/lib/jira/resource/status.rb +10 -0
  30. data/lib/jira/resource/transition.rb +33 -0
  31. data/lib/jira/resource/user.rb +14 -0
  32. data/lib/jira/resource/version.rb +10 -0
  33. data/lib/jira/resource/worklog.rb +16 -0
  34. data/lib/jira/tasks.rb +0 -0
  35. data/lib/jira/version.rb +3 -0
  36. data/lib/tasks/generate.rake +18 -0
  37. data/sclemmer-jira-ruby.gemspec +28 -0
  38. data/spec/integration/attachment_spec.rb +23 -0
  39. data/spec/integration/comment_spec.rb +55 -0
  40. data/spec/integration/component_spec.rb +42 -0
  41. data/spec/integration/field_spec.rb +35 -0
  42. data/spec/integration/issue_spec.rb +94 -0
  43. data/spec/integration/issuetype_spec.rb +26 -0
  44. data/spec/integration/priority_spec.rb +27 -0
  45. data/spec/integration/project_spec.rb +56 -0
  46. data/spec/integration/status_spec.rb +27 -0
  47. data/spec/integration/transition_spec.rb +52 -0
  48. data/spec/integration/user_spec.rb +25 -0
  49. data/spec/integration/version_spec.rb +43 -0
  50. data/spec/integration/worklog_spec.rb +55 -0
  51. data/spec/jira/base_factory_spec.rb +46 -0
  52. data/spec/jira/base_spec.rb +583 -0
  53. data/spec/jira/client_spec.rb +188 -0
  54. data/spec/jira/has_many_proxy_spec.rb +47 -0
  55. data/spec/jira/http_client_spec.rb +109 -0
  56. data/spec/jira/http_error_spec.rb +26 -0
  57. data/spec/jira/oauth_client_spec.rb +111 -0
  58. data/spec/jira/request_client_spec.rb +14 -0
  59. data/spec/jira/resource/attachment_spec.rb +20 -0
  60. data/spec/jira/resource/filter_spec.rb +97 -0
  61. data/spec/jira/resource/issue_spec.rb +123 -0
  62. data/spec/jira/resource/project_factory_spec.rb +13 -0
  63. data/spec/jira/resource/project_spec.rb +70 -0
  64. data/spec/jira/resource/worklog_spec.rb +24 -0
  65. data/spec/mock_responses/attachment/10000.json +20 -0
  66. data/spec/mock_responses/component.post.json +28 -0
  67. data/spec/mock_responses/component/10000.invalid.put.json +5 -0
  68. data/spec/mock_responses/component/10000.json +39 -0
  69. data/spec/mock_responses/component/10000.put.json +39 -0
  70. data/spec/mock_responses/field.json +32 -0
  71. data/spec/mock_responses/field/1.json +15 -0
  72. data/spec/mock_responses/issue.json +1108 -0
  73. data/spec/mock_responses/issue.post.json +5 -0
  74. data/spec/mock_responses/issue/10002.invalid.put.json +6 -0
  75. data/spec/mock_responses/issue/10002.json +126 -0
  76. data/spec/mock_responses/issue/10002.put.missing_field_update.json +6 -0
  77. data/spec/mock_responses/issue/10002/comment.json +65 -0
  78. data/spec/mock_responses/issue/10002/comment.post.json +29 -0
  79. data/spec/mock_responses/issue/10002/comment/10000.json +29 -0
  80. data/spec/mock_responses/issue/10002/comment/10000.put.json +29 -0
  81. data/spec/mock_responses/issue/10002/transitions.json +49 -0
  82. data/spec/mock_responses/issue/10002/transitions.post.json +1 -0
  83. data/spec/mock_responses/issue/10002/worklog.json +98 -0
  84. data/spec/mock_responses/issue/10002/worklog.post.json +30 -0
  85. data/spec/mock_responses/issue/10002/worklog/10000.json +31 -0
  86. data/spec/mock_responses/issue/10002/worklog/10000.put.json +30 -0
  87. data/spec/mock_responses/issuetype.json +42 -0
  88. data/spec/mock_responses/issuetype/5.json +8 -0
  89. data/spec/mock_responses/priority.json +42 -0
  90. data/spec/mock_responses/priority/1.json +8 -0
  91. data/spec/mock_responses/project.json +12 -0
  92. data/spec/mock_responses/project/SAMPLEPROJECT.issues.json +1108 -0
  93. data/spec/mock_responses/project/SAMPLEPROJECT.json +84 -0
  94. data/spec/mock_responses/status.json +37 -0
  95. data/spec/mock_responses/status/1.json +7 -0
  96. data/spec/mock_responses/user_username=admin.json +17 -0
  97. data/spec/mock_responses/version.post.json +7 -0
  98. data/spec/mock_responses/version/10000.invalid.put.json +5 -0
  99. data/spec/mock_responses/version/10000.json +11 -0
  100. data/spec/mock_responses/version/10000.put.json +7 -0
  101. data/spec/spec_helper.rb +22 -0
  102. data/spec/support/clients_helper.rb +16 -0
  103. data/spec/support/matchers/have_attributes.rb +11 -0
  104. data/spec/support/matchers/have_many.rb +9 -0
  105. data/spec/support/matchers/have_one.rb +5 -0
  106. data/spec/support/shared_examples/integration.rb +194 -0
  107. metadata +302 -0
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Field 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
+ "id"=>key,
15
+ "name"=>"Description",
16
+ "custom"=>false,
17
+ "orderable"=>true,
18
+ "navigable"=>true,
19
+ "searchable"=>true,
20
+ "clauseNames"=>["description"],
21
+ "schema"=> {
22
+ "type"=>"string",
23
+ "system"=>"description"
24
+ }
25
+ }
26
+ end
27
+
28
+ let(:expected_collection_length) { 2 }
29
+
30
+ it_should_behave_like "a resource"
31
+ it_should_behave_like "a resource with a collection GET endpoint"
32
+ it_should_behave_like "a resource with a singular GET endpoint"
33
+
34
+ end
35
+ end
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Issue 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) { "10002" }
11
+
12
+ let(:expected_attributes) do
13
+ {
14
+ 'self' => "http://localhost:2990/jira/rest/api/2/issue/10002",
15
+ 'key' => "SAMPLEPROJECT-1",
16
+ 'expand' => "renderedFields,names,schema,transitions,editmeta,changelog"
17
+ }
18
+ end
19
+
20
+ let(:attributes_for_post) {
21
+ { 'foo' => 'bar' }
22
+ }
23
+ let(:expected_attributes_from_post) {
24
+ { "id" => "10005", "key" => "SAMPLEPROJECT-4" }
25
+ }
26
+
27
+ let(:attributes_for_put) {
28
+ { 'foo' => 'bar' }
29
+ }
30
+ let(:expected_attributes_from_put) {
31
+ { 'foo' => 'bar' }
32
+ }
33
+ let(:expected_collection_length) { 11 }
34
+
35
+ it_should_behave_like "a resource"
36
+ it_should_behave_like "a resource with a singular GET endpoint"
37
+ describe "GET all issues" do # JIRA::Resource::Issue.all uses the search endpoint
38
+ let(:client) { client }
39
+ let(:site_url) { site_url }
40
+
41
+ let(:expected_attributes) {
42
+ {
43
+ "id"=>"10014",
44
+ "self"=>"http://localhost:2990/jira/rest/api/2/issue/10014",
45
+ "key"=>"SAMPLEPROJECT-13"
46
+ }
47
+ }
48
+ before(:each) do
49
+ stub_request(:get, site_url + "/jira/rest/api/2/search").
50
+ to_return(:status => 200, :body => get_mock_response('issue.json'))
51
+ end
52
+ it_should_behave_like "a resource with a collection GET endpoint"
53
+ end
54
+ it_should_behave_like "a resource with a DELETE endpoint"
55
+ it_should_behave_like "a resource with a POST endpoint"
56
+ it_should_behave_like "a resource with a PUT endpoint"
57
+ it_should_behave_like "a resource with a PUT endpoint that rejects invalid fields"
58
+
59
+ describe "errors" do
60
+ before(:each) do
61
+ stub_request(:get,
62
+ site_url + "/jira/rest/api/2/issue/10002").
63
+ to_return(:status => 200, :body => get_mock_response('issue/10002.json'))
64
+ stub_request(:put, site_url + "/jira/rest/api/2/issue/10002").
65
+ with(:body => '{"missing":"fields and update"}').
66
+ to_return(:status => 400, :body => get_mock_response('issue/10002.put.missing_field_update.json'))
67
+ end
68
+
69
+ it "fails to save when fields and update are missing" do
70
+ subject = client.Issue.build('id' => '10002')
71
+ subject.fetch
72
+ expect(subject.save('missing' => 'fields and update')).to be_falsey
73
+ end
74
+
75
+ end
76
+
77
+ describe "GET jql issues" do # JIRA::Resource::Issue.jql uses the search endpoint
78
+ jql_query_string = "PROJECT = 'SAMPLEPROJECT'"
79
+ let(:client) { client }
80
+ let(:site_url) { site_url }
81
+ let(:jql_query_string) { jql_query_string }
82
+
83
+ let(:expected_attributes) {
84
+ {
85
+ "id"=>"10014",
86
+ "self"=>"http://localhost:2990/jira/rest/api/2/issue/10014",
87
+ "key"=>"SAMPLEPROJECT-13"
88
+ }
89
+ }
90
+ it_should_behave_like "a resource with JQL inputs and a collection GET endpoint"
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Issuetype do
4
+
5
+ with_each_client do |site_url, client|
6
+ let(:client) { client }
7
+ let(:site_url) { site_url }
8
+
9
+ let(:key) { "5" }
10
+
11
+ let(:expected_attributes) do
12
+ {
13
+ 'self' => "http://localhost:2990/jira/rest/api/2/issuetype/5",
14
+ 'id' => key,
15
+ 'name' => 'Sub-task'
16
+ }
17
+ end
18
+
19
+ let(:expected_collection_length) { 5 }
20
+
21
+ it_should_behave_like "a resource"
22
+ it_should_behave_like "a resource with a collection GET endpoint"
23
+ it_should_behave_like "a resource with a singular GET endpoint"
24
+
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Priority 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://localhost:2990/jira/rest/api/2/priority/1",
15
+ 'id' => key,
16
+ 'name' => 'Blocker'
17
+ }
18
+ end
19
+
20
+ let(:expected_collection_length) { 5 }
21
+
22
+ it_should_behave_like "a resource"
23
+ it_should_behave_like "a resource with a collection GET endpoint"
24
+ it_should_behave_like "a resource with a singular GET endpoint"
25
+
26
+ end
27
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Project 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) { "SAMPLEPROJECT" }
11
+
12
+ let(:expected_attributes) do
13
+ {
14
+ 'self' => "http://localhost:2990/jira/rest/api/2/project/SAMPLEPROJECT",
15
+ 'key' => key,
16
+ 'name' => "Sample Project for Developing RoR RESTful API"
17
+ }
18
+ end
19
+
20
+ let(:expected_collection_length) { 1 }
21
+
22
+ it_should_behave_like "a resource"
23
+ it_should_behave_like "a resource with a collection GET endpoint"
24
+ it_should_behave_like "a resource with a singular GET endpoint"
25
+
26
+ describe "issues" do
27
+
28
+ it "returns all the issues" do
29
+ stub_request(:get, site_url + "/jira/rest/api/2/search?jql=project=\"SAMPLEPROJECT\"").
30
+ to_return(:status => 200, :body => get_mock_response('project/SAMPLEPROJECT.issues.json'))
31
+ subject = client.Project.build('key' => key)
32
+ issues = subject.issues
33
+ expect(issues.length).to eq(11)
34
+ issues.each do |issue|
35
+ expect(issue.class).to eq(JIRA::Resource::Issue)
36
+ expect(issue.expanded?).to be_falsey
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ it "returns a collection of components" do
44
+
45
+ stub_request(:get, site_url + described_class.singular_path(client, key)).
46
+ to_return(:status => 200, :body => get_mock_response('project/SAMPLEPROJECT.json'))
47
+
48
+ subject = client.Project.find(key)
49
+ expect(subject.components.length).to eq(2)
50
+ subject.components.each do |component|
51
+ expect(component.class).to eq(JIRA::Resource::Component)
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Status 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://localhost:2990/jira/rest/api/2/status/1",
15
+ 'id' => key,
16
+ 'name' => 'Open'
17
+ }
18
+ end
19
+
20
+ let(:expected_collection_length) { 5 }
21
+
22
+ it_should_behave_like "a resource"
23
+ it_should_behave_like "a resource with a collection GET endpoint"
24
+ it_should_behave_like "a resource with a singular GET endpoint"
25
+
26
+ end
27
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Transition do
4
+
5
+ with_each_client do |site_url, client|
6
+ let(:client) { client }
7
+ let(:site_url) { site_url }
8
+
9
+ let(:key) { '10000' }
10
+
11
+ let(:target) { JIRA::Resource::Transition.new(client, :attrs => {'id' => '99999'}, :issue_id => '10014') }
12
+
13
+ let(:belongs_to) {
14
+ JIRA::Resource::Issue.new(client, :attrs => {
15
+ 'id' => '10002',
16
+ 'self' => "#{site_url}/jira/rest/api/2/issue/10002",
17
+ 'fields' => {
18
+ 'comment' => {'comments' => []}
19
+ }
20
+ })
21
+ }
22
+
23
+ let(:expected_attributes) do
24
+ {
25
+ 'self' => "#{site_url}/jira/rest/api/2/issue/10002/transition/10000",
26
+ 'id' => key
27
+ }
28
+ end
29
+
30
+ let(:attributes_for_post) {
31
+ {
32
+ 'transition' => {
33
+ 'id' => '42'
34
+ }
35
+ }
36
+ }
37
+
38
+ it_should_behave_like "a resource"
39
+
40
+ describe "POST endpoint" do
41
+ it "saves a new resource" do
42
+ stub_request(:post, /#{described_class.collection_path(client, prefix)}$/)
43
+ .with(:body => attributes_for_post.to_json)
44
+ .to_return(:status => 200, :body => get_mock_from_path(:post))
45
+ subject = build_receiver.build
46
+ expect(subject.save(attributes_for_post)).to be_truthy
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::User do
4
+
5
+
6
+ with_each_client do |site_url, client|
7
+ let(:client) { client }
8
+ let(:site_url) { site_url }
9
+
10
+
11
+ let(:key) { "admin" }
12
+
13
+ let(:expected_attributes) do
14
+ {
15
+ 'self' => "http://localhost:2990/jira/rest/api/2/user?username=admin",
16
+ 'name' => key,
17
+ 'emailAddress' => 'admin@example.com'
18
+ }
19
+ end
20
+
21
+ it_should_behave_like "a resource"
22
+ it_should_behave_like "a resource with a singular GET endpoint"
23
+
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Version do
4
+
5
+
6
+ with_each_client do |site_url, client|
7
+ let(:client) { client }
8
+ let(:site_url) { site_url }
9
+
10
+
11
+ let(:key) { "10000" }
12
+
13
+ let(:expected_attributes) do
14
+ {
15
+ 'self' => "http://localhost:2990/jira/rest/api/2/version/10000",
16
+ 'id' => key,
17
+ 'description' => "Initial version"
18
+ }
19
+ end
20
+
21
+ let(:attributes_for_post) {
22
+ {"name" => "2.0", "project" => "SAMPLEPROJECT" }
23
+ }
24
+ let(:expected_attributes_from_post) {
25
+ { "id" => "10001", "name" => "2.0" }
26
+ }
27
+
28
+ let(:attributes_for_put) {
29
+ {"name" => "2.0.0" }
30
+ }
31
+ let(:expected_attributes_from_put) {
32
+ { "id" => "10000", "name" => "2.0.0" }
33
+ }
34
+
35
+ it_should_behave_like "a resource"
36
+ it_should_behave_like "a resource with a singular GET endpoint"
37
+ it_should_behave_like "a resource with a DELETE endpoint"
38
+ it_should_behave_like "a resource with a POST endpoint"
39
+ it_should_behave_like "a resource with a PUT endpoint"
40
+ it_should_behave_like "a resource with a PUT endpoint that rejects invalid fields"
41
+
42
+ end
43
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe JIRA::Resource::Worklog do
4
+
5
+
6
+ with_each_client do |site_url, client|
7
+ let(:client) { client }
8
+ let(:site_url) { site_url }
9
+
10
+
11
+ let(:key) { "10000" }
12
+
13
+ let(:target) { JIRA::Resource::Worklog.new(client, :attrs => {'id' => '99999'}, :issue_id => '54321') }
14
+
15
+ let(:expected_collection_length) { 3 }
16
+
17
+ let(:belongs_to) {
18
+ JIRA::Resource::Issue.new(client, :attrs => {
19
+ 'id' => '10002', 'fields' => {
20
+ 'comment' => {'comments' => []}
21
+ }
22
+ })
23
+ }
24
+
25
+ let(:expected_attributes) do
26
+ {
27
+ 'self' => "http://localhost:2990/jira/rest/api/2/issue/10002/worklog/10000",
28
+ 'id' => key,
29
+ 'comment' => "Some epic work."
30
+ }
31
+ end
32
+
33
+ let(:attributes_for_post) {
34
+ {"timeSpent" => "2d"}
35
+ }
36
+ let(:expected_attributes_from_post) {
37
+ { "id" => "10001", "timeSpent" => "2d"}
38
+ }
39
+
40
+ let(:attributes_for_put) {
41
+ {"timeSpent" => "2d"}
42
+ }
43
+ let(:expected_attributes_from_put) {
44
+ { "id" => "10001", "timeSpent" => "4d"}
45
+ }
46
+
47
+ it_should_behave_like "a resource"
48
+ it_should_behave_like "a resource with a collection GET endpoint"
49
+ it_should_behave_like "a resource with a singular GET endpoint"
50
+ it_should_behave_like "a resource with a DELETE endpoint"
51
+ it_should_behave_like "a resource with a POST endpoint"
52
+ it_should_behave_like "a resource with a PUT endpoint"
53
+
54
+ end
55
+ end