gitlab-akerl 4.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.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.prospectus +11 -0
  4. data/.travis.yml +8 -0
  5. data/CHANGELOG.md +229 -0
  6. data/CONTRIBUTING.md +195 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +24 -0
  9. data/README.md +192 -0
  10. data/Rakefile +9 -0
  11. data/bin/console +10 -0
  12. data/bin/setup +6 -0
  13. data/exe/gitlab +7 -0
  14. data/gitlab-akerl.gemspec +31 -0
  15. data/lib/gitlab.rb +45 -0
  16. data/lib/gitlab/api.rb +19 -0
  17. data/lib/gitlab/cli.rb +89 -0
  18. data/lib/gitlab/cli_helpers.rb +241 -0
  19. data/lib/gitlab/client.rb +48 -0
  20. data/lib/gitlab/client/branches.rb +91 -0
  21. data/lib/gitlab/client/build_triggers.rb +51 -0
  22. data/lib/gitlab/client/build_variables.rb +66 -0
  23. data/lib/gitlab/client/builds.rb +106 -0
  24. data/lib/gitlab/client/commits.rb +121 -0
  25. data/lib/gitlab/client/groups.rb +144 -0
  26. data/lib/gitlab/client/issues.rb +113 -0
  27. data/lib/gitlab/client/labels.rb +57 -0
  28. data/lib/gitlab/client/merge_requests.rb +168 -0
  29. data/lib/gitlab/client/milestones.rb +78 -0
  30. data/lib/gitlab/client/namespaces.rb +20 -0
  31. data/lib/gitlab/client/notes.rb +161 -0
  32. data/lib/gitlab/client/pipelines.rb +68 -0
  33. data/lib/gitlab/client/projects.rb +471 -0
  34. data/lib/gitlab/client/repositories.rb +78 -0
  35. data/lib/gitlab/client/repository_files.rb +88 -0
  36. data/lib/gitlab/client/runners.rb +115 -0
  37. data/lib/gitlab/client/services.rb +50 -0
  38. data/lib/gitlab/client/snippets.rb +91 -0
  39. data/lib/gitlab/client/system_hooks.rb +59 -0
  40. data/lib/gitlab/client/tags.rb +96 -0
  41. data/lib/gitlab/client/users.rb +250 -0
  42. data/lib/gitlab/configuration.rb +55 -0
  43. data/lib/gitlab/error.rb +85 -0
  44. data/lib/gitlab/file_response.rb +46 -0
  45. data/lib/gitlab/help.rb +95 -0
  46. data/lib/gitlab/objectified_hash.rb +34 -0
  47. data/lib/gitlab/page_links.rb +33 -0
  48. data/lib/gitlab/paginated_response.rb +97 -0
  49. data/lib/gitlab/request.rb +117 -0
  50. data/lib/gitlab/shell.rb +84 -0
  51. data/lib/gitlab/shell_history.rb +59 -0
  52. data/lib/gitlab/version.rb +3 -0
  53. data/spec/fixtures/branch.json +1 -0
  54. data/spec/fixtures/branch_delete.json +3 -0
  55. data/spec/fixtures/branches.json +1 -0
  56. data/spec/fixtures/build.json +38 -0
  57. data/spec/fixtures/build_artifacts.json +0 -0
  58. data/spec/fixtures/build_cancel.json +24 -0
  59. data/spec/fixtures/build_erase.json +24 -0
  60. data/spec/fixtures/build_retry.json +24 -0
  61. data/spec/fixtures/builds.json +78 -0
  62. data/spec/fixtures/builds_commits.json +64 -0
  63. data/spec/fixtures/compare_merge_request_diff.json +31 -0
  64. data/spec/fixtures/error_already_exists.json +1 -0
  65. data/spec/fixtures/error_project_not_found.json +1 -0
  66. data/spec/fixtures/get_repository_file.json +1 -0
  67. data/spec/fixtures/git_hook.json +1 -0
  68. data/spec/fixtures/group.json +60 -0
  69. data/spec/fixtures/group_create.json +1 -0
  70. data/spec/fixtures/group_create_with_description.json +1 -0
  71. data/spec/fixtures/group_delete.json +1 -0
  72. data/spec/fixtures/group_member.json +1 -0
  73. data/spec/fixtures/group_member_delete.json +1 -0
  74. data/spec/fixtures/group_member_edit.json +1 -0
  75. data/spec/fixtures/group_members.json +1 -0
  76. data/spec/fixtures/group_projects.json +44 -0
  77. data/spec/fixtures/group_search.json +2 -0
  78. data/spec/fixtures/groups.json +2 -0
  79. data/spec/fixtures/issue.json +1 -0
  80. data/spec/fixtures/issues.json +1 -0
  81. data/spec/fixtures/key.json +1 -0
  82. data/spec/fixtures/keys.json +1 -0
  83. data/spec/fixtures/label.json +1 -0
  84. data/spec/fixtures/labels.json +1 -0
  85. data/spec/fixtures/merge_request.json +1 -0
  86. data/spec/fixtures/merge_request_changes.json +1 -0
  87. data/spec/fixtures/merge_request_comment.json +1 -0
  88. data/spec/fixtures/merge_request_comments.json +1 -0
  89. data/spec/fixtures/merge_request_commits.json +1 -0
  90. data/spec/fixtures/merge_requests.json +1 -0
  91. data/spec/fixtures/milestone.json +1 -0
  92. data/spec/fixtures/milestone_issues.json +1 -0
  93. data/spec/fixtures/milestones.json +1 -0
  94. data/spec/fixtures/namespaces.json +1 -0
  95. data/spec/fixtures/note.json +1 -0
  96. data/spec/fixtures/notes.json +1 -0
  97. data/spec/fixtures/pipeline.json +23 -0
  98. data/spec/fixtures/pipeline_cancel.json +23 -0
  99. data/spec/fixtures/pipeline_create.json +23 -0
  100. data/spec/fixtures/pipeline_retry.json +23 -0
  101. data/spec/fixtures/pipelines.json +48 -0
  102. data/spec/fixtures/project.json +1 -0
  103. data/spec/fixtures/project_commit.json +13 -0
  104. data/spec/fixtures/project_commit_comment.json +1 -0
  105. data/spec/fixtures/project_commit_comments.json +1 -0
  106. data/spec/fixtures/project_commit_diff.json +10 -0
  107. data/spec/fixtures/project_commit_status.json +42 -0
  108. data/spec/fixtures/project_commits.json +1 -0
  109. data/spec/fixtures/project_edit.json +21 -0
  110. data/spec/fixtures/project_events.json +1 -0
  111. data/spec/fixtures/project_for_user.json +1 -0
  112. data/spec/fixtures/project_fork.json +50 -0
  113. data/spec/fixtures/project_fork_link.json +1 -0
  114. data/spec/fixtures/project_forked_for_user.json +50 -0
  115. data/spec/fixtures/project_hook.json +1 -0
  116. data/spec/fixtures/project_hooks.json +1 -0
  117. data/spec/fixtures/project_issues.json +1 -0
  118. data/spec/fixtures/project_key.json +6 -0
  119. data/spec/fixtures/project_keys.json +6 -0
  120. data/spec/fixtures/project_runner_enable.json +7 -0
  121. data/spec/fixtures/project_runners.json +16 -0
  122. data/spec/fixtures/project_search.json +1 -0
  123. data/spec/fixtures/project_star.json +44 -0
  124. data/spec/fixtures/project_tag_annotated.json +1 -0
  125. data/spec/fixtures/project_tag_lightweight.json +1 -0
  126. data/spec/fixtures/project_tags.json +1 -0
  127. data/spec/fixtures/project_unstar.json +44 -0
  128. data/spec/fixtures/project_update_commit_status.json +20 -0
  129. data/spec/fixtures/projects.json +1 -0
  130. data/spec/fixtures/raw_file.json +2 -0
  131. data/spec/fixtures/release_create.json +1 -0
  132. data/spec/fixtures/release_update.json +1 -0
  133. data/spec/fixtures/repository_file.json +1 -0
  134. data/spec/fixtures/runner.json +26 -0
  135. data/spec/fixtures/runner_delete.json +7 -0
  136. data/spec/fixtures/runner_edit.json +26 -0
  137. data/spec/fixtures/runners.json +16 -0
  138. data/spec/fixtures/runners_all.json +30 -0
  139. data/spec/fixtures/service.json +1 -0
  140. data/spec/fixtures/session.json +1 -0
  141. data/spec/fixtures/shell_history.json +2 -0
  142. data/spec/fixtures/snippet.json +1 -0
  143. data/spec/fixtures/snippet_content.json +3 -0
  144. data/spec/fixtures/snippets.json +1 -0
  145. data/spec/fixtures/system_hook.json +1 -0
  146. data/spec/fixtures/system_hooks.json +1 -0
  147. data/spec/fixtures/tag.json +1 -0
  148. data/spec/fixtures/tag_create.json +1 -0
  149. data/spec/fixtures/tag_create_with_description.json +1 -0
  150. data/spec/fixtures/tag_delete.json +1 -0
  151. data/spec/fixtures/tags.json +1 -0
  152. data/spec/fixtures/team_member.json +1 -0
  153. data/spec/fixtures/team_members.json +1 -0
  154. data/spec/fixtures/tree.json +1 -0
  155. data/spec/fixtures/trigger.json +7 -0
  156. data/spec/fixtures/triggers.json +16 -0
  157. data/spec/fixtures/user.json +1 -0
  158. data/spec/fixtures/user_block_unblock.json +1 -0
  159. data/spec/fixtures/user_email.json +1 -0
  160. data/spec/fixtures/user_emails.json +1 -0
  161. data/spec/fixtures/user_search.json +1 -0
  162. data/spec/fixtures/users.json +1 -0
  163. data/spec/fixtures/variable.json +4 -0
  164. data/spec/fixtures/variables.json +10 -0
  165. data/spec/gitlab/cli_helpers_spec.rb +57 -0
  166. data/spec/gitlab/cli_spec.rb +110 -0
  167. data/spec/gitlab/client/branches_spec.rb +99 -0
  168. data/spec/gitlab/client/build_triggers_spec.rb +67 -0
  169. data/spec/gitlab/client/build_variables_spec.rb +86 -0
  170. data/spec/gitlab/client/builds_spec.rb +148 -0
  171. data/spec/gitlab/client/client_spec.rb +11 -0
  172. data/spec/gitlab/client/commits_spec.rb +137 -0
  173. data/spec/gitlab/client/groups_spec.rb +197 -0
  174. data/spec/gitlab/client/issues_spec.rb +138 -0
  175. data/spec/gitlab/client/labels_spec.rb +68 -0
  176. data/spec/gitlab/client/merge_requests_spec.rb +177 -0
  177. data/spec/gitlab/client/milestones_spec.rb +82 -0
  178. data/spec/gitlab/client/namespaces_spec.rb +22 -0
  179. data/spec/gitlab/client/notes_spec.rb +205 -0
  180. data/spec/gitlab/client/pipelines_spec.rb +95 -0
  181. data/spec/gitlab/client/projects_spec.rb +603 -0
  182. data/spec/gitlab/client/repositories_spec.rb +109 -0
  183. data/spec/gitlab/client/repository_files_spec.rb +62 -0
  184. data/spec/gitlab/client/runners_spec.rb +185 -0
  185. data/spec/gitlab/client/services_spec.rb +55 -0
  186. data/spec/gitlab/client/snippets_spec.rb +100 -0
  187. data/spec/gitlab/client/system_hooks_spec.rb +69 -0
  188. data/spec/gitlab/client/tags_spec.rb +109 -0
  189. data/spec/gitlab/client/users_spec.rb +418 -0
  190. data/spec/gitlab/error_spec.rb +45 -0
  191. data/spec/gitlab/file_response_spec.rb +33 -0
  192. data/spec/gitlab/help_spec.rb +46 -0
  193. data/spec/gitlab/objectified_hash_spec.rb +48 -0
  194. data/spec/gitlab/page_links_spec.rb +16 -0
  195. data/spec/gitlab/paginated_response_spec.rb +60 -0
  196. data/spec/gitlab/request_spec.rb +73 -0
  197. data/spec/gitlab/shell_history_spec.rb +53 -0
  198. data/spec/gitlab/shell_spec.rb +80 -0
  199. data/spec/gitlab_spec.rb +97 -0
  200. data/spec/spec_helper.rb +74 -0
  201. metadata +476 -0
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+
3
+ describe Gitlab::Error do
4
+ describe "#handle_message" do
5
+ require "stringio"
6
+
7
+ before do
8
+ request_object = HTTParty::Request.new(Net::HTTP::Get, '/')
9
+ response_object = Net::HTTPOK.new('1.1', 200, 'OK')
10
+ body = StringIO.new("{foo:'bar'}")
11
+ def body.message; self.string; end
12
+
13
+ parsed_response = lambda { body }
14
+ response_object['last-modified'] = Date.new(2010, 1, 15).to_s
15
+ response_object['content-length'] = "1024"
16
+
17
+ response = HTTParty::Response.new(request_object, response_object, parsed_response, body: body)
18
+ @error = Gitlab::Error::ResponseError.new(response)
19
+
20
+ @array = Array.new(['First message.', 'Second message.'])
21
+ @obj_h = Gitlab::ObjectifiedHash.new(user: ['not set'],
22
+ password: ['too short'],
23
+ embed_entity: { foo: ['bar'], sna: ['fu'] })
24
+ end
25
+
26
+ context "when passed an ObjectifiedHash" do
27
+ it "should return a joined string of error messages sorted by key" do
28
+ expect(@error.send(:handle_message, @obj_h)).to eq("'embed_entity' (foo: bar) (sna: fu), 'password' too short, 'user' not set")
29
+ end
30
+ end
31
+
32
+ context "when passed an Array" do
33
+ it "should return a joined string of messages" do
34
+ expect(@error.send(:handle_message, @array)).to eq("First message. Second message.")
35
+ end
36
+ end
37
+
38
+ context "when passed a String" do
39
+ it "should return the String untouched" do
40
+ error = 'this is an error string'
41
+ expect(@error.send(:handle_message, error)).to eq('this is an error string')
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::FileResponse do
4
+ before do
5
+ @file_response = Gitlab::FileResponse.new StringIO.new("", 'rb+')
6
+ end
7
+
8
+ context '.empty?' do
9
+ it "shoudl return false" do
10
+ expect(@file_response.empty?).to be false
11
+ end
12
+ end
13
+
14
+ context '.to_hash' do
15
+ it "should have `filename` key and `data` key" do
16
+ h = @file_response.to_hash
17
+ expect(h.has_key?(:filename)).to be_truthy
18
+ expect(h.has_key?(:data)).to be_truthy
19
+ end
20
+ end
21
+
22
+ context '.parse_headers!' do
23
+ it "should parse headers" do
24
+ @file_response.parse_headers!('Content-Disposition' => 'attachment; filename=artifacts.zip')
25
+ expect(@file_response.filename).to eq "artifacts.zip"
26
+ end
27
+
28
+ it "should handle quoted filenames" do
29
+ @file_response.parse_headers!('Content-Disposition' => 'attachment; filename="artifacts.zip"')
30
+ expect(@file_response.filename).to eq "artifacts.zip"
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::Help do
4
+ describe ".ri_cmd" do
5
+ context "ri command found" do
6
+ it "should return the path to RI" do
7
+ allow(Gitlab::Help).to receive(:`).with(/which ri/).and_return('/usr/bin/ri')
8
+ expect(Gitlab::Help.ri_cmd).to eq('/usr/bin/ri')
9
+ end
10
+ end
11
+
12
+ context "ri command NOT found" do
13
+ it "should raise" do
14
+ allow(Gitlab::Help).to receive(:`).with(/which ri/).and_return('')
15
+ expect { Gitlab::Help.ri_cmd }.to raise_error RuntimeError
16
+ end
17
+ end
18
+ end
19
+
20
+ describe ".change_help_output!" do
21
+ before do
22
+ @cmd = "create_branch"
23
+ @help_output = "Gitlab.#{@cmd}(4, 'new-branch', 'master')"
24
+ @help_output_with_options = "Gitlab.groups({ per_page: 3 })"
25
+ end
26
+ it "should return a String of modified output" do
27
+ Gitlab::Help.change_help_output! @cmd, @help_output
28
+ expect(@help_output).to eq("Gitlab.create_branch 4 'new-branch' 'master'")
29
+ end
30
+ it "should format options hash and return a String of modified output" do
31
+ Gitlab::Help.change_help_output! 'groups', @help_output_with_options
32
+ expect(@help_output_with_options).to eq("Gitlab.groups \"{ per_page: 3 }\"")
33
+ end
34
+ end
35
+
36
+ describe ".namespace" do
37
+ before do
38
+ @cmd = 'create_tag'
39
+ @namespace = Gitlab::Help.namespace @cmd
40
+ end
41
+ it "should return the full namespace for a command" do
42
+ expect(@namespace).to be_a String
43
+ expect(@namespace).to eq("Gitlab::Client::Tags.#{@cmd}")
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::ObjectifiedHash do
4
+ before do
5
+ @hash = { a: 1, b: 2, 'string' => 'string', symbol: :symbol }
6
+ @oh = Gitlab::ObjectifiedHash.new @hash
7
+ end
8
+
9
+ it "should objectify hash" do
10
+ expect(@oh.a).to eq(@hash[:a])
11
+ expect(@oh.b).to eq(@hash[:b])
12
+ end
13
+
14
+ describe "#to_hash" do
15
+ it "should return an original hash" do
16
+ expect(@oh.to_hash).to eq(@hash)
17
+ end
18
+
19
+ it "should have an alias #to_h" do
20
+ expect(@oh.respond_to?(:to_h)).to be_truthy
21
+ end
22
+ end
23
+
24
+ describe "#inspect" do
25
+ it "should return a formatted string" do
26
+ pretty_string = "#<#{@oh.class.name}:#{@oh.object_id} {hash: #{@hash}}"
27
+ expect(@oh.inspect).to eq(pretty_string)
28
+ end
29
+ end
30
+
31
+ describe "#respond_to" do
32
+ it "should return true for methods this object responds to through method_missing as sym" do
33
+ expect(@oh.respond_to?(:a)).to be_truthy
34
+ end
35
+
36
+ it "should return true for methods this object responds to through method_missing as string" do
37
+ expect(@oh.respond_to?('string')).to be_truthy
38
+ end
39
+
40
+ it "should not care if you use a string or symbol to reference a method" do
41
+ expect(@oh.respond_to?(:string)).to be_truthy
42
+ end
43
+
44
+ it "should not care if you use a string or symbol to reference a method" do
45
+ expect(@oh.respond_to?('symbol')).to be_truthy
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::PageLinks do
4
+ before do
5
+ @page_links = Gitlab::PageLinks.new('Link' => "<http://example.com/api/v3/projects?page=1&per_page=5>; rel=\"first\", <http://example.com/api/v3/projects?page=20&per_page=5>; rel=\"last\", <http://example.com/api/v3/projects?page=7&per_page=5>; rel=\"prev\", <http://example.com/api/v3/projects?page=9&per_page=5>; rel=\"next\"")
6
+ end
7
+
8
+ context '.extract_links' do
9
+ it 'should extract link header appropriately' do
10
+ expect(@page_links.last).to eql 'http://example.com/api/v3/projects?page=20&per_page=5'
11
+ expect(@page_links.first).to eql 'http://example.com/api/v3/projects?page=1&per_page=5'
12
+ expect(@page_links.next).to eql 'http://example.com/api/v3/projects?page=9&per_page=5'
13
+ expect(@page_links.prev).to eql 'http://example.com/api/v3/projects?page=7&per_page=5'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::PaginatedResponse do
4
+ before do
5
+ array = [1, 2, 3, 4]
6
+ @paginated_response = Gitlab::PaginatedResponse.new array
7
+ end
8
+
9
+ it "should respond to *_page and has_*_page methods" do
10
+ expect(@paginated_response).to respond_to :first_page
11
+ expect(@paginated_response).to respond_to :last_page
12
+ expect(@paginated_response).to respond_to :next_page
13
+ expect(@paginated_response).to respond_to :prev_page
14
+ expect(@paginated_response).to respond_to :has_first_page?
15
+ expect(@paginated_response).to respond_to :has_last_page?
16
+ expect(@paginated_response).to respond_to :has_next_page?
17
+ expect(@paginated_response).to respond_to :has_prev_page?
18
+ end
19
+
20
+ context '.parse_headers!' do
21
+ it "should parse headers" do
22
+ @paginated_response.parse_headers!('Link' => "<http://example.com/api/v3/projects?page=1&per_page=5>; rel=\"first\", <http://example.com/api/v3/projects?page=20&per_page=5>; rel=\"last\"")
23
+ client = @paginated_response.client = double('client')
24
+ first_page_response = double('first_page_response')
25
+ last_page_response = double('last_page_response')
26
+ allow(client).to receive(:endpoint).and_return("http://example.com/api/v3")
27
+ allow(client).to receive(:get).with("/projects?page=1&per_page=5").and_return(first_page_response)
28
+ allow(client).to receive(:get).with("/projects?page=20&per_page=5").and_return(last_page_response)
29
+ expect(@paginated_response.has_first_page?).to be true
30
+ expect(@paginated_response.has_last_page?).to be true
31
+ expect(@paginated_response.has_next_page?).to be false
32
+ expect(@paginated_response.has_prev_page?).to be false
33
+ expect(@paginated_response.first_page).to be first_page_response
34
+ expect(@paginated_response.last_page).to be last_page_response
35
+ expect(@paginated_response.next_page).to be_nil
36
+ expect(@paginated_response.prev_page).to be_nil
37
+ end
38
+ end
39
+
40
+ context '.each_page' do
41
+ it "should iterate pages" do
42
+ next_page = double('next_page')
43
+ allow(@paginated_response).to receive(:has_next_page?).and_return(true)
44
+ allow(@paginated_response).to receive(:next_page).and_return(next_page)
45
+ allow(next_page).to receive(:has_next_page?).and_return(false)
46
+ expect { |b| @paginated_response.each_page(&b) }.to yield_successive_args(@paginated_response, next_page)
47
+ end
48
+ end
49
+
50
+ context '.auto_paginate' do
51
+ it "should returns an array if block is not given" do
52
+ next_page = double('next_page')
53
+ allow(@paginated_response).to receive(:has_next_page?).and_return(true)
54
+ allow(@paginated_response).to receive(:next_page).and_return(next_page)
55
+ allow(next_page).to receive(:has_next_page?).and_return(false)
56
+ allow(next_page).to receive(:to_ary).and_return([5, 6, 7, 8])
57
+ expect(@paginated_response.auto_paginate).to contain_exactly(1, 2, 3, 4, 5, 6, 7, 8)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::Request do
4
+ it { should respond_to :get }
5
+ it { should respond_to :post }
6
+ it { should respond_to :put }
7
+ it { should respond_to :delete }
8
+ before do
9
+ @request = Gitlab::Request.new
10
+ end
11
+
12
+ describe ".default_options" do
13
+ it "should have default values" do
14
+ default_options = Gitlab::Request.default_options
15
+ expect(default_options).to be_a Hash
16
+ expect(default_options[:parser]).to be_a Proc
17
+ expect(default_options[:format]).to eq(:json)
18
+ expect(default_options[:headers]).to eq('Accept' => 'application/json')
19
+ expect(default_options[:default_params]).to be_nil
20
+ end
21
+ end
22
+
23
+ describe ".parse" do
24
+ it "should return ObjectifiedHash" do
25
+ body = JSON.unparse(a: 1, b: 2)
26
+ expect(Gitlab::Request.parse(body)).to be_an Gitlab::ObjectifiedHash
27
+ expect(Gitlab::Request.parse("true")).to be true
28
+ expect(Gitlab::Request.parse("false")).to be false
29
+
30
+ expect { Gitlab::Request.parse("string") }.to raise_error(Gitlab::Error::Parsing)
31
+ end
32
+ end
33
+
34
+ describe "#set_request_defaults" do
35
+ context "when endpoint is not set" do
36
+ it "should raise Error::MissingCredentials" do
37
+ @request.endpoint = nil
38
+ expect do
39
+ @request.set_request_defaults
40
+ end.to raise_error(Gitlab::Error::MissingCredentials, 'Please set an endpoint to API')
41
+ end
42
+ end
43
+
44
+ context "when endpoint is set" do
45
+ before(:each) do
46
+ @request.endpoint = 'http://rabbit-hole.example.org'
47
+ end
48
+
49
+ it "should set default_params" do
50
+ @request.set_request_defaults('sudoer')
51
+ expect(Gitlab::Request.default_params).to eq(sudo: 'sudoer')
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "#set_authorization_header" do
57
+ it "should raise MissingCredentials when auth_token and private_token are not set" do
58
+ expect do
59
+ @request.send(:set_authorization_header, {})
60
+ end.to raise_error(Gitlab::Error::MissingCredentials)
61
+ end
62
+
63
+ it "should set the correct header when given a private_token" do
64
+ @request.private_token = 'ys9BtunN3rDKbaJCYXaN'
65
+ expect(@request.send(:set_authorization_header, {})).to eq("PRIVATE-TOKEN" => 'ys9BtunN3rDKbaJCYXaN')
66
+ end
67
+
68
+ it "should set the correct header when setting an auth_token via the private_token config option" do
69
+ @request.private_token = '3225e2804d31fea13fc41fc83bffef00cfaedc463118646b154acc6f94747603'
70
+ expect(@request.send(:set_authorization_header, {})).to eq("Authorization" => "Bearer 3225e2804d31fea13fc41fc83bffef00cfaedc463118646b154acc6f94747603")
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+ require 'tempfile'
3
+
4
+ describe Gitlab::Shell::History do
5
+ context 'saving to a file' do
6
+ before do
7
+ @file = Tempfile.new('.gitlab_shell_history')
8
+ @history = Gitlab::Shell::History.new(file_path: @file.path)
9
+ end
10
+
11
+ after { @file.close(true) }
12
+
13
+ it 'saves the lines' do
14
+ @history << 'party on, dudes'
15
+ @history << 'be excellent to each other'
16
+ @history.save
17
+ expect(File.read @file.path).
18
+ to eq("party on, dudes\nbe excellent to each other\n")
19
+ end
20
+
21
+ it 'has the lines' do
22
+ @history << 'party on, dudes'
23
+ @history << 'be excellent to each other'
24
+ expect(@history.lines).
25
+ to eq(["party on, dudes", "be excellent to each other"])
26
+ end
27
+
28
+ it 'limits the lines to GITLAB_HISTFILESIZE' do
29
+ ENV['GITLAB_HISTFILESIZE'] = '2'
30
+ @history << 'bogus'
31
+ @history << 'party on, dudes'
32
+ @history << 'be excellent to each other'
33
+ @history.save
34
+ expect(@history.lines).
35
+ to eq(["party on, dudes", "be excellent to each other"])
36
+ expect(File.read @file.path).
37
+ to eq("party on, dudes\nbe excellent to each other\n")
38
+ end
39
+ end
40
+
41
+ context 'loading a file' do
42
+ before do
43
+ @file = load_fixture('shell_history')
44
+ @history = Gitlab::Shell::History.new(file_path: @file.path)
45
+ end
46
+
47
+ it 'has the lines' do
48
+ @history.load
49
+ expect(@history.lines).
50
+ to eq(["party on, dudes", "be excellent to each other"])
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gitlab::Shell do
4
+ before do
5
+ Gitlab::Shell.setup
6
+ end
7
+
8
+ describe ".execute" do
9
+ context "invalid command" do
10
+ it "should raise" do
11
+ expect { Gitlab::Shell.execute 'foobar', [] }.to raise_error(RuntimeError)
12
+ end
13
+ end
14
+ end
15
+
16
+ describe ".history" do
17
+ before do
18
+ @history = Gitlab::Shell.history
19
+ end
20
+
21
+ it "should return a Gitlab::Shell::History instance" do
22
+ expect(@history).to be_a Gitlab::Shell::History
23
+ end
24
+ it "should respond to :save" do
25
+ expect(@history).to respond_to :save
26
+ end
27
+ it "should respond to :load" do
28
+ expect(@history).to respond_to :load
29
+ end
30
+ it "should respond to :<<" do
31
+ expect(@history).to respond_to :<<
32
+ end
33
+ end
34
+
35
+ describe ".setup" do
36
+ it "should set the Readline completion_proc" do
37
+ completion = Readline.completion_proc
38
+ expect(completion).to be_truthy
39
+ expect(completion).to be_a Proc
40
+ end
41
+ it "should set the Readline completion_append_character" do
42
+ completion_character = Readline.completion_append_character
43
+ expect(completion_character).to eq(' ')
44
+ end
45
+ end
46
+
47
+ describe ".completion" do
48
+ before do
49
+ @comp = Gitlab::Shell.completion
50
+ end
51
+ it "should return a Proc object" do
52
+ expect(@comp).to be_a Proc
53
+ end
54
+ context "called with an argument" do
55
+ it "should return an Array of matching commands" do
56
+ completed_cmds = @comp.call 'group'
57
+ expect(completed_cmds).to be_a Array
58
+ expect(completed_cmds.sort).to eq(%w(group group_members group_projects group_search groups))
59
+ end
60
+ end
61
+ end
62
+
63
+ describe ".parse_input" do
64
+ context "with arguments" do
65
+ it "should set command & arguments" do
66
+ Gitlab::Shell.parse_input('create_branch 1 "api" "master"')
67
+ expect(Gitlab::Shell.command).to eq('create_branch')
68
+ expect(Gitlab::Shell.arguments).to eq(%w(1 api master))
69
+ end
70
+ end
71
+
72
+ context "without arguments" do
73
+ it 'should set command & empty arguments' do
74
+ Gitlab::Shell.parse_input('exit')
75
+ expect(Gitlab::Shell.command).to eq('exit')
76
+ expect(Gitlab::Shell.arguments).to be_empty
77
+ end
78
+ end
79
+ end
80
+ end