tinybucket 0.1.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.
Files changed (138) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +35 -0
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +44 -0
  6. data/.travis.yml +10 -0
  7. data/Gemfile +22 -0
  8. data/Guardfile +13 -0
  9. data/LICENSE +21 -0
  10. data/README.md +237 -0
  11. data/Rakefile +39 -0
  12. data/lib/faraday_middleware/follow_oauth_redirects.rb +67 -0
  13. data/lib/tinybucket.rb +61 -0
  14. data/lib/tinybucket/api.rb +20 -0
  15. data/lib/tinybucket/api/base_api.rb +31 -0
  16. data/lib/tinybucket/api/branch_restrictions_api.rb +26 -0
  17. data/lib/tinybucket/api/comments_api.rb +46 -0
  18. data/lib/tinybucket/api/commits_api.rb +26 -0
  19. data/lib/tinybucket/api/diff_api.rb +17 -0
  20. data/lib/tinybucket/api/helper.rb +22 -0
  21. data/lib/tinybucket/api/helper/api_helper.rb +48 -0
  22. data/lib/tinybucket/api/helper/branch_restrictions_helper.rb +27 -0
  23. data/lib/tinybucket/api/helper/comments_helper.rb +49 -0
  24. data/lib/tinybucket/api/helper/commits_helper.rb +27 -0
  25. data/lib/tinybucket/api/helper/diff_helper.rb +29 -0
  26. data/lib/tinybucket/api/helper/pull_requests_helper.rb +44 -0
  27. data/lib/tinybucket/api/helper/repo_helper.rb +29 -0
  28. data/lib/tinybucket/api/helper/repos_helper.rb +21 -0
  29. data/lib/tinybucket/api/helper/team_helper.rb +35 -0
  30. data/lib/tinybucket/api/helper/user_helper.rb +31 -0
  31. data/lib/tinybucket/api/pull_requests_api.rb +49 -0
  32. data/lib/tinybucket/api/repo_api.rb +35 -0
  33. data/lib/tinybucket/api/repos_api.rb +19 -0
  34. data/lib/tinybucket/api/team_api.rb +51 -0
  35. data/lib/tinybucket/api/user_api.rb +44 -0
  36. data/lib/tinybucket/api_factory.rb +21 -0
  37. data/lib/tinybucket/client.rb +95 -0
  38. data/lib/tinybucket/connection.rb +62 -0
  39. data/lib/tinybucket/constants.rb +4 -0
  40. data/lib/tinybucket/error.rb +8 -0
  41. data/lib/tinybucket/error/base_error.rb +12 -0
  42. data/lib/tinybucket/error/service_error.rb +20 -0
  43. data/lib/tinybucket/model.rb +20 -0
  44. data/lib/tinybucket/model/base.rb +54 -0
  45. data/lib/tinybucket/model/branch_restriction.rb +17 -0
  46. data/lib/tinybucket/model/comment.rb +39 -0
  47. data/lib/tinybucket/model/commit.rb +39 -0
  48. data/lib/tinybucket/model/concerns.rb +14 -0
  49. data/lib/tinybucket/model/concerns/reloadable.rb +45 -0
  50. data/lib/tinybucket/model/concerns/repository_keys.rb +43 -0
  51. data/lib/tinybucket/model/error_response.rb +7 -0
  52. data/lib/tinybucket/model/page.rb +65 -0
  53. data/lib/tinybucket/model/profile.rb +37 -0
  54. data/lib/tinybucket/model/pull_request.rb +64 -0
  55. data/lib/tinybucket/model/repository.rb +96 -0
  56. data/lib/tinybucket/model/team.rb +39 -0
  57. data/lib/tinybucket/parser.rb +25 -0
  58. data/lib/tinybucket/parser/base_parser.rb +17 -0
  59. data/lib/tinybucket/parser/branch_restriction_parser.rb +9 -0
  60. data/lib/tinybucket/parser/branch_restrictions_parser.rb +10 -0
  61. data/lib/tinybucket/parser/comment_parser.rb +9 -0
  62. data/lib/tinybucket/parser/comments_parser.rb +10 -0
  63. data/lib/tinybucket/parser/commit_parser.rb +9 -0
  64. data/lib/tinybucket/parser/commits_parser.rb +9 -0
  65. data/lib/tinybucket/parser/profile_parser.rb +9 -0
  66. data/lib/tinybucket/parser/profiles_parser.rb +9 -0
  67. data/lib/tinybucket/parser/pull_request_parser.rb +9 -0
  68. data/lib/tinybucket/parser/pull_requests_parser.rb +10 -0
  69. data/lib/tinybucket/parser/repo_parser.rb +9 -0
  70. data/lib/tinybucket/parser/repos_parser.rb +10 -0
  71. data/lib/tinybucket/parser/team_parser.rb +9 -0
  72. data/lib/tinybucket/parser/teams_parser.rb +9 -0
  73. data/lib/tinybucket/request.rb +55 -0
  74. data/lib/tinybucket/response.rb +7 -0
  75. data/lib/tinybucket/response/error_handler.rb +14 -0
  76. data/lib/tinybucket/version.rb +3 -0
  77. data/spec/fixtures/commit.json +83 -0
  78. data/spec/fixtures/profile.json +29 -0
  79. data/spec/fixtures/pull_request.json +106 -0
  80. data/spec/fixtures/repositories/get.json +78 -0
  81. data/spec/fixtures/repositories/test_owner/get.json +78 -0
  82. data/spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/1/get.json +17 -0
  83. data/spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/get.json +101 -0
  84. data/spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/1/get.json +38 -0
  85. data/spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/get.json +40 -0
  86. data/spec/fixtures/repositories/test_owner/test_repo/commit/1/get.json +83 -0
  87. data/spec/fixtures/repositories/test_owner/test_repo/commits/get.json +73 -0
  88. data/spec/fixtures/repositories/test_owner/test_repo/diff/1/get.json +21 -0
  89. data/spec/fixtures/repositories/test_owner/test_repo/forks/get.json +78 -0
  90. data/spec/fixtures/repositories/test_owner/test_repo/get.json +71 -0
  91. data/spec/fixtures/repositories/test_owner/test_repo/patch/1/get.json +29 -0
  92. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/approve/delete.json +3 -0
  93. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/approve/post.json +3 -0
  94. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/comments/1/get.json +30 -0
  95. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/comments/get.json +44 -0
  96. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/commits/get.json +66 -0
  97. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/diff/get.txt +13 -0
  98. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/get.json +164 -0
  99. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get.json +112 -0
  100. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get_state_declined.json +112 -0
  101. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get_state_merged.json +112 -0
  102. data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get_state_open.json +112 -0
  103. data/spec/fixtures/repositories/test_owner/test_repo/watchers/get.json +32 -0
  104. data/spec/fixtures/repository.json +71 -0
  105. data/spec/fixtures/teams/test_team/followers/get.json +36 -0
  106. data/spec/fixtures/teams/test_team/following/get.json +39 -0
  107. data/spec/fixtures/teams/test_team/get.json +32 -0
  108. data/spec/fixtures/teams/test_team/members/get.json +36 -0
  109. data/spec/fixtures/teams/test_team/repositories/get.json +125 -0
  110. data/spec/fixtures/users/test_owner/followers/get.json +65 -0
  111. data/spec/fixtures/users/test_owner/following/get.json +100 -0
  112. data/spec/fixtures/users/test_owner/get.json +29 -0
  113. data/spec/lib/tinybucket/api/branch_restrictions_api_spec.rb +78 -0
  114. data/spec/lib/tinybucket/api/comments_api_spec.rb +133 -0
  115. data/spec/lib/tinybucket/api/commits_api_spec.rb +63 -0
  116. data/spec/lib/tinybucket/api/diff_api_spec.rb +5 -0
  117. data/spec/lib/tinybucket/api/pull_requests_api_spec.rb +229 -0
  118. data/spec/lib/tinybucket/api/repo_api_spec.rb +100 -0
  119. data/spec/lib/tinybucket/api/repos_api_spec.rb +28 -0
  120. data/spec/lib/tinybucket/api/team_api_spec.rb +87 -0
  121. data/spec/lib/tinybucket/api/user_api_spec.rb +60 -0
  122. data/spec/lib/tinybucket/api_factory_spec.rb +23 -0
  123. data/spec/lib/tinybucket/client_spec.rb +102 -0
  124. data/spec/lib/tinybucket/connection_spec.rb +30 -0
  125. data/spec/lib/tinybucket/model/branch_restriction_spec.rb +29 -0
  126. data/spec/lib/tinybucket/model/comment_spec.rb +31 -0
  127. data/spec/lib/tinybucket/model/commit_spec.rb +62 -0
  128. data/spec/lib/tinybucket/model/page_spec.rb +58 -0
  129. data/spec/lib/tinybucket/model/profile_spec.rb +47 -0
  130. data/spec/lib/tinybucket/model/pull_request_spec.rb +122 -0
  131. data/spec/lib/tinybucket/model/repository_spec.rb +131 -0
  132. data/spec/lib/tinybucket/model/team_spec.rb +53 -0
  133. data/spec/lib/tinybucket_spec.rb +32 -0
  134. data/spec/spec_helper.rb +42 -0
  135. data/spec/support/api_response_macros.rb +30 -0
  136. data/spec/support/model_macros.rb +61 -0
  137. data/tinybucket.gemspec +36 -0
  138. metadata +437 -0
