jenkins_api_client 1.4.5 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/jenkins_api_client.gemspec +15 -136
- data/lib/jenkins_api_client/version.rb +2 -2
- metadata +6 -180
- data/.gitignore +0 -41
- data/.jenkins.yml +0 -9
- data/.travis.yml +0 -15
- data/CHANGELOG.md +0 -391
- data/CONTRIBUTORS.md +0 -3
- data/Gemfile +0 -20
- data/LICENCE +0 -21
- data/README.md +0 -454
- data/Rakefile +0 -107
- data/Vagrantfile +0 -83
- data/config/login.yml.example +0 -27
- data/jenkins_api_client_class_diagram.png +0 -0
- data/scripts/login_with_irb.rb +0 -54
- data/scripts/login_with_pry.rb +0 -54
- data/spec/func_tests/client_spec.rb +0 -109
- data/spec/func_tests/job_spec.rb +0 -669
- data/spec/func_tests/node_spec.rb.pending +0 -217
- data/spec/func_tests/plugin_spec.rb +0 -148
- data/spec/func_tests/spec_helper.rb +0 -41
- data/spec/func_tests/system_spec.rb +0 -84
- data/spec/func_tests/user_spec.rb +0 -49
- data/spec/func_tests/view_spec.rb +0 -276
- data/spec/unit_tests/build_queue_spec.rb +0 -152
- data/spec/unit_tests/client_spec.rb +0 -471
- data/spec/unit_tests/fake_http_response.rb +0 -9
- data/spec/unit_tests/fixtures/files/available_plugins.json +0 -1
- data/spec/unit_tests/fixtures/files/computer_sample.xml +0 -17
- data/spec/unit_tests/fixtures/files/installed_plugins.json +0 -1
- data/spec/unit_tests/fixtures/files/job_sample.xml +0 -16
- data/spec/unit_tests/fixtures/files/updatable_plugins.json +0 -1
- data/spec/unit_tests/job_spec.rb +0 -783
- data/spec/unit_tests/node_spec.rb +0 -342
- data/spec/unit_tests/plugin_settings/colllection_spec.rb +0 -62
- data/spec/unit_tests/plugin_settings/hipchat_spec.rb +0 -44
- data/spec/unit_tests/plugin_settings/workspace_cleanup_spec.rb +0 -31
- data/spec/unit_tests/plugin_spec.rb +0 -165
- data/spec/unit_tests/spec_helper.rb +0 -19
- data/spec/unit_tests/system_spec.rb +0 -76
- data/spec/unit_tests/user_spec.rb +0 -144
- data/spec/unit_tests/view_spec.rb +0 -149
- data/travis/hudson.model.UpdateCenter.xml +0 -7
- data/travis/jenkins_config.xml +0 -63
- data/travis/jenkins_config_with_crumb.xml +0 -67
- data/travis/setup.sh +0 -23
- data/travis/setup_crumb.sh +0 -11
- data/travis/spec.yml +0 -14
- data/travis/user_config.xml +0 -29
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
-
|
3
|
-
describe JenkinsApi::Client::PluginSettings::WorkspaceCleanup do
|
4
|
-
describe '#configure' do
|
5
|
-
context 'given a Nokogiri::XML::Builder object' do
|
6
|
-
let(:xml_doc) { Nokogiri::XML("<?xml version=\"1.0\"?>\n<buildWrappers>\n</buildWrappers>\n") }
|
7
|
-
|
8
|
-
it 'adds workspace cleanup configuration to the buildWrappers' do
|
9
|
-
workspace_cleanup_settings = JenkinsApi::Client::PluginSettings::WorkspaceCleanup.new
|
10
|
-
workspace_cleanup_settings.configure(xml_doc)
|
11
|
-
|
12
|
-
expect(xml_doc.at_css('buildWrappers deleteDirs').content).to eql('false')
|
13
|
-
expect(xml_doc.at_css('buildWrappers cleanupParameter').content).to eql('')
|
14
|
-
expect(xml_doc.at_css('buildWrappers externalDelete').content).to eql('')
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'uses params if given' do
|
18
|
-
workspace_cleanup_settings = JenkinsApi::Client::PluginSettings::WorkspaceCleanup.new({
|
19
|
-
:delete_dirs => true,
|
20
|
-
:cleanup_parameter => 'foo',
|
21
|
-
:external_delete => 'bar',
|
22
|
-
})
|
23
|
-
workspace_cleanup_settings.configure(xml_doc)
|
24
|
-
|
25
|
-
expect(xml_doc.at_css('buildWrappers deleteDirs').content).to eql('true')
|
26
|
-
expect(xml_doc.at_css('buildWrappers cleanupParameter').content).to eql('foo')
|
27
|
-
expect(xml_doc.at_css('buildWrappers externalDelete').content).to eql('bar')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,165 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', __FILE__)
|
2
|
-
require "json"
|
3
|
-
|
4
|
-
describe JenkinsApi::Client::PluginManager do
|
5
|
-
context "With properly initialized Client" do
|
6
|
-
before do
|
7
|
-
mock_logger = Logger.new "/dev/null"
|
8
|
-
@client = double
|
9
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
10
|
-
@plugin = JenkinsApi::Client::PluginManager.new(@client)
|
11
|
-
@installed_plugins = load_json_from_fixture("installed_plugins.json")
|
12
|
-
@available_plugins = load_json_from_fixture("available_plugins.json")
|
13
|
-
@updatable_plugins = load_json_from_fixture("updatable_plugins.json")
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "InstanceMethods" do
|
17
|
-
describe "#initialize" do
|
18
|
-
it "initializes by receiving an instane of client object" do
|
19
|
-
mock_logger = Logger.new "/dev/null"
|
20
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
21
|
-
expect(
|
22
|
-
lambda { JenkinsApi::Client::PluginManager.new(@client) }
|
23
|
-
).not_to raise_error
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#list_installed" do
|
28
|
-
it "lists all installed plugins in jenkins" do
|
29
|
-
@client.should_receive(:api_get_request).
|
30
|
-
with("/pluginManager", "tree=plugins[shortName,version]").
|
31
|
-
and_return(@installed_plugins)
|
32
|
-
plugins = @plugin.list_installed
|
33
|
-
plugins.class.should == Hash
|
34
|
-
plugins.size.should == @installed_plugins["plugins"].size
|
35
|
-
end
|
36
|
-
supported_filters = [
|
37
|
-
:active, :bundled, :deleted, :downgradable, :enabled,
|
38
|
-
:hasUpdate, :pinned
|
39
|
-
]
|
40
|
-
supported_filters.each do |filter|
|
41
|
-
it "lists all installed plugins matching filter '#{filter}'" do
|
42
|
-
@client.should_receive(:api_get_request).
|
43
|
-
with("/pluginManager",
|
44
|
-
"tree=plugins[shortName,version,#{filter}]"
|
45
|
-
).and_return(@installed_plugins)
|
46
|
-
@plugin.list_installed(filter => true).class.should == Hash
|
47
|
-
end
|
48
|
-
end
|
49
|
-
it "lists all installed plugins matching multiple filters" do
|
50
|
-
@client.should_receive(:api_get_request).
|
51
|
-
with("/pluginManager",
|
52
|
-
"tree=plugins[shortName,version,bundled,deleted]").
|
53
|
-
and_return(@installed_plugins)
|
54
|
-
@plugin.list_installed(:bundled => true, :deleted => true).class.
|
55
|
-
should == Hash
|
56
|
-
end
|
57
|
-
it "raises an error if unsupported filter is specified" do
|
58
|
-
expect(
|
59
|
-
lambda { @plugin.list_installed(:unsupported => true) }
|
60
|
-
).to raise_error(ArgumentError)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "#list_available" do
|
65
|
-
it "lists all available plugins in jenkins update center" do
|
66
|
-
@client.should_receive(:api_get_request).
|
67
|
-
with("/updateCenter/coreSource", "tree=availables[name,version]").
|
68
|
-
and_return(@available_plugins)
|
69
|
-
@plugin.list_available.class.should == Hash
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "#list_updates" do
|
74
|
-
it "lists all available plugin updates in jenkins update center" do
|
75
|
-
@client.should_receive(:api_get_request).
|
76
|
-
with("/updateCenter/coreSource", "tree=updates[name,version]").
|
77
|
-
and_return(@updatable_plugins)
|
78
|
-
@plugin.list_updates.class.should == Hash
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "#install" do
|
83
|
-
it "installs a single plugin given as a string" do
|
84
|
-
@client.should_receive(:api_post_request).
|
85
|
-
with("/pluginManager/install",
|
86
|
-
{"plugin.awesome-plugin.default" => "on"}
|
87
|
-
)
|
88
|
-
@plugin.install("awesome-plugin")
|
89
|
-
end
|
90
|
-
it "installs multiple plugins given as an array" do
|
91
|
-
@client.should_receive(:api_post_request).
|
92
|
-
with("/pluginManager/install",
|
93
|
-
{
|
94
|
-
"plugin.awesome-plugin-1.default" => "on",
|
95
|
-
"plugin.awesome-plugin-2.default" => "on",
|
96
|
-
"plugin.awesome-plugin-3.default" => "on"
|
97
|
-
}
|
98
|
-
)
|
99
|
-
@plugin.install([
|
100
|
-
"awesome-plugin-1",
|
101
|
-
"awesome-plugin-2",
|
102
|
-
"awesome-plugin-3"
|
103
|
-
])
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "#uninstall" do
|
108
|
-
it "uninstalls a single plugin given as a string" do
|
109
|
-
@client.should_receive(:api_post_request).
|
110
|
-
with("/pluginManager/plugin/awesome-plugin/doUninstall")
|
111
|
-
@plugin.uninstall("awesome-plugin")
|
112
|
-
end
|
113
|
-
it "uninstalls multiple plugins given as array" do
|
114
|
-
plugins = ["awesome-plugin-1", "awesome-plugin-2", "awesome-plugin-3"]
|
115
|
-
plugins.each do |plugin|
|
116
|
-
@client.should_receive(:api_post_request).
|
117
|
-
with("/pluginManager/plugin/#{plugin}/doUninstall")
|
118
|
-
end
|
119
|
-
@plugin.uninstall(plugins)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe "#enable" do
|
124
|
-
it "enables a single plugin given as a string" do
|
125
|
-
@client.should_receive(:api_post_request).
|
126
|
-
with("/pluginManager/plugin/awesome-plugin/makeEnabled")
|
127
|
-
@plugin.enable("awesome-plugin")
|
128
|
-
end
|
129
|
-
it "enables multiple plugins given as array" do
|
130
|
-
plugins = ["awesome-plugin-1", "awesome-plugin-2", "awesome-plugin-3"]
|
131
|
-
plugins.each do |plugin|
|
132
|
-
@client.should_receive(:api_post_request).
|
133
|
-
with("/pluginManager/plugin/#{plugin}/makeEnabled")
|
134
|
-
end
|
135
|
-
@plugin.enable(plugins)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe "#disable" do
|
140
|
-
it "disables a single plugin given as a string" do
|
141
|
-
@client.should_receive(:api_post_request).
|
142
|
-
with("/pluginManager/plugin/awesome-plugin/makeDisabled")
|
143
|
-
@plugin.disable("awesome-plugin")
|
144
|
-
end
|
145
|
-
it "disabless multiple plugins given as array" do
|
146
|
-
plugins = ["awesome-plugin-1", "awesome-plugin-2", "awesome-plugin-3"]
|
147
|
-
plugins.each do |plugin|
|
148
|
-
@client.should_receive(:api_post_request).
|
149
|
-
with("/pluginManager/plugin/#{plugin}/makeDisabled")
|
150
|
-
end
|
151
|
-
@plugin.disable(plugins)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
describe "#restart_required?" do
|
156
|
-
it "checks if restart is required after plugin install/uninstall" do
|
157
|
-
@client.should_receive(:api_get_request).
|
158
|
-
with("/updateCenter", "tree=restartRequiredForCompletion").
|
159
|
-
and_return({"restartRequiredForCompletion" => true})
|
160
|
-
@plugin.restart_required?.should == true
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../lib/jenkins_api_client', __FILE__)
|
2
|
-
require 'logger'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
RSpec.configure do |config|
|
6
|
-
config.before(:each) do
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def load_json_from_fixture(file_name)
|
11
|
-
JSON.load(
|
12
|
-
File.read(
|
13
|
-
File.expand_path(
|
14
|
-
"../fixtures/files/#{file_name}",
|
15
|
-
__FILE__
|
16
|
-
)
|
17
|
-
)
|
18
|
-
)
|
19
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', __FILE__)
|
2
|
-
require File.expand_path('../fake_http_response', __FILE__)
|
3
|
-
|
4
|
-
describe JenkinsApi::Client::System do
|
5
|
-
context "With properly initialized Client" do
|
6
|
-
before do
|
7
|
-
mock_logger = Logger.new "/dev/null"
|
8
|
-
mock_timeout = 300
|
9
|
-
@client = double
|
10
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
11
|
-
@client.should_receive(:timeout).and_return(mock_timeout)
|
12
|
-
@system = JenkinsApi::Client::System.new(@client)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "InstanceMethods" do
|
16
|
-
describe "#initialize" do
|
17
|
-
it "initializes by receiving an instance of client object" do
|
18
|
-
mock_logger = Logger.new "/dev/null"
|
19
|
-
mock_timeout = 300
|
20
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
21
|
-
@client.should_receive(:timeout).and_return(mock_timeout)
|
22
|
-
expect(
|
23
|
-
lambda{ JenkinsApi::Client::System.new(@client) }
|
24
|
-
).not_to raise_error
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "#quiet_down" do
|
29
|
-
it "sends a request to put the server in quiet down mode" do
|
30
|
-
@client.should_receive(:api_post_request).with("/quietDown")
|
31
|
-
@system.quiet_down
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#cancel_quiet_down" do
|
36
|
-
it "sends a request to take the server away from quiet down mode" do
|
37
|
-
@client.should_receive(:api_post_request).with("/cancelQuietDown")
|
38
|
-
@system.cancel_quiet_down
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#restart" do
|
43
|
-
it "sends a safe restart request to the server" do
|
44
|
-
@client.should_receive(:api_post_request).with("/safeRestart")
|
45
|
-
@system.restart(false)
|
46
|
-
end
|
47
|
-
it "sends a force restart request to the server" do
|
48
|
-
@client.should_receive(:api_post_request).with("/restart")
|
49
|
-
@system.restart(true)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "#reload" do
|
54
|
-
it "sends a reload request to the server" do
|
55
|
-
@client.should_receive(:api_post_request).with("/reload")
|
56
|
-
@system.reload
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "#list_users" do
|
61
|
-
it "sends a request to list the users" do
|
62
|
-
@client.should_receive(:api_get_request).with("/asynchPeople")
|
63
|
-
@system.list_users
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "#wait_for_ready" do
|
68
|
-
it "exits if the response body doesn't have the wait message" do
|
69
|
-
@client.should_receive(:get_root).and_return(FakeResponse.new)
|
70
|
-
@system.wait_for_ready
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,144 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require File.expand_path('../spec_helper', __FILE__)
|
3
|
-
|
4
|
-
describe JenkinsApi::Client::User do
|
5
|
-
context "With properly initialized Client" do
|
6
|
-
ADMIN_CONFIGURE_TEXT = <<__ADMIN_CONFIGURE
|
7
|
-
<!DOCTYPE html><html><head resURL="/static/70901acb" data-rooturl="" data-resurl="/static/70901acb">
|
8
|
-
<title>User ‘admin’ Configuration [Jenkins]</title>
|
9
|
-
<link rel="stylesheet" href="/static/70901acb/css/layout-common.css" type="text/css" />
|
10
|
-
<link rel="stylesheet" href="/static/70901acb/css/style.css" type="text/css" />
|
11
|
-
<input name="_.fullName" type="text" class="setting-input " value="admin" />/td></tr><tr><td class="setting-leftspace"> </td><td class="setting-name">Description</td><td class="setting-main"><textarea name="_.description" rows="5" class="setting-input "></textarea><div class="textarea-handle"></div></td><td class="setting-help"><a helpURL="/help/user/description.html" href="#" class="help-button"><img src="/static/70901acb/images/16x16/help.png" alt="Help for feature: Description" style="width: 16px; height: 16px; " class="icon-help icon-sm" /></a></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr class="help-area"><td></td><td colspan="2"><div class="help">Loading...</div></td><td></td></tr><link rel='stylesheet' href='/adjuncts/70901acb/lib/form/section_.css' type='text/css' /><script src='/adjuncts/70901acb/lib/form/section_.js' type='text/javascript'></script><tr name="userProperty0" style="display:none" class="row-set-start row-group-start"></tr><tr class="row-set-end row-group-end"></tr><tr><td colspan="4"><div class="section-header">API Token</div></td></tr><tr name="userProperty1" style="display:none" class="row-set-start row-group-start"></tr><tr><td></td><td></td><td><script src='/adjuncts/70901acb/lib/form/advanced/advanced.js' type='text/javascript'></script><div style="text-align:left" class="advancedLink"><span style="display: none" id="id245"><img src="/static/70901acb/images/24x24/notepad.png" tooltip="One or more fields in this block have been edited." style="width: 24px; height: 24px; vertical-align: baseline" class="icon-notepad icon-md" /></span> <input type="button" value="Show API Token..." class="advanced-button advancedButton" /></div><table class="advancedBody"><tbody><tr><td class="setting-leftspace"> </td><td class="setting-name">User ID</td><td class="setting-main"><input readonly="readonly" name="_." type="text" class="setting-input " value="admin" /></td><td class="setting-no-help"></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr><td class="setting-leftspace"> </td><td class="setting-name">API Token</td><td class="setting-main"><input readonly="readonly" name="_.apiToken" id="apiToken" type="text" class="setting-input " value="12345678" /></td><td class="setting-help"><a helpURL="/descriptor/jenkins.security.ApiTokenProperty/help/apiToken" href="#" class="help-button"><img src="/static/70901acb/images/16x16/help.png" alt="Help for feature: API Token" style="width: 16px; height: 16px; " class="icon-help icon-sm" /></a></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr class="help-area"><td></td><td colspan="2"><div class="help">Loading...</div></td><td></td></tr><tr><td class="setting-leftspace"> </td><td class="setting-name"></td><td class="setting-main"><div style="float:right"><input onclick="validateButton('/user/admin/descriptorByName/jenkins.security.ApiTokenProperty/changeToken','',this)" type="button" value="Change API Token" class="yui-button validate-button" /></div><div style="display:none;"><img src="/static/70901acb/images/spinner.gif" />
|
12
|
-
<input name="email.address" type="text" class="setting-input " value="" /></td><td class="setting-no-help"></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr><td colspan="2"></td><td class="setting-description">Your e-mail address, like <tt>joe.chin@sun.com</tt></td><td></td></tr><tr class="row-set-end row-group-end"></tr><tr><td colspan="4"><div class="section-header">My Views</div></td></tr><tr name="userProperty4" style="display:none" class="row-set-start row-group-start"></tr><tr><td class="setting-leftspace"> </td><td class="setting-name">Default View</td><td class="setting-main">
|
13
|
-
<input checkUrl="'/user/admin/my-views/viewExistsCheck?value='+encodeURIComponent(this.value)+'&exists=true'" name="_.primaryViewName" type="text" class="setting-input validated " value="" /></td><td class="setting-no-help"></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr><td colspan="2"></td><td class="setting-description">The view selected by default when navigating to the users private views</td><td></td></tr><tr class="row-set-end row-group-end"></tr><tr><td colspan="4"><div class="section-header">SSH Public Keys</div></td></tr><tr name="userProperty7" style="display:none" class="row-set-start row-group-start"></tr><tr><td class="setting-leftspace"> </td><td class="setting-name">SSH Public Keys</td><td class="setting-main"><textarea name="_.authorizedKeys" rows="5" class="setting-input "></textarea><div class="textarea-handle"></div></td><td class="setting-help"><a helpURL="/descriptor/org.jenkinsci.main.modules.cli.auth.ssh.UserPropertyImpl/help/authorizedKeys" href="#" class="help-button"><img src="/static/70901acb/images/16x16/help.png" alt="Help for feature: SSH Public Keys" style="width: 16px; height: 16px; " class="icon-help icon-sm" /></a></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr class="help-area"><td></td><td colspan="2"><div class="help">Loading...</div></td><td></td></tr><tr class="row-set-end row-group-end"></tr><tr><td colspan="4"><div class="section-header">Setting for search</div></td></tr><tr name="userProperty8" style="display:none" class="row-set-start row-group-start"></tr><tr><td class="setting-leftspace"> </td><td class="setting-name">Case-sensitivity</td><td class="setting-main"><input name="insensitiveSearch" type="checkbox" class=" " /><label class="attach-previous">Insensitive search tool</label></td><td class="setting-no-help"></td></tr><tr class="validation-error-area"><td colspan="2"></td><td></td><td></td></tr><tr class="row-set-end row-group-end"></tr><tr><td colspan="4"><div id="bottom-sticker"><div class="bottom-sticker-inner"><input name="Submit" type="submit" value="Save" class="submit-button primary" /><script src='/adjuncts/70901acb/lib/form/apply/apply.js' type='text/javascript'></script><input type="hidden" name="core:apply" value="" /><input name="Apply" type="button" value="Apply" class="apply-button applyButton" /></div></div></td></tr></table></form><script src='/adjuncts/70901acb/lib/form/confirm.js' type='text/javascript'></script></div></div><footer><div class="container-fluid"><div class="row"><div class="col-md-6" id="footer"></div><div class="col-md-18"><span class="page_generated">Page generated: Sep 10, 2016 12:54:41 AM UTC</span><span class="rest_api"><a href="api/">REST API</a></span><span class="jenkins_ver"><a href="http://jenkins-ci.org/">Jenkins ver. 2.7.4</a></span></div></div></div></footer></body></html>
|
14
|
-
__ADMIN_CONFIGURE
|
15
|
-
|
16
|
-
FRED_TXT = <<__FRED
|
17
|
-
{
|
18
|
-
"absoluteUrl" : "https://myjenkins.example.com/jenkins/user/fred",
|
19
|
-
"description" : "",
|
20
|
-
"fullName" : "Fred Flintstone",
|
21
|
-
"id" : "fred",
|
22
|
-
"property" : [
|
23
|
-
{
|
24
|
-
},
|
25
|
-
{
|
26
|
-
},
|
27
|
-
{
|
28
|
-
"address" : "fred@slaterockandgravel.com"
|
29
|
-
},
|
30
|
-
{
|
31
|
-
},
|
32
|
-
{
|
33
|
-
},
|
34
|
-
{
|
35
|
-
"insensitiveSearch" : false
|
36
|
-
}
|
37
|
-
]
|
38
|
-
}
|
39
|
-
__FRED
|
40
|
-
|
41
|
-
WILMA_TXT = <<__WILMA
|
42
|
-
{
|
43
|
-
"absoluteUrl" : "https://myjenkins.example.com/jenkins/user/wilma",
|
44
|
-
"description" : "",
|
45
|
-
"fullName" : "wilma",
|
46
|
-
"id" : "wilma",
|
47
|
-
"property" : [
|
48
|
-
{
|
49
|
-
},
|
50
|
-
{
|
51
|
-
},
|
52
|
-
{
|
53
|
-
},
|
54
|
-
{
|
55
|
-
},
|
56
|
-
{
|
57
|
-
},
|
58
|
-
{
|
59
|
-
}
|
60
|
-
]
|
61
|
-
}
|
62
|
-
__WILMA
|
63
|
-
|
64
|
-
FRED_JSON = JSON.parse(FRED_TXT)
|
65
|
-
WILMA_JSON = JSON.parse(WILMA_TXT)
|
66
|
-
PEOPLE_JSON = JSON.parse(<<__PEEPS
|
67
|
-
{
|
68
|
-
"users" : [
|
69
|
-
{
|
70
|
-
"lastChange" : 1375293464494,
|
71
|
-
"project" : {
|
72
|
-
"name" : "a project",
|
73
|
-
"url" : "a url to a project"
|
74
|
-
},
|
75
|
-
"user" : {
|
76
|
-
"absoluteUrl" : "a url to a user",
|
77
|
-
"fullName" : "Fred Flintstone"
|
78
|
-
}
|
79
|
-
}
|
80
|
-
]
|
81
|
-
}
|
82
|
-
__PEEPS
|
83
|
-
)
|
84
|
-
|
85
|
-
USERLIST_JSON = JSON.parse(<<__USERLIST
|
86
|
-
{
|
87
|
-
"fred": #{FRED_TXT}
|
88
|
-
}
|
89
|
-
__USERLIST
|
90
|
-
)
|
91
|
-
|
92
|
-
before do
|
93
|
-
mock_logger = Logger.new "/dev/null"
|
94
|
-
mock_timeout = 300
|
95
|
-
@client = double
|
96
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
97
|
-
@client.should_receive(:timeout).and_return(mock_timeout)
|
98
|
-
@client.stub(:api_get_request).with('/asynchPeople').and_return(PEOPLE_JSON)
|
99
|
-
@client.stub(:api_get_request).with('/user/Fred%20Flintstone').and_return(FRED_JSON)
|
100
|
-
@client.stub(:api_get_request).with('/user/fred').and_return(FRED_JSON)
|
101
|
-
@client.stub(:api_get_request).with('/user/wilma').and_return(WILMA_JSON)
|
102
|
-
@client.stub(:api_get_request).with('/user/admin/configure', nil, '').and_return(ADMIN_CONFIGURE_TEXT)
|
103
|
-
@user = JenkinsApi::Client::User.new(@client)
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "InstanceMethods" do
|
107
|
-
describe "#initialize" do
|
108
|
-
it "initializes by receiving an instance of client object" do
|
109
|
-
mock_logger = Logger.new "/dev/null"
|
110
|
-
mock_timeout = 300
|
111
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
112
|
-
@client.should_receive(:timeout).and_return(mock_timeout)
|
113
|
-
expect(
|
114
|
-
lambda{ JenkinsApi::Client::User.new(@client) }
|
115
|
-
).not_to raise_error
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe "#list" do
|
120
|
-
it "sends a request to list the users" do
|
121
|
-
@user.list.should eq(USERLIST_JSON)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe "#get" do
|
126
|
-
it "returns dummy user if user cannot be found" do
|
127
|
-
# This is artifact of Jenkins - It'll create a user to match the name you give it - even on a fetch
|
128
|
-
@user.get("wilma").should eq(WILMA_JSON)
|
129
|
-
end
|
130
|
-
|
131
|
-
it "returns valid user if user can be found" do
|
132
|
-
@user.get("fred").should eq(FRED_JSON)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
describe "#get_api_token" do
|
137
|
-
it "returns the user's API token" do
|
138
|
-
@user.get_api_token('admin').should eq('12345678')
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
@@ -1,149 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', __FILE__)
|
2
|
-
|
3
|
-
describe JenkinsApi::Client::View do
|
4
|
-
context "With properly initialized Client" do
|
5
|
-
before do
|
6
|
-
mock_logger = Logger.new "/dev/null"
|
7
|
-
@client = double
|
8
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
9
|
-
@view = JenkinsApi::Client::View.new(@client)
|
10
|
-
@sample_views_json = {
|
11
|
-
"views" => [
|
12
|
-
{"name" => "test_view"},
|
13
|
-
{"name" => "test_view2"}
|
14
|
-
]
|
15
|
-
}
|
16
|
-
@sample_view_json = {
|
17
|
-
"jobs" => [
|
18
|
-
{"name" => "test_job"},
|
19
|
-
{"name" => "test_job2"}
|
20
|
-
]
|
21
|
-
}
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "InstanceMethods" do
|
25
|
-
describe "#initialize" do
|
26
|
-
it "initializes by receiving an instance of client object" do
|
27
|
-
mock_logger = Logger.new "/dev/null"
|
28
|
-
@client.should_receive(:logger).and_return(mock_logger)
|
29
|
-
expect(
|
30
|
-
lambda { JenkinsApi::Client::View.new(@client) }
|
31
|
-
).not_to raise_error
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#create" do
|
36
|
-
it "creates a view by accepting a name" do
|
37
|
-
@client.should_receive(:api_post_request)
|
38
|
-
@view.create("test_view")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#delete" do
|
43
|
-
it "deletes the view with the given name" do
|
44
|
-
@client.should_receive(:api_post_request).with("/view/test_view/doDelete")
|
45
|
-
@view.delete("test_view")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#list" do
|
50
|
-
it "lists all views" do
|
51
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
52
|
-
response = @view.list
|
53
|
-
response.class.should == Array
|
54
|
-
response.size.should == 2
|
55
|
-
end
|
56
|
-
|
57
|
-
it "lists views matching specific filter" do
|
58
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
59
|
-
response = @view.list("test_view2")
|
60
|
-
response.class.should == Array
|
61
|
-
response.size.should == 1
|
62
|
-
end
|
63
|
-
|
64
|
-
it "lists views matching specific filter and matches case" do
|
65
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
66
|
-
response = @view.list("TEST_VIEW", false)
|
67
|
-
response.class.should == Array
|
68
|
-
response.size.should == 0
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "#exists?" do
|
73
|
-
it "returns true a view that exists" do
|
74
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
75
|
-
@view.exists?("test_view2").should == true
|
76
|
-
end
|
77
|
-
|
78
|
-
it "returns false for non-existent view" do
|
79
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
80
|
-
@view.exists?("i_am_not_there").should == false
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "#list_jobs" do
|
85
|
-
it "lists all jobs in the given view" do
|
86
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
87
|
-
@client.should_receive(:api_get_request).with("/view/test_view").and_return(@sample_view_json)
|
88
|
-
response = @view.list_jobs("test_view")
|
89
|
-
response.class.should == Array
|
90
|
-
response.size.should == 2
|
91
|
-
end
|
92
|
-
|
93
|
-
it "raises an error if called on a non-existent view" do
|
94
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
95
|
-
expect(
|
96
|
-
lambda { @view.list_jobs("i_am_not_there") }
|
97
|
-
).to raise_error
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "#list_jobs_with_details" do
|
102
|
-
it "lists all jobs with details in the given view" do
|
103
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
104
|
-
@client.should_receive(:api_get_request).with("/view/test_view").and_return(
|
105
|
-
@sample_view_json)
|
106
|
-
response = @view.list_jobs_with_details("test_view")
|
107
|
-
response.class.should == Array
|
108
|
-
response.size.should == @sample_view_json["jobs"].size
|
109
|
-
end
|
110
|
-
|
111
|
-
it "raises an error if called on a non-existent view" do
|
112
|
-
@client.should_receive(:api_get_request).with("", "tree=views[name]").and_return(@sample_views_json)
|
113
|
-
expect(
|
114
|
-
lambda { @view.list_jobs_with_details("i_am_not_there") }
|
115
|
-
).to raise_error
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe "#add_job" do
|
120
|
-
it "adds the specified job to the specified view" do
|
121
|
-
@client.should_receive(:api_post_request)
|
122
|
-
@view.add_job("test_view", "test_job3")
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
describe "#remove_job" do
|
127
|
-
it "removes the specified job to the specified view" do
|
128
|
-
@client.should_receive(:api_post_request)
|
129
|
-
@view.remove_job("test_view", "test_job")
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
describe "#get_config" do
|
134
|
-
it "obtains the config from the server for the specified view" do
|
135
|
-
@client.should_receive(:get_config).with("/view/test_view")
|
136
|
-
@view.get_config("test_view")
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
describe "#post_config" do
|
141
|
-
it "posts the config to the server for the specified view" do
|
142
|
-
@client.should_receive(:post_config).with("/view/test_view/config.xml", "<view>test_view</view>")
|
143
|
-
@view.post_config("test_view", "<view>test_view</view>")
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|