artifactory 2.5.2 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -2
- data/CHANGELOG.md +6 -0
- data/Gemfile +9 -13
- data/README.md +10 -1
- data/Rakefile +16 -7
- data/appveyor.yml +4 -2
- data/artifactory.gemspec +14 -14
- data/lib/artifactory.rb +26 -26
- data/lib/artifactory/client.rb +25 -23
- data/lib/artifactory/configurable.rb +1 -0
- data/lib/artifactory/defaults.rb +24 -15
- data/lib/artifactory/errors.rb +2 -2
- data/lib/artifactory/resources/artifact.rb +34 -33
- data/lib/artifactory/resources/backup.rb +5 -5
- data/lib/artifactory/resources/base.rb +7 -7
- data/lib/artifactory/resources/build.rb +15 -15
- data/lib/artifactory/resources/build_component.rb +4 -4
- data/lib/artifactory/resources/group.rb +4 -4
- data/lib/artifactory/resources/layout.rb +3 -3
- data/lib/artifactory/resources/ldap_setting.rb +7 -6
- data/lib/artifactory/resources/mail_server.rb +3 -3
- data/lib/artifactory/resources/permission_target.rb +20 -20
- data/lib/artifactory/resources/plugin.rb +1 -1
- data/lib/artifactory/resources/repository.rb +20 -20
- data/lib/artifactory/resources/system.rb +6 -6
- data/lib/artifactory/resources/url_base.rb +4 -3
- data/lib/artifactory/resources/user.rb +4 -4
- data/lib/artifactory/util.rb +10 -10
- data/lib/artifactory/version.rb +1 -1
- data/spec/integration/resources/artifact_spec.rb +31 -31
- data/spec/integration/resources/backup.rb +7 -7
- data/spec/integration/resources/build_component_spec.rb +18 -18
- data/spec/integration/resources/build_spec.rb +15 -15
- data/spec/integration/resources/group_spec.rb +16 -16
- data/spec/integration/resources/layout_spec.rb +7 -7
- data/spec/integration/resources/ldap_setting_spec.rb +7 -7
- data/spec/integration/resources/mail_server_spec.rb +7 -7
- data/spec/integration/resources/permission_target_spec.rb +35 -35
- data/spec/integration/resources/repository_spec.rb +14 -14
- data/spec/integration/resources/system_spec.rb +20 -21
- data/spec/integration/resources/url_base_spec.rb +7 -7
- data/spec/integration/resources/user_spec.rb +16 -16
- data/spec/spec_helper.rb +11 -11
- data/spec/support/api_server.rb +13 -13
- data/spec/support/api_server/artifact_endpoints.rb +94 -94
- data/spec/support/api_server/build_component_endpoints.rb +18 -18
- data/spec/support/api_server/build_endpoints.rb +76 -76
- data/spec/support/api_server/group_endpoints.rb +24 -24
- data/spec/support/api_server/permission_target_endpoints.rb +24 -24
- data/spec/support/api_server/repository_endpoints.rb +82 -82
- data/spec/support/api_server/status_endpoints.rb +5 -5
- data/spec/support/api_server/system_endpoints.rb +17 -18
- data/spec/support/api_server/user_endpoints.rb +30 -30
- data/spec/unit/artifactory_spec.rb +17 -17
- data/spec/unit/client_spec.rb +43 -43
- data/spec/unit/resources/artifact_spec.rb +256 -256
- data/spec/unit/resources/backup_spec.rb +8 -8
- data/spec/unit/resources/base_spec.rb +51 -51
- data/spec/unit/resources/build_component_spec.rb +45 -45
- data/spec/unit/resources/build_spec.rb +98 -98
- data/spec/unit/resources/defaults_spec.rb +4 -4
- data/spec/unit/resources/group_spec.rb +36 -36
- data/spec/unit/resources/layout_spec.rb +8 -8
- data/spec/unit/resources/ldap_setting_spec.rb +8 -8
- data/spec/unit/resources/mail_server_spec.rb +8 -8
- data/spec/unit/resources/permission_target_spec.rb +79 -79
- data/spec/unit/resources/plugin_spec.rb +7 -7
- data/spec/unit/resources/repository_spec.rb +98 -98
- data/spec/unit/resources/system_spec.rb +30 -30
- data/spec/unit/resources/url_base_spec.rb +8 -8
- data/spec/unit/resources/user_spec.rb +40 -40
- metadata +3 -3
@@ -1,112 +1,112 @@
|
|
1
1
|
module Artifactory
|
2
2
|
module APIServer::RepositoryEndpoints
|
3
3
|
def self.registered(app)
|
4
|
-
app.get(
|
5
|
-
content_type
|
4
|
+
app.get("/api/repositories") do
|
5
|
+
content_type "application/vnd.org.jfrog.artifactory.repositories.RepositoryDetailsList+json"
|
6
6
|
JSON.fast_generate([
|
7
7
|
{
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
"key" => "libs-release-local",
|
9
|
+
"type" => "LOCAL",
|
10
|
+
"description" => "Local repository for in-house libraries",
|
11
|
+
"url" => server_url.join("libs-release-local"),
|
12
12
|
},
|
13
13
|
{
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
"key" => "libs-snapshots-local",
|
15
|
+
"type" => "LOCAL",
|
16
|
+
"description" => "Local repository for in-house snapshots",
|
17
|
+
"url" => server_url.join("libs-snapshots-local"),
|
18
18
|
},
|
19
19
|
])
|
20
20
|
end
|
21
21
|
|
22
|
-
app.get(
|
23
|
-
content_type
|
22
|
+
app.get("/api/repositories/libs-release-local") do
|
23
|
+
content_type "application/vnd.org.jfrog.artifactory.repositories.LocalRepositoryConfiguration+json"
|
24
24
|
JSON.fast_generate({
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
25
|
+
"key" => "libs-release-local",
|
26
|
+
"description" => "Local repository for in-house libraries",
|
27
|
+
"notes" => "",
|
28
|
+
"includesPattern" => "**/*",
|
29
|
+
"excludesPattern" => "",
|
30
|
+
"repoLayoutRef" => "simple-default",
|
31
|
+
"enableNuGetSupport" => false,
|
32
|
+
"enableGemsSupport" => false,
|
33
|
+
"checksumPolicyType" => "client-checksums",
|
34
|
+
"handleReleases" => true,
|
35
|
+
"handleSnapshots" => false,
|
36
|
+
"maxUniqueSnapshots" => 0,
|
37
|
+
"snapshotVersionBehavior" => "unique",
|
38
|
+
"suppressPomConsistencyChecks" => false,
|
39
|
+
"blackedOut" => false,
|
40
|
+
"propertySets" => ["artifactory"],
|
41
|
+
"archiveBrowsingEnabled" => false,
|
42
|
+
"calculateYumMetadata" => false,
|
43
|
+
"yumRootDepth" => 0,
|
44
|
+
"rclass" => "local",
|
45
|
+
"packageType" => "generic",
|
46
46
|
})
|
47
47
|
end
|
48
48
|
|
49
|
-
app.get(
|
50
|
-
content_type
|
49
|
+
app.get("/api/repositories/libs-snapshots-local") do
|
50
|
+
content_type "application/vnd.org.jfrog.artifactory.repositories.LocalRepositoryConfiguration+json"
|
51
51
|
JSON.fast_generate({
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
52
|
+
"key" => "libs-snapshots-local",
|
53
|
+
"description" => "Local repository for in-house snapshots",
|
54
|
+
"notes" => "",
|
55
|
+
"includesPattern" => "**/*",
|
56
|
+
"excludesPattern" => "",
|
57
|
+
"repoLayoutRef" => "simple-default",
|
58
|
+
"enableNuGetSupport" => false,
|
59
|
+
"enableGemsSupport" => false,
|
60
|
+
"checksumPolicyType" => "client-checksums",
|
61
|
+
"handleReleases" => false,
|
62
|
+
"handleSnapshots" => true,
|
63
|
+
"maxUniqueSnapshots" => 10,
|
64
|
+
"snapshotVersionBehavior" => "unique",
|
65
|
+
"suppressPomConsistencyChecks" => false,
|
66
|
+
"blackedOut" => false,
|
67
|
+
"propertySets" => ["artifactory"],
|
68
|
+
"archiveBrowsingEnabled" => false,
|
69
|
+
"calculateYumMetadata" => false,
|
70
|
+
"yumRootDepth" => 0,
|
71
|
+
"rclass" => "local",
|
72
|
+
"packageType" => "generic",
|
73
73
|
})
|
74
74
|
end
|
75
75
|
|
76
|
-
app.get(
|
77
|
-
content_type
|
76
|
+
app.get("/api/repositories/libs-debian-local") do
|
77
|
+
content_type "application/vnd.org.jfrog.artifactory.repositories.LocalRepositoryConfiguration+json"
|
78
78
|
JSON.fast_generate({
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
79
|
+
"key" => "libs-debian-local",
|
80
|
+
"description" => "Local repository for in-house snapshots",
|
81
|
+
"notes" => "",
|
82
|
+
"includesPattern" => "**/*",
|
83
|
+
"excludesPattern" => "",
|
84
|
+
"repoLayoutRef" => "simple-default",
|
85
|
+
"enableNuGetSupport" => false,
|
86
|
+
"enableGemsSupport" => false,
|
87
|
+
"checksumPolicyType" => "client-checksums",
|
88
|
+
"handleReleases" => false,
|
89
|
+
"handleSnapshots" => true,
|
90
|
+
"maxUniqueSnapshots" => 10,
|
91
|
+
"snapshotVersionBehavior" => "unique",
|
92
|
+
"suppressPomConsistencyChecks" => false,
|
93
|
+
"blackedOut" => false,
|
94
|
+
"propertySets" => ["artifactory"],
|
95
|
+
"archiveBrowsingEnabled" => false,
|
96
|
+
"calculateYumMetadata" => false,
|
97
|
+
"yumRootDepth" => 0,
|
98
|
+
"rclass" => "local",
|
99
|
+
"packageType" => "debian",
|
100
100
|
})
|
101
101
|
end
|
102
102
|
|
103
103
|
# Simulate a non-existent repository
|
104
|
-
app.get(
|
104
|
+
app.get("/api/repositories/libs-testing-local") do
|
105
105
|
status 400
|
106
106
|
end
|
107
107
|
|
108
|
-
app.put(
|
109
|
-
content_type
|
108
|
+
app.put("/api/repositories/libs-testing-local") do
|
109
|
+
content_type "text/plain"
|
110
110
|
"Repository libs-resting-local created successfully!\n"
|
111
111
|
end
|
112
112
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Artifactory
|
2
2
|
module APIServer::StatusEndpoints
|
3
3
|
def self.registered(app)
|
4
|
-
app.get(
|
5
|
-
app.post(
|
6
|
-
app.patch(
|
7
|
-
app.put(
|
8
|
-
app.delete(
|
4
|
+
app.get("/status/:code") { code.to_i }
|
5
|
+
app.post("/status/:code") { code.to_i }
|
6
|
+
app.patch("/status/:code") { code.to_i }
|
7
|
+
app.put("/status/:code") { code.to_i }
|
8
|
+
app.delete("/status/:code") { code.to_i }
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
module Artifactory
|
2
2
|
module APIServer::SystemEndpoints
|
3
3
|
def self.registered(app)
|
4
|
-
app.get(
|
5
|
-
|
4
|
+
app.get("/api/system") do
|
5
|
+
"This is some serious system info right here"
|
6
6
|
end
|
7
7
|
|
8
|
-
app.get(
|
9
|
-
|
8
|
+
app.get("/api/system/ping") do
|
9
|
+
"OK"
|
10
10
|
end
|
11
11
|
|
12
|
-
app.get(
|
13
|
-
content_type
|
14
|
-
<<-EOH.gsub(/^ {10}/,
|
12
|
+
app.get("/api/system/configuration") do
|
13
|
+
content_type "application/xml"
|
14
|
+
<<-EOH.gsub(/^ {10}/, "")
|
15
15
|
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
|
16
16
|
<config xsi:schemaLocation='http://www.jfrog.org/xsd/artifactory-v1_5_3.xsd'
|
17
17
|
xmlns='http://artifactory.jfrog.org/xsd/1.5.3'
|
@@ -77,27 +77,26 @@ module Artifactory
|
|
77
77
|
<sendMailOnError>true</sendMailOnError>
|
78
78
|
<excludeBuilds>false</excludeBuilds>
|
79
79
|
</backup>
|
80
|
-
</backups>
|
80
|
+
</backups>
|
81
81
|
</config>
|
82
82
|
EOH
|
83
83
|
end
|
84
84
|
|
85
|
-
app.post(
|
85
|
+
app.post("/api/system/configuration") do
|
86
86
|
# Just echo the response we got back, since it seems that's what a real
|
87
87
|
# Artifactory server does...
|
88
88
|
request.body.read
|
89
89
|
end
|
90
90
|
|
91
|
-
app.get(
|
92
|
-
content_type
|
91
|
+
app.get("/api/system/version") do
|
92
|
+
content_type "application/vnd.org.jfrog.artifactory.system.Version+json"
|
93
93
|
JSON.generate({
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
]
|
94
|
+
"version" => "3.1.0",
|
95
|
+
"revision" => "30062",
|
96
|
+
"addons" => %w{
|
97
|
+
ldap
|
98
|
+
license
|
99
|
+
yum},
|
101
100
|
})
|
102
101
|
end
|
103
102
|
end
|
@@ -1,57 +1,57 @@
|
|
1
1
|
module Artifactory
|
2
2
|
module APIServer::UserEndpoints
|
3
3
|
def self.registered(app)
|
4
|
-
app.get(
|
5
|
-
content_type
|
4
|
+
app.get("/api/security/users") do
|
5
|
+
content_type "application/vnd.org.jfrog.artifactory.security.Users+json"
|
6
6
|
JSON.fast_generate([
|
7
7
|
{
|
8
|
-
|
9
|
-
|
8
|
+
"name" => "sethvargo",
|
9
|
+
"uri" => server_url.join("/api/security/users/sethvargo"),
|
10
10
|
},
|
11
11
|
{
|
12
|
-
|
13
|
-
|
14
|
-
}
|
12
|
+
"name" => "yzl",
|
13
|
+
"uri" => server_url.join("/api/security/users/yzl"),
|
14
|
+
},
|
15
15
|
])
|
16
16
|
end
|
17
17
|
|
18
|
-
app.get(
|
19
|
-
content_type
|
18
|
+
app.get("/api/security/users/sethvargo") do
|
19
|
+
content_type "application/vnd.org.jfrog.artifactory.security.User+json"
|
20
20
|
JSON.fast_generate(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
"admin" => false,
|
22
|
+
"email" => "sethvargo@gmail.com",
|
23
|
+
"groups" => ["admin"],
|
24
|
+
"internalPasswordDisabled" => true,
|
25
|
+
"lastLoggedIn" => nil,
|
26
|
+
"name" => "sethvargo",
|
27
|
+
"profileUpdatable" => true,
|
28
|
+
"realm" => "artifactory"
|
29
29
|
)
|
30
30
|
end
|
31
31
|
|
32
|
-
app.get(
|
33
|
-
content_type
|
32
|
+
app.get("/api/security/users/yzl") do
|
33
|
+
content_type "application/vnd.org.jfrog.artifactory.security.User+json"
|
34
34
|
JSON.fast_generate(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
"admin" => true,
|
36
|
+
"email" => "yvonne@getchef.com",
|
37
|
+
"groups" => ["admin"],
|
38
|
+
"internalPasswordDisabled" => true,
|
39
|
+
"lastLoggedIn" => nil,
|
40
|
+
"name" => "yzl",
|
41
|
+
"profileUpdatable" => true,
|
42
|
+
"realm" => "crowd"
|
43
43
|
)
|
44
44
|
end
|
45
45
|
|
46
|
-
app.put(
|
47
|
-
return 415 unless request.content_type ==
|
46
|
+
app.put("/api/security/users/:name") do
|
47
|
+
return 415 unless request.content_type == "application/vnd.org.jfrog.artifactory.security.User+json"
|
48
48
|
|
49
49
|
# Attempt to parse the response; if this succeeds, all is well...
|
50
50
|
JSON.parse(request.body.read)
|
51
51
|
nil
|
52
52
|
end
|
53
53
|
|
54
|
-
app.delete(
|
54
|
+
app.delete("/api/security/users/:name") do
|
55
55
|
nil
|
56
56
|
end
|
57
57
|
end
|
@@ -1,27 +1,27 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe Artifactory do
|
4
|
-
it
|
4
|
+
it "sets the default values" do
|
5
5
|
Artifactory::Configurable.keys.each do |key|
|
6
6
|
value = Artifactory::Defaults.send(key)
|
7
7
|
expect(Artifactory.instance_variable_get(:"@#{key}")).to eq(value)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
describe
|
12
|
-
it
|
11
|
+
describe ".client" do
|
12
|
+
it "creates an Artifactory::Client" do
|
13
13
|
expect(Artifactory.client).to be_a(Artifactory::Client)
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it "caches the client when the same options are passed" do
|
17
17
|
expect(Artifactory.client).to eq(Artifactory.client)
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it "returns a fresh client when options are not the same" do
|
21
21
|
original_client = Artifactory.client
|
22
22
|
|
23
23
|
# Change settings
|
24
|
-
Artifactory.username =
|
24
|
+
Artifactory.username = "admin"
|
25
25
|
new_client = Artifactory.client
|
26
26
|
|
27
27
|
# Get it one more tmie
|
@@ -32,9 +32,9 @@ describe Artifactory do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe
|
35
|
+
describe ".configure" do
|
36
36
|
Artifactory::Configurable.keys.each do |key|
|
37
|
-
it "sets the #{key.to_s.
|
37
|
+
it "sets the #{key.to_s.tr('_', ' ')}" do
|
38
38
|
Artifactory.configure do |config|
|
39
39
|
config.send("#{key}=", key)
|
40
40
|
end
|
@@ -44,29 +44,29 @@ describe Artifactory do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
describe
|
48
|
-
context
|
47
|
+
describe ".method_missing" do
|
48
|
+
context "when the client responds to the method" do
|
49
49
|
let(:client) { double(:client) }
|
50
50
|
before { allow(Artifactory).to receive(:client).and_return(client) }
|
51
51
|
|
52
|
-
it
|
53
|
-
allow(client).to receive(:bacon).and_return(
|
52
|
+
it "delegates the method to the client" do
|
53
|
+
allow(client).to receive(:bacon).and_return("awesome")
|
54
54
|
expect { Artifactory.bacon }.to_not raise_error
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
context
|
59
|
-
it
|
58
|
+
context "when the client does not respond to the method" do
|
59
|
+
it "calls super" do
|
60
60
|
expect { Artifactory.bacon }.to raise_error(NoMethodError)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe
|
65
|
+
describe ".respond_to_missing?" do
|
66
66
|
let(:client) { double(:client) }
|
67
67
|
before { allow(Artifactory).to receive(:client).and_return(client) }
|
68
68
|
|
69
|
-
it
|
69
|
+
it "delegates to the client" do
|
70
70
|
expect { Artifactory.respond_to_missing?(:foo) }.to_not raise_error
|
71
71
|
end
|
72
72
|
end
|
data/spec/unit/client_spec.rb
CHANGED
@@ -1,106 +1,106 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
module Artifactory
|
4
4
|
describe Client do
|
5
5
|
let(:client) { subject }
|
6
6
|
|
7
|
-
context
|
8
|
-
it
|
7
|
+
context "configuration" do
|
8
|
+
it "is a configurable object" do
|
9
9
|
expect(client).to be_a(Configurable)
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it "users the default configuration" do
|
13
13
|
Defaults.options.each do |key, value|
|
14
14
|
expect(client.send(key)).to eq(value)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
it
|
19
|
-
client = described_class.new(username:
|
20
|
-
expect(client.username).to eq(
|
18
|
+
it "uses the values in the initializer" do
|
19
|
+
client = described_class.new(username: "admin")
|
20
|
+
expect(client.username).to eq("admin")
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it "can be modified after initialization" do
|
24
24
|
expect(client.username).to eq(Defaults.username)
|
25
|
-
client.username =
|
26
|
-
expect(client.username).to eq(
|
25
|
+
client.username = "admin"
|
26
|
+
expect(client.username).to eq("admin")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
describe
|
30
|
+
describe ".proxy" do
|
31
31
|
before { described_class.proxy(Resource::Artifact) }
|
32
32
|
|
33
|
-
it
|
33
|
+
it "defines a new method" do
|
34
34
|
expect(described_class).to be_method_defined(:artifact_search)
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it "delegates to the class, injecting the client" do
|
38
38
|
allow(Resource::Artifact).to receive(:search)
|
39
39
|
expect(Resource::Artifact).to receive(:search).with(client: subject)
|
40
40
|
subject.artifact_search
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
describe
|
45
|
-
it
|
46
|
-
expect(subject).to receive(:request).with(:get,
|
47
|
-
subject.get(
|
44
|
+
describe "#get" do
|
45
|
+
it "delegates to the #request method" do
|
46
|
+
expect(subject).to receive(:request).with(:get, "/foo", {}, {})
|
47
|
+
subject.get("/foo")
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
describe
|
51
|
+
describe "#post" do
|
52
52
|
let(:data) { double }
|
53
53
|
|
54
|
-
it
|
55
|
-
expect(subject).to receive(:request).with(:post,
|
56
|
-
subject.post(
|
54
|
+
it "delegates to the #request method" do
|
55
|
+
expect(subject).to receive(:request).with(:post, "/foo", data, {})
|
56
|
+
subject.post("/foo", data)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
describe
|
60
|
+
describe "#put" do
|
61
61
|
let(:data) { double }
|
62
62
|
|
63
|
-
it
|
64
|
-
expect(subject).to receive(:request).with(:put,
|
65
|
-
subject.put(
|
63
|
+
it "delegates to the #request method" do
|
64
|
+
expect(subject).to receive(:request).with(:put, "/foo", data, {})
|
65
|
+
subject.put("/foo", data)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
describe
|
69
|
+
describe "#patch" do
|
70
70
|
let(:data) { double }
|
71
71
|
|
72
|
-
it
|
73
|
-
expect(subject).to receive(:request).with(:patch,
|
74
|
-
subject.patch(
|
72
|
+
it "delegates to the #request method" do
|
73
|
+
expect(subject).to receive(:request).with(:patch, "/foo", data, {})
|
74
|
+
subject.patch("/foo", data)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
describe
|
79
|
-
it
|
80
|
-
expect(subject).to receive(:request).with(:delete,
|
81
|
-
subject.delete(
|
78
|
+
describe "#delete" do
|
79
|
+
it "delegates to the #request method" do
|
80
|
+
expect(subject).to receive(:request).with(:delete, "/foo", {}, {})
|
81
|
+
subject.delete("/foo")
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
describe
|
86
|
-
context
|
87
|
-
before { stub_request(:get, /.+/).to_return(status: 5000, body:
|
85
|
+
describe "#request" do
|
86
|
+
context "when the response is a 400" do
|
87
|
+
before { stub_request(:get, /.+/).to_return(status: 5000, body: "No!") }
|
88
88
|
|
89
|
-
it
|
90
|
-
expect { subject.request(:get,
|
89
|
+
it "raises an HTTPError error" do
|
90
|
+
expect { subject.request(:get, "/") }.to raise_error(Error::HTTPError)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
describe
|
95
|
+
describe "#to_query_string" do
|
96
96
|
it 'converts spaces to "+" characters' do
|
97
|
-
params = {user:
|
98
|
-
expect(subject.to_query_string(params)).to eq(
|
97
|
+
params = { user: "Seth Chisamore" }
|
98
|
+
expect(subject.to_query_string(params)).to eq("user=Seth+Chisamore")
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'converts "+" to "%2B"' do
|
102
|
-
params = {version:
|
103
|
-
expect(subject.to_query_string(params)).to eq(
|
102
|
+
params = { version: "12.0.0-alpha.1+20140826080510.git.50.f5ff271" }
|
103
|
+
expect(subject.to_query_string(params)).to eq("version=12.0.0-alpha.1%2B20140826080510.git.50.f5ff271")
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|