@@ -0,0 +1,100 @@
1
+ {
2
+ "pagelen": 10,
3
+ "values": [
4
+ {
5
+ "username": "jdoklovic",
6
+ "kind": "user",
7
+ "website": "http://www.sysbliss.com/",
8
+ "display_name": "Jonathan Doklovic",
9
+ "links": {
10
+ "self": {
11
+ "href": "https://api.bitbucket.org/2.0/users/jdoklovic"
12
+ },
13
+ "repositories": {
14
+ "href": "https://api.bitbucket.org/2.0/users/jdoklovic/repositories"
15
+ },
16
+ "html": {
17
+ "href": "https://api.bitbucket.org/jdoklovic"
18
+ },
19
+ "followers": {
20
+ "href": "https://api.bitbucket.org/2.0/users/jdoklovic/followers"
21
+ },
22
+ "avatar": {
23
+ "href": "https://bitbucket-assetroot.s3.amazonaws.com/c/photos/2010/Sep/30/jd_profile_avatar.jpg"
24
+ },
25
+ "following": {
26
+ "href": "https://api.bitbucket.org/2.0/users/jdoklovic/following"
27
+ }
28
+ },
29
+ "created_on": "2010-09-30T13:44:45.049874+00:00",
30
+ "location": "Minneapolis, MN",
31
+ "type":"user"
32
+ },
33
+ {
34
+ "username": "atlassian_tutorial",
35
+ "kind": "team",
36
+ "website": "",
37
+ "display_name": "Atlassian Tutorials",
38
+ "links": {
39
+ "self": {
40
+ "href": "https://api.bitbucket.org/2.0/teams/atlassian_tutorial"
41
+ },
42
+ "repositories": {
43
+ "href": "https://api.bitbucket.org/2.0/teams/atlassian_tutorial/repositories"
44
+ },
45
+ "html": {
46
+ "href": "https://api.bitbucket.org/atlassian_tutorial"
47
+ },
48
+ "followers": {
49
+ "href": "https://api.bitbucket.org/2.0/teams/atlassian_tutorial/followers"
50
+ },
51
+ "avatar": {
52
+ "href": "https://secure.gravatar.com/avatar/eb4e0ad6934518b3e335345a4ceeef21?d=https%3A%2F%2Fd3oaxc4q5k2d6q.cloudfront.net%2Fm%2Fbc85d1577e04%2Fimg%2Fdefault_team_avatar%2F32%2Fteam_blue.png&s=32"
53
+ },
54
+ "members": {
55
+ "href": "https://api.bitbucket.org/2.0/teams/atlassian_tutorial/members"
56
+ },
57
+ "following": {
58
+ "href": "https://api.bitbucket.org/2.0/teams/atlassian_tutorial/following"
59
+ }
60
+ },
61
+ "created_on": "2011-11-29T05:38:01.075233+00:00",
62
+ "location": "",
63
+ "type":"team"
64
+ },
65
+ {
66
+ "username": "cat_vasja",
67
+ "kind": "team",
68
+ "website": "",
69
+ "display_name": "cat_vasja",
70
+ "links": {
71
+ "self": {
72
+ "href": "https://api.bitbucket.org/2.0/teams/cat_vasja"
73
+ },
74
+ "repositories": {
75
+ "href": "https://api.bitbucket.org/2.0/teams/cat_vasja/repositories"
76
+ },
77
+ "html": {
78
+ "href": "https://api.bitbucket.org/cat_vasja"
79
+ },
80
+ "followers": {
81
+ "href": "https://api.bitbucket.org/2.0/teams/cat_vasja/followers"
82
+ },
83
+ "avatar": {
84
+ "href": "https://secure.gravatar.com/avatar/e16be80e861baccc5ed4691737faeb05?d=https%3A%2F%2Fd3oaxc4q5k2d6q.cloudfront.net%2Fm%2Fbc85d1577e04%2Fimg%2Fdefault_team_avatar%2F32%2Fteam_blue.png&s=32"
85
+ },
86
+ "members": {
87
+ "href": "https://api.bitbucket.org/2.0/teams/cat_vasja/members"
88
+ },
89
+ "following": {
90
+ "href": "https://api.bitbucket.org/2.0/teams/cat_vasja/following"
91
+ }
92
+ },
93
+ "created_on": "2012-10-09T19:45:37.292078+00:00",
94
+ "location": "Deutschland",
95
+ "type":"team"
96
+ }
97
+ ],
98
+ "page": 1,
99
+ "size": 3
100
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "username": "tutorials",
3
+ "kind": "user",
4
+ "website": "https://tutorials.bitbucket.org/",
5
+ "display_name": "first name last",
6
+ "links": {
7
+ "self": {
8
+ "href": "https://api.bitbucket.org/2.0/users/tutorials"
9
+ },
10
+ "repositories": {
11
+ "href": "https://api.bitbucket.org/2.0/users/tutorials/repositories"
12
+ },
13
+ "html": {
14
+ "href": "https://api.bitbucket.org/tutorials"
15
+ },
16
+ "followers": {
17
+ "href": "https://api.bitbucket.org/2.0/users/tutorials/followers"
18
+ },
19
+ "avatar": {
20
+ "href": "https://bitbucket-assetroot.s3.amazonaws.com/c/photos/2013/Jul/17/tutorials-avatar-1826704565-4_avatar.png"
21
+ },
22
+ "following": {
23
+ "href": "https://api.bitbucket.org/2.0/users/tutorials/following"
24
+ }
25
+ },
26
+ "created_on": "2011-12-20T16:34:07.132459+00:00",
27
+ "location": "San Francisco, CA",
28
+ "type": "user"
29
+ }
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Tinybucket::Api::BranchRestrictionsApi do
4
+ include ApiResponseMacros
5
+
6
+ let(:owner) { 'test_owner' }
7
+ let(:slug) { 'test_repo' }
8
+ let(:request_path) { nil }
9
+
10
+ let(:api_config) { {} }
11
+ let(:api) do
12
+ api = Tinybucket::Api::BranchRestrictionsApi.new(api_config)
13
+ api.repo_owner = owner
14
+ api.repo_slug = slug
15
+ api
16
+ end
17
+
18
+ it { expect(api).to be_a_kind_of(Tinybucket::Api::BaseApi) }
19
+
20
+ before { stub_apiresponse(:get, request_path) if request_path }
21
+
22
+ describe '#list' do
23
+ subject { api.list }
24
+
25
+ context 'without repo_owner and repo_slug' do
26
+ let(:owner) { nil }
27
+ let(:slug) { nil }
28
+ it { expect { subject }.to raise_error(ArgumentError) }
29
+ end
30
+
31
+ context 'without repo_owner' do
32
+ let(:owner) { nil }
33
+ it { expect { subject }.to raise_error(ArgumentError) }
34
+ end
35
+
36
+ context 'without repo_slug' do
37
+ let(:slug) { nil }
38
+ it { expect { subject }.to raise_error(ArgumentError) }
39
+ end
40
+
41
+ context 'with repo_owner and repo_slug' do
42
+ let(:request_path) do
43
+ "/repositories/#{owner}/#{slug}/branch-restrictions"
44
+ end
45
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
46
+ end
47
+ end
48
+
49
+ describe '#find' do
50
+ let(:restriction_id) { '1' }
51
+ subject { api.find(restriction_id) }
52
+
53
+ context 'without repo_owner and repo_slug' do
54
+ let(:owner) { nil }
55
+ let(:slug) { nil }
56
+ it { expect { subject }.to raise_error(ArgumentError) }
57
+ end
58
+
59
+ context 'without repo_owner' do
60
+ let(:owner) { nil }
61
+ it { expect { subject }.to raise_error(ArgumentError) }
62
+ end
63
+
64
+ context 'without repo_slug' do
65
+ let(:slug) { nil }
66
+ it { expect { subject }.to raise_error(ArgumentError) }
67
+ end
68
+
69
+ context 'with repo_owner and repo_slug' do
70
+ let(:request_path) do
71
+ "/repositories/#{owner}/#{slug}/branch-restrictions/#{restriction_id}"
72
+ end
73
+ it 'return BranchRestriction Model' do
74
+ expect(subject).to be_an_instance_of(Tinybucket::Model::BranchRestriction)
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,133 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Tinybucket::Api::CommentsApi do
4
+ include ApiResponseMacros
5
+
6
+ let(:request_path) { nil }
7
+ let(:owner) { 'test_owner' }
8
+ let(:slug) { 'test_repo' }
9
+ let(:options) { {} }
10
+
11
+ let(:commit_hash) { '1' }
12
+ let(:commit) do
13
+ m = Tinybucket::Model::Commit.new({})
14
+ m.repo_owner = owner
15
+ m.repo_slug = slug
16
+ m.hash = commit_hash
17
+ m
18
+ end
19
+
20
+ let(:pullreq_id) { '1' }
21
+ let(:pullreq) do
22
+ m = Tinybucket::Model::PullRequest.new({})
23
+ m.repo_owner = owner
24
+ m.repo_slug = slug
25
+ m.id = pullreq_id
26
+ m
27
+ end
28
+
29
+ let(:commented_to) { nil }
30
+ let(:api_config) { {} }
31
+ let(:api) do
32
+ api = Tinybucket::Api::CommentsApi.new(api_config)
33
+ api.repo_owner = owner
34
+ api.repo_slug = slug
35
+ api.commented_to = commented_to if commented_to.present?
36
+ api
37
+ end
38
+
39
+ it { expect(api).to be_a_kind_of(Tinybucket::Api::BaseApi) }
40
+
41
+ before { stub_apiresponse(:get, request_path) if request_path }
42
+
43
+ describe '#list' do
44
+ subject { api.list(options) }
45
+ let(:commented_to) { commit }
46
+
47
+ context 'when without owner' do
48
+ let(:owner) { nil }
49
+ it { expect { subject }.to raise_error(ArgumentError) }
50
+ end
51
+
52
+ context 'when without slug' do
53
+ let(:slug) { nil }
54
+ it { expect { subject }.to raise_error(ArgumentError) }
55
+ end
56
+
57
+ context 'when without commented_to' do
58
+ let(:commented_to) { nil }
59
+ it { expect { subject }.to raise_error(ArgumentError) }
60
+ end
61
+
62
+ context 'when with unknown commented_to' do
63
+ let(:commented_to) { {} }
64
+ it { expect { subject }.to raise_error(ArgumentError) }
65
+ end
66
+
67
+ context 'when commented_to is commit' do
68
+ let(:commented_to) { commit }
69
+ let(:request_path) do
70
+ "/repositories/#{owner}/#{slug}/commit/#{commit_hash}/comments"
71
+ end
72
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
73
+ end
74
+
75
+ context 'when commented_to is pullreq' do
76
+ let(:commented_to) { pullreq }
77
+ let(:request_path) do
78
+ "/repositories/#{owner}/#{slug}/pullrequests/#{pullreq_id}/comments"
79
+ end
80
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
81
+ end
82
+ end
83
+
84
+ describe '#find' do
85
+ subject { api.find(comment_id, options) }
86
+ let(:commented_to) { commit }
87
+ let(:comment_id) { '1' }
88
+
89
+ context 'when without owner' do
90
+ let(:owner) { nil }
91
+ it { expect { subject }.to raise_error(ArgumentError) }
92
+ end
93
+
94
+ context 'when without slug' do
95
+ let(:slug) { nil }
96
+ it { expect { subject }.to raise_error(ArgumentError) }
97
+ end
98
+
99
+ context 'when without commented_to' do
100
+ let(:commented_to) { nil }
101
+ it { expect { subject }.to raise_error(ArgumentError) }
102
+ end
103
+
104
+ context 'when with unknown commented_to' do
105
+ let(:commented_to) { {} }
106
+ it { expect { subject }.to raise_error(ArgumentError) }
107
+ end
108
+
109
+ context 'when commented_to is commit' do
110
+ let(:commented_to) { commit }
111
+ let(:request_path) do
112
+ "/repositories/#{owner}/#{slug}/commit/#{commit_hash}" \
113
+ "/comments/#{comment_id}"
114
+ end
115
+ it 'return Comment model' do
116
+ expect(subject).to be_an_instance_of(Tinybucket::Model::Comment)
117
+ expect(subject.commented_to).to eq(commit)
118
+ end
119
+ end
120
+
121
+ context 'when commented_to is pull_request' do
122
+ let(:commented_to) { pullreq }
123
+ let(:request_path) do
124
+ "/repositories/#{owner}/#{slug}/pullrequests/#{pullreq_id}" \
125
+ "/comments/#{comment_id}"
126
+ end
127
+ it 'return Comment model' do
128
+ expect(subject).to be_an_instance_of(Tinybucket::Model::Comment)
129
+ expect(subject.commented_to).to eq(pullreq)
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Tinybucket::Api::CommitsApi do
4
+ include ApiResponseMacros
5
+
6
+ let(:request_path) { nil }
7
+ let(:owner) { 'test_owner' }
8
+ let(:slug) { 'test_repo' }
9
+ let(:options) { {} }
10
+
11
+ let(:api_config) { {} }
12
+ let(:api) do
13
+ api = Tinybucket::Api::CommitsApi.new(api_config)
14
+ api.repo_owner = owner
15
+ api.repo_slug = slug
16
+ api
17
+ end
18
+
19
+ it { expect(api).to be_a_kind_of(Tinybucket::Api::BaseApi) }
20
+
21
+ before { stub_apiresponse(:get, request_path) if request_path }
22
+
23
+ describe 'list' do
24
+ subject { api.list(options) }
25
+
26
+ context 'without owner' do
27
+ let(:owner) { nil }
28
+ it { expect { subject }.to raise_error(ArgumentError) }
29
+ end
30
+
31
+ context 'without slug' do
32
+ let(:slug) { nil }
33
+ it { expect { subject }.to raise_error(ArgumentError) }
34
+ end
35
+
36
+ context 'with owner and slug' do
37
+ let(:request_path) { "/repositories/#{owner}/#{slug}/commits" }
38
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
39
+ end
40
+ end
41
+
42
+ describe 'find' do
43
+ let(:revision) { '1' }
44
+ subject { api.find(revision, options) }
45
+
46
+ context 'without owner' do
47
+ let(:owner) { nil }
48
+ it { expect { subject }.to raise_error(ArgumentError) }
49
+ end
50
+
51
+ context 'without slug' do
52
+ let(:slug) { nil }
53
+ it { expect { subject }.to raise_error(ArgumentError) }
54
+ end
55
+
56
+ context 'with owner and slug' do
57
+ let(:request_path) do
58
+ "/repositories/#{owner}/#{slug}/commit/#{revision}"
59
+ end
60
+ it { expect(subject).to be_instance_of(Tinybucket::Model::Commit) }
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Tinybucket::Api::DiffApi do
4
+ pending 'TODO: add specs'
5
+ end
@@ -0,0 +1,229 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Tinybucket::Api::PullRequestsApi do
4
+ include ApiResponseMacros
5
+
6
+ let(:api_config) { {} }
7
+ let(:api) do
8
+ api = Tinybucket::Api::PullRequestsApi.new(api_config)
9
+ api.repo_owner = owner
10
+ api.repo_slug = slug
11
+ api
12
+ end
13
+
14
+ let(:owner) { 'test_owner' }
15
+ let(:slug) { 'test_repo' }
16
+ let(:request_path) { nil }
17
+ let(:request_method) { :get }
18
+ let(:stub_options) { nil }
19
+
20
+ it { expect(api).to be_a_kind_of(Tinybucket::Api::BaseApi) }
21
+
22
+ before do
23
+ if request_path
24
+ opts = stub_options.present? ? stub_options : {}
25
+ stub_apiresponse(request_method, request_path, opts)
26
+ end
27
+ end
28
+
29
+ describe 'list' do
30
+ let(:options) { {} }
31
+
32
+ subject { api.list(options) }
33
+
34
+ context 'without repo_owner and repo_slug' do
35
+ let(:owner) { nil }
36
+ let(:slug) { nil }
37
+ it { expect { subject }.to raise_error(ArgumentError) }
38
+ end
39
+
40
+ context 'without repo_owner' do
41
+ let(:owner) { nil }
42
+ let(:slug) { 'test_repo' }
43
+ it { expect { subject }.to raise_error(ArgumentError) }
44
+ end
45
+
46
+ context 'without repo_slug' do
47
+ let(:owner) { 'test_owner' }
48
+ let(:slug) { nil }
49
+ it { expect { subject }.to raise_error(ArgumentError) }
50
+ end
51
+
52
+ context 'with repo_owner and repo_slug' do
53
+ let(:request_path) { "/repositories/#{owner}/#{slug}/pullrequests" }
54
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
55
+ end
56
+
57
+ context 'when request with state' do
58
+ let(:options) { { state: state } }
59
+ let(:request_path) do
60
+ "/repositories/#{owner}/#{slug}/pullrequests?state=#{state}"
61
+ end
62
+
63
+ context 'when state is OPEN' do
64
+ let(:state) { 'open' }
65
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
66
+ end
67
+
68
+ context 'when state is DECLINED' do
69
+ let(:state) { 'declined' }
70
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
71
+ end
72
+
73
+ context 'when state is MERGED' do
74
+ let(:state) { 'merged' }
75
+ it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
76
+ end
77
+ end
78
+ end
79
+
80
+ describe 'find' do
81
+ let(:pr_id) { 1 }
82
+ subject { api.find(pr_id) }
83
+
84
+ context 'when without repo_owner and repo_slug' do
85
+ let(:owner) { nil }
86
+ let(:slug) { nil }
87
+ it { expect { subject }.to raise_error(ArgumentError) }
88
+ end
89
+
90
+ context 'when without repo_owner' do
91
+ let(:owner) { nil }
92
+ it { expect { subject }.to raise_error(ArgumentError) }
93
+ end
94
+
95
+ context 'when without repo_slug' do
96
+ let(:slug) { nil }
97
+ it { expect { subject }.to raise_error(ArgumentError) }
98
+ end
99
+
100
+ context 'when with repo_owner and repo_slug' do
101
+ let(:request_path) do
102
+ "/repositories/#{owner}/#{slug}/pullrequests/#{pr_id}"
103
+ end
104
+
105
+ it 'return pull request model' do
106
+ expect(subject).to be_an_instance_of(Tinybucket::Model::PullRequest)
107
+ end
108
+ end
109
+ end
110
+
111
+ describe 'commits' do
112
+ let(:pr_id) { 1 }
113
+ subject { api.commits(pr_id) }
114
+
115
+ context 'when without repo_owner and repo_slug' do
116
+ let(:owner) { nil }
117
+ let(:slug) { nil }
118
+ it { expect { subject }.to raise_error(ArgumentError) }
119
+ end
120
+
121
+ context 'when without repo_owner' do
122
+ let(:owner) { nil }
123
+ it { expect { subject }.to raise_error(ArgumentError) }
124
+ end
125
+
126
+ context 'when without repo_slug' do
127
+ let(:slug) { nil }
128
+ it { expect { subject }.to raise_error(ArgumentError) }
129
+ end
130
+
131
+ context 'when with repo_owner and repo_slug' do
132
+ let(:request_path) do
133
+ "/repositories/#{owner}/#{slug}/pullrequests/1/commits"
134
+ end
135
+ it 'return page model which contains commit models' do
136
+ expect(subject).to be_an_instance_of(Tinybucket::Model::Page)
137
+ end
138
+ end
139
+ end
140
+
141
+ describe 'approve' do
142
+ let(:pr_id) { 1 }
143
+ let(:request_method) { :post }
144
+ subject { api.approve(pr_id) }
145
+
146
+ context 'when without repo_owner and repo_slug' do
147
+ let(:owner) { nil }
148
+ let(:slug) { nil }
149
+ it { expect { subject }.to raise_error(ArgumentError) }
150
+ end
151
+
152
+ context 'when without repo_owner' do
153
+ let(:owner) { nil }
154
+ it { expect { subject }.to raise_error(ArgumentError) }
155
+ end
156
+
157
+ context 'when without repo_slug' do
158
+ let(:slug) { nil }
159
+ it { expect { subject }.to raise_error(ArgumentError) }
160
+ end
161
+
162
+ context 'when with repo_owner and repo_slug' do
163
+ let(:request_path) do
164
+ "/repositories/#{owner}/#{slug}/pullrequests/1/approve"
165
+ end
166
+ it { expect(subject).to be_truthy }
167
+ end
168
+ end
169
+
170
+ describe 'unapprove' do
171
+ let(:pr_id) { 1 }
172
+ let(:request_method) { :delete }
173
+ subject { api.unapprove(pr_id) }
174
+
175
+ context 'when without repo_owner and repo_slug' do
176
+ let(:owner) { nil }
177
+ let(:slug) { nil }
178
+ it { expect { subject }.to raise_error(ArgumentError) }
179
+ end
180
+
181
+ context 'when without repo_owner' do
182
+ let(:owner) { nil }
183
+ it { expect { subject }.to raise_error(ArgumentError) }
184
+ end
185
+
186
+ context 'when without repo_slug' do
187
+ let(:slug) { nil }
188
+ it { expect { subject }.to raise_error(ArgumentError) }
189
+ end
190
+
191
+ context 'when with repo_owner and repo_slug' do
192
+ let(:request_path) do
193
+ "/repositories/#{owner}/#{slug}/pullrequests/1/approve"
194
+ end
195
+ it { expect(subject).to be_truthy }
196
+ end
197
+ end
198
+
199
+ describe 'diff' do
200
+ let(:pr_id) { 1 }
201
+ subject { api.diff(pr_id) }
202
+
203
+ context 'when without repo_owner and repo_slug' do
204
+ let(:owner) { nil }
205
+ let(:slug) { nil }
206
+ it { expect { subject }.to raise_error(ArgumentError) }
207
+ end
208
+
209
+ context 'when without repo_owner' do
210
+ let(:owner) { nil }
211
+ it { expect { subject }.to raise_error(ArgumentError) }
212
+ end
213
+
214
+ context 'when without repo_slug' do
215
+ let(:slug) { nil }
216
+ it { expect { subject }.to raise_error(ArgumentError) }
217
+ end
218
+
219
+ context 'when with repo_owner and repo_slug' do
220
+ let(:stub_options) do
221
+ { content_type: 'plain/text' }
222
+ end
223
+ let(:request_path) do
224
+ "/repositories/#{owner}/#{slug}/pullrequests/1/diff"
225
+ end
226
+ it { expect(subject).to be_instance_of(String) }
227
+ end
228
+ end
229
+ end