hello_sign 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/hello_sign.rb +29 -5
- data/lib/hello_sign/client.rb +13 -38
- data/lib/hello_sign/connection.rb +53 -0
- data/lib/hello_sign/error.rb +13 -9
- data/lib/hello_sign/middleware/parse_json.rb +22 -0
- data/lib/hello_sign/middleware/raise_error.rb +2 -0
- data/lib/hello_sign/parameters/reusable_form_signature_request.rb +27 -14
- data/lib/hello_sign/parameters/signature_request.rb +29 -21
- data/lib/hello_sign/parameters/unclaimed_draft.rb +8 -5
- data/lib/hello_sign/proxy/signature_request.rb +30 -18
- data/lib/hello_sign/version.rb +1 -1
- data/spec/helper.rb +0 -6
- data/spec/integration/hello_sign_spec.rb +7 -1
- data/spec/integration/helper.rb +17 -4
- data/spec/shared_examples/proxy.rb +58 -15
- data/spec/unit/client_spec.rb +42 -27
- data/spec/unit/connection_spec.rb +38 -0
- data/spec/unit/error_spec.rb +65 -13
- data/spec/unit/hello_sign_spec.rb +66 -23
- data/spec/unit/middleware/parse_json_spec.rb +38 -0
- data/spec/unit/middleware/raise_error_spec.rb +36 -23
- data/spec/unit/parameters/reusable_form_signature_request_spec.rb +74 -37
- data/spec/unit/parameters/signature_request_spec.rb +11 -5
- data/spec/unit/parameters/unclaimed_draft_spec.rb +14 -6
- data/spec/unit/proxy/account_spec.rb +17 -9
- data/spec/unit/proxy/reusable_form_spec.rb +31 -14
- data/spec/unit/proxy/settings_spec.rb +11 -4
- data/spec/unit/proxy/signature_request_spec.rb +74 -38
- data/spec/unit/proxy/team_spec.rb +39 -20
- data/spec/unit/proxy/unclaimed_draft_spec.rb +25 -6
- data/spec/unit/upload_io_spec.rb +69 -27
- metadata +20 -40
data/lib/hello_sign/version.rb
CHANGED
data/spec/helper.rb
CHANGED
@@ -3,7 +3,13 @@ require 'json'
|
|
3
3
|
|
4
4
|
describe HelloSign do
|
5
5
|
context "when returning a response with a body" do
|
6
|
-
before
|
6
|
+
before do
|
7
|
+
stub_get_with_auth('/json')
|
8
|
+
.to_return(
|
9
|
+
headers: {'Content-Type' => 'application/json'},
|
10
|
+
body: {account_id: 1}.to_json
|
11
|
+
)
|
12
|
+
end
|
7
13
|
|
8
14
|
it "parses the body into a hash with symbols as keys" do
|
9
15
|
expect(HelloSign.client.get('/json')).to eq({account_id: 1})
|
data/spec/integration/helper.rb
CHANGED
@@ -22,15 +22,25 @@ def stub_post(path)
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def stub_get_with_auth(path)
|
25
|
-
stub_request(
|
25
|
+
stub_request(
|
26
|
+
:get,
|
27
|
+
"https://david@bowman.com:foobar@api.hellosign.com/v3#{path}"
|
28
|
+
)
|
26
29
|
end
|
27
30
|
|
28
31
|
def stub_post_with_auth(path)
|
29
|
-
stub_request(
|
32
|
+
stub_request(
|
33
|
+
:post,
|
34
|
+
"https://david@bowman.com:foobar@api.hellosign.com/v3#{path}"
|
35
|
+
)
|
30
36
|
end
|
31
37
|
|
32
38
|
def stub_request_with_error(error)
|
33
|
-
stub_request(:any, /api\.hellosign\.com/)
|
39
|
+
stub_request(:any, /api\.hellosign\.com/)
|
40
|
+
.to_return(
|
41
|
+
headers: {'Content-Type' => 'application/json'},
|
42
|
+
body: {error: {error_name: error}}.to_json
|
43
|
+
)
|
34
44
|
end
|
35
45
|
|
36
46
|
def a_get(path)
|
@@ -46,5 +56,8 @@ def a_get_with_auth(path)
|
|
46
56
|
end
|
47
57
|
|
48
58
|
def a_post_with_auth(path)
|
49
|
-
a_request(
|
59
|
+
a_request(
|
60
|
+
:post,
|
61
|
+
"https://david@bowman.com:foobar@api.hellosign.com/v3#{path}"
|
62
|
+
)
|
50
63
|
end
|
@@ -2,46 +2,89 @@ shared_examples_for 'a proxy' do
|
|
2
2
|
let(:proxy) { double('proxy') }
|
3
3
|
|
4
4
|
describe "#account" do
|
5
|
+
before do
|
6
|
+
allow(HelloSign::Proxy::Account).to(
|
7
|
+
receive(:new).with(client).and_return(proxy)
|
8
|
+
)
|
9
|
+
end
|
10
|
+
|
5
11
|
it "returns an account proxy" do
|
6
|
-
HelloSign::Proxy::Account.should_receive(:new).with(client).and_return(proxy)
|
7
12
|
expect(client.account).to eq proxy
|
8
13
|
end
|
9
14
|
end
|
10
15
|
|
11
16
|
describe "#signature_request" do
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
before { allow(HelloSign::Proxy::SignatureRequest).to receive(:new) }
|
18
|
+
|
19
|
+
context "when called without a signature request ID" do
|
20
|
+
before do
|
21
|
+
allow(HelloSign::Proxy::SignatureRequest).to(
|
22
|
+
receive(:new).with(client, nil).and_return(proxy)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns a signature request proxy" do
|
27
|
+
expect(client.signature_request).to eq proxy
|
28
|
+
end
|
15
29
|
end
|
16
30
|
|
17
|
-
|
18
|
-
|
19
|
-
|
31
|
+
context "when called with a signature request ID" do
|
32
|
+
before { client.signature_request('signature_request_id') }
|
33
|
+
|
34
|
+
it "passes on the signature request ID" do
|
35
|
+
expect(HelloSign::Proxy::SignatureRequest).to(
|
36
|
+
have_received(:new).with(client, 'signature_request_id')
|
37
|
+
)
|
38
|
+
end
|
20
39
|
end
|
21
40
|
end
|
22
41
|
|
23
42
|
describe "#reusable_form" do
|
24
|
-
|
25
|
-
|
26
|
-
|
43
|
+
before { allow(HelloSign::Proxy::ReusableForm).to receive(:new) }
|
44
|
+
|
45
|
+
context "when called without a reusable form ID" do
|
46
|
+
before do
|
47
|
+
allow(HelloSign::Proxy::ReusableForm).to(
|
48
|
+
receive(:new).with(client, nil).and_return(proxy)
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns a reusable form proxy" do
|
53
|
+
expect(client.reusable_form).to eq proxy
|
54
|
+
end
|
27
55
|
end
|
28
56
|
|
29
|
-
|
30
|
-
|
31
|
-
|
57
|
+
context "when called with a reusable form ID" do
|
58
|
+
before { client.reusable_form('reusable_form_id') }
|
59
|
+
|
60
|
+
it "passes on an optional reusable form ID" do
|
61
|
+
expect(HelloSign::Proxy::ReusableForm).to(
|
62
|
+
have_received(:new).with(client, 'reusable_form_id')
|
63
|
+
)
|
64
|
+
end
|
32
65
|
end
|
33
66
|
end
|
34
67
|
|
35
68
|
describe "#team" do
|
69
|
+
before do
|
70
|
+
allow(HelloSign::Proxy::Team).to(
|
71
|
+
receive(:new).with(client).and_return(proxy)
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
36
75
|
it "returns a team proxy" do
|
37
|
-
HelloSign::Proxy::Team.should_receive(:new).with(client).and_return(proxy)
|
38
76
|
expect(client.team).to eq proxy
|
39
77
|
end
|
40
78
|
end
|
41
79
|
|
42
80
|
describe "#unclaimed_draft" do
|
81
|
+
before do
|
82
|
+
allow(HelloSign::Proxy::UnclaimedDraft).to(
|
83
|
+
receive(:new).with(client).and_return(proxy)
|
84
|
+
)
|
85
|
+
end
|
86
|
+
|
43
87
|
it "returns an unclaimed draft proxy" do
|
44
|
-
HelloSign::Proxy::UnclaimedDraft.should_receive(:new).with(client).and_return(proxy)
|
45
88
|
expect(client.unclaimed_draft).to eq proxy
|
46
89
|
end
|
47
90
|
end
|
data/spec/unit/client_spec.rb
CHANGED
@@ -3,53 +3,68 @@ require 'hello_sign/client'
|
|
3
3
|
require 'shared_examples/proxy'
|
4
4
|
|
5
5
|
describe HelloSign::Client do
|
6
|
-
let(:
|
7
|
-
let(:
|
8
|
-
|
6
|
+
let(:connection) { double('connection') }
|
7
|
+
let(:response) { double('response') }
|
8
|
+
|
9
|
+
subject(:hs_client) { HelloSign::Client.new('email address', 'password') }
|
9
10
|
|
10
11
|
it_behaves_like 'a proxy' do
|
11
12
|
let(:client) { hs_client }
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
before do
|
16
|
+
allow(HelloSign::Connection).to receive(:new).and_return(connection)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#get" do
|
20
|
+
before do
|
21
|
+
allow(connection).to receive(:get).and_return(response)
|
18
22
|
|
19
|
-
|
23
|
+
@response = hs_client.get('/path', options: 'hash')
|
24
|
+
end
|
20
25
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
hs_client.get(path, options)
|
25
|
-
end
|
26
|
+
it "delegates to the connection" do
|
27
|
+
expect(connection).to have_received(:get).with('/path', options: 'hash')
|
28
|
+
end
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
+
it "returns the response" do
|
31
|
+
expect(@response).to eq response
|
30
32
|
end
|
33
|
+
end
|
31
34
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
hs_client.post(path, options)
|
36
|
-
end
|
35
|
+
describe "#post" do
|
36
|
+
before do
|
37
|
+
allow(connection).to receive(:post).and_return(response)
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
@response = hs_client.post('/path', options: 'hash')
|
40
|
+
end
|
41
|
+
|
42
|
+
it "delegates to the connection" do
|
43
|
+
expect(connection).to(
|
44
|
+
have_received(:post).with('/path', options: 'hash')
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns the response" do
|
49
|
+
expect(@response).to eq response
|
41
50
|
end
|
42
51
|
end
|
43
52
|
|
44
53
|
context "when a hash is passed to the constructor" do
|
45
|
-
subject(:hs_client)
|
54
|
+
subject(:hs_client) do
|
55
|
+
HelloSign::Client.new(email_address: email_address, password: password)
|
56
|
+
end
|
46
57
|
|
47
58
|
it "raises an exception if an email address is not provided" do
|
48
|
-
expect { HelloSign::Client.new(password: 'space') }.to
|
59
|
+
expect { HelloSign::Client.new(password: 'space') }.to(
|
60
|
+
raise_error ArgumentError
|
61
|
+
)
|
49
62
|
end
|
50
63
|
|
51
64
|
it "raises an exception if a password is not provided" do
|
52
|
-
expect { HelloSign::Client.new(email_address: 'david@bowman.com') }.to
|
65
|
+
expect { HelloSign::Client.new(email_address: 'david@bowman.com') }.to(
|
66
|
+
raise_error ArgumentError
|
67
|
+
)
|
53
68
|
end
|
54
69
|
end
|
55
70
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'hello_sign/connection'
|
3
|
+
|
4
|
+
describe HelloSign::Connection do
|
5
|
+
let(:response) { double('response') }
|
6
|
+
|
7
|
+
subject(:connection) { HelloSign::Connection.new }
|
8
|
+
|
9
|
+
before { allow(connection).to receive(:request).and_return(response) }
|
10
|
+
|
11
|
+
describe "#get" do
|
12
|
+
before { @response = connection.get('/path', options: 'hash') }
|
13
|
+
|
14
|
+
it "sends a request" do
|
15
|
+
expect(connection).to(
|
16
|
+
have_received(:request).with(:get, '/path', options: 'hash')
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the response" do
|
21
|
+
expect(@response).to eq response
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#post" do
|
26
|
+
before { @response = connection.post('/path', options: 'hash') }
|
27
|
+
|
28
|
+
it "sends a request" do
|
29
|
+
expect(connection).to(
|
30
|
+
have_received(:request).with(:post, '/path', options: 'hash')
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns the response" do
|
35
|
+
expect(@response).to eq response
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/unit/error_spec.rb
CHANGED
@@ -2,23 +2,75 @@ require 'helper'
|
|
2
2
|
require 'hello_sign/error'
|
3
3
|
|
4
4
|
describe HelloSign::Error do
|
5
|
-
specify
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
specify
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
specify do
|
6
|
+
expect { raise HelloSign::Error }.to(
|
7
|
+
raise_error StandardError
|
8
|
+
)
|
9
|
+
end
|
10
|
+
|
11
|
+
specify do
|
12
|
+
expect { raise HelloSign::Error::BadRequest }.to(
|
13
|
+
raise_error HelloSign::Error
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
specify do
|
18
|
+
expect { raise HelloSign::Error::Unauthorized }.to(
|
19
|
+
raise_error HelloSign::Error
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
specify do
|
24
|
+
expect { raise HelloSign::Error::Forbidden }.to(
|
25
|
+
raise_error HelloSign::Error
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
specify do
|
30
|
+
expect { raise HelloSign::Error::NotFound }.to(
|
31
|
+
raise_error HelloSign::Error
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
specify do
|
36
|
+
expect { raise HelloSign::Error::Unknown }.to(
|
37
|
+
raise_error HelloSign::Error
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
specify do
|
42
|
+
expect { raise HelloSign::Error::TeamInviteFailed }.to(
|
43
|
+
raise_error HelloSign::Error
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
specify do
|
48
|
+
expect { raise HelloSign::Error::InvalidRecipient }.to(
|
49
|
+
raise_error HelloSign::Error
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
specify do
|
54
|
+
expect { raise HelloSign::Error::ConvertFailed }.to(
|
55
|
+
raise_error HelloSign::Error
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
specify do
|
60
|
+
expect { raise HelloSign::Error::SignatureRequestCancelFailed }.to(
|
61
|
+
raise_error HelloSign::Error
|
62
|
+
)
|
63
|
+
end
|
15
64
|
|
16
65
|
describe "#to_s" do
|
17
|
-
let(:error)
|
18
|
-
|
66
|
+
let(:error) {
|
67
|
+
HelloSign::Error.new('This is why an error was received.', 401)
|
68
|
+
}
|
19
69
|
|
20
70
|
it "displays a helpful message" do
|
21
|
-
expect(error.to_s).to
|
71
|
+
expect(error.to_s).to(
|
72
|
+
eq '[Status code: 401] This is why an error was received.'
|
73
|
+
)
|
22
74
|
end
|
23
75
|
end
|
24
76
|
end
|
@@ -13,18 +13,26 @@ describe HelloSign do
|
|
13
13
|
describe "::client" do
|
14
14
|
let(:client) { double('client') }
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
before { allow(HelloSign::Client).to receive(:new) }
|
17
|
+
|
18
|
+
context "when it has not previously been called" do
|
19
|
+
before { HelloSign.client }
|
20
|
+
|
21
|
+
it "passes the credentials when creating the client" do
|
22
|
+
expect(HelloSign::Client).to(
|
23
|
+
have_received(:new).with(email_address, password)
|
24
|
+
)
|
25
|
+
end
|
19
26
|
end
|
20
27
|
|
21
28
|
context "when it has previously been called" do
|
22
29
|
let(:new_client) { double('new client') }
|
23
30
|
|
24
31
|
before do
|
25
|
-
HelloSign::Client.
|
26
|
-
client.
|
27
|
-
client.
|
32
|
+
allow(HelloSign::Client).to receive(:new).and_return(client, new_client)
|
33
|
+
allow(client).to receive(:email_address).and_return(email_address)
|
34
|
+
allow(client).to receive(:password).and_return(password)
|
35
|
+
|
28
36
|
HelloSign.client
|
29
37
|
end
|
30
38
|
|
@@ -44,35 +52,70 @@ describe HelloSign do
|
|
44
52
|
end
|
45
53
|
|
46
54
|
context "when calling delegated methods" do
|
47
|
-
let(:client)
|
55
|
+
let(:client) { double('client') }
|
48
56
|
|
49
|
-
before { HelloSign::Client.
|
57
|
+
before { allow(HelloSign::Client).to receive(:new).and_return(client) }
|
50
58
|
|
51
59
|
after { HelloSign.instance_variable_set(:@client, nil) }
|
52
60
|
|
53
|
-
|
54
|
-
|
55
|
-
|
61
|
+
describe "::account" do
|
62
|
+
before do
|
63
|
+
allow(client).to receive(:account)
|
64
|
+
|
65
|
+
HelloSign.account
|
66
|
+
end
|
67
|
+
|
68
|
+
it "delegates to the client" do
|
69
|
+
expect(client).to have_received(:account)
|
70
|
+
end
|
56
71
|
end
|
57
72
|
|
58
|
-
|
59
|
-
|
60
|
-
|
73
|
+
describe "::signature_request" do
|
74
|
+
before do
|
75
|
+
allow(client).to receive(:signature_request)
|
76
|
+
|
77
|
+
HelloSign.signature_request
|
78
|
+
end
|
79
|
+
|
80
|
+
it "delegates ::signature_request to the client" do
|
81
|
+
expect(client).to have_received(:signature_request)
|
82
|
+
end
|
61
83
|
end
|
62
84
|
|
63
|
-
|
64
|
-
|
65
|
-
|
85
|
+
describe "::reusable_form" do
|
86
|
+
before do
|
87
|
+
allow(client).to receive(:reusable_form)
|
88
|
+
|
89
|
+
HelloSign.reusable_form
|
90
|
+
end
|
91
|
+
|
92
|
+
it "delegates ::reusable_form to the client" do
|
93
|
+
expect(client).to have_received(:reusable_form)
|
94
|
+
end
|
66
95
|
end
|
67
96
|
|
68
|
-
|
69
|
-
|
70
|
-
|
97
|
+
describe "::team" do
|
98
|
+
before do
|
99
|
+
allow(client).to receive(:team)
|
100
|
+
|
101
|
+
HelloSign.team
|
102
|
+
end
|
103
|
+
|
104
|
+
it "delegates ::team to the client" do
|
105
|
+
expect(client).to have_received(:team)
|
106
|
+
end
|
71
107
|
end
|
72
108
|
|
73
|
-
|
74
|
-
|
75
|
-
|
109
|
+
describe "::unclaimed_draft" do
|
110
|
+
before do
|
111
|
+
allow(client).to receive(:unclaimed_draft)
|
112
|
+
|
113
|
+
HelloSign.unclaimed_draft
|
114
|
+
end
|
115
|
+
|
116
|
+
it "delegates ::unclaimed_draft to the client" do
|
117
|
+
expect(client).to have_received(:unclaimed_draft)
|
118
|
+
end
|
76
119
|
end
|
77
120
|
end
|
78
121
|
|