assently 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.travis.yml +15 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +124 -0
- data/Rakefile +1 -0
- data/assently.gemspec +31 -0
- data/lib/assently/api_mappers/case_event_subscription_mapper.rb +12 -0
- data/lib/assently/api_mappers/case_mapper.rb +23 -0
- data/lib/assently/api_mappers/case_options_mapper.rb +74 -0
- data/lib/assently/api_mappers/document_mapper.rb +19 -0
- data/lib/assently/api_mappers/form_field_mapper.rb +12 -0
- data/lib/assently/api_mappers/party_mapper.rb +13 -0
- data/lib/assently/case.rb +50 -0
- data/lib/assently/case_event_subscription.rb +29 -0
- data/lib/assently/client.rb +129 -0
- data/lib/assently/document.rb +64 -0
- data/lib/assently/form_field.rb +3 -0
- data/lib/assently/id_generator.rb +10 -0
- data/lib/assently/party.rb +21 -0
- data/lib/assently/serializers/case_serializer.rb +15 -0
- data/lib/assently/version.rb +3 -0
- data/lib/assently.rb +14 -0
- data/spec/assently/api_mappers/case_event_subscription_mapper_spec.rb +23 -0
- data/spec/assently/api_mappers/case_mapper_spec.rb +34 -0
- data/spec/assently/api_mappers/case_options_mapper_spec.rb +92 -0
- data/spec/assently/api_mappers/document_mapper_spec.rb +35 -0
- data/spec/assently/api_mappers/form_field_mapper_spec.rb +19 -0
- data/spec/assently/api_mappers/party_mapper_spec.rb +24 -0
- data/spec/assently/case_event_subscription_spec.rb +18 -0
- data/spec/assently/case_spec.rb +68 -0
- data/spec/assently/client/create_case_spec.rb +55 -0
- data/spec/assently/client/get_case_spec.rb +84 -0
- data/spec/assently/client_spec.rb +207 -0
- data/spec/assently/document_spec.rb +126 -0
- data/spec/assently/form_field_spec.rb +18 -0
- data/spec/assently/id_generator_spec.rb +13 -0
- data/spec/assently/party_spec.rb +35 -0
- data/spec/assently/serializers/case_serializer_spec.rb +39 -0
- data/spec/assently_spec.rb +17 -0
- data/spec/fixtures/agreement.pdf +0 -0
- data/spec/fixtures/cassettes/Assently_Client/_create_case/valid_case.yml +75 -0
- data/spec/fixtures/cassettes/Assently_Client/_get_case/case_exists.yml +107 -0
- data/spec/fixtures/cassettes/Assently_Client/_get_case/case_missing.yml +43 -0
- data/spec/spec_helper.rb +38 -0
- metadata +225 -0
@@ -0,0 +1,207 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "assently/client"
|
3
|
+
|
4
|
+
RSpec.describe Assently::Client do
|
5
|
+
let :client do
|
6
|
+
Assently::Client.new "admin", "secret"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "instantiates with api key and api secret" do
|
10
|
+
expect(client.api_key).to eq "admin"
|
11
|
+
expect(client.api_secret).to eq "secret"
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "host" do
|
15
|
+
it "defaults to the production environment" do
|
16
|
+
expect(client.host).to eq "app.assently.com"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can be set to the test environment" do
|
20
|
+
test_host = "test.assently.com"
|
21
|
+
|
22
|
+
expect(Assently::Client.new("admin", "secret", :test).host).to eq test_host
|
23
|
+
|
24
|
+
client = Assently::Client.new "admin", "secret"
|
25
|
+
client.environment = :test
|
26
|
+
|
27
|
+
expect(client.host).to eq test_host
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#post" do
|
32
|
+
it "sends the json as the request body" do
|
33
|
+
stub_request(:post, "https://app.assently.com/some/path").
|
34
|
+
with({
|
35
|
+
basic_auth: ["admin", "secret"],
|
36
|
+
body: '{ "key": "value" }'
|
37
|
+
})
|
38
|
+
|
39
|
+
client.post "/some/path", '{ "key": "value" }'
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "headers" do
|
43
|
+
it "sets application/json with utf8 charset" do
|
44
|
+
stub_request(:post, "https://app.assently.com/some/path").with({
|
45
|
+
basic_auth: ["admin", "secret"],
|
46
|
+
headers: { "content-type" => "application/json; charset=utf-8" }
|
47
|
+
})
|
48
|
+
|
49
|
+
client.post "/some/path", '{ "key": "value" }'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "returned result" do
|
54
|
+
it "is a success when successful status is returned" do
|
55
|
+
stub_request(:post, "https://app.assently.com/some/path").
|
56
|
+
with(basic_auth: ["admin", "secret"]).
|
57
|
+
to_return({
|
58
|
+
status: 200,
|
59
|
+
body: '{ "result": "Success" }'
|
60
|
+
})
|
61
|
+
|
62
|
+
result = client.post "/some/path"
|
63
|
+
|
64
|
+
expect(result).to be_a(Assently::Client::SuccessResult)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "is not a success when non-success status is returned" do
|
68
|
+
stub_request(:post, "https://app.assently.com/some/path").
|
69
|
+
with(basic_auth: ["admin", "secret"]).
|
70
|
+
to_return({
|
71
|
+
status: 500,
|
72
|
+
body: '{ "result": "Failure" }'
|
73
|
+
})
|
74
|
+
|
75
|
+
result = client.post "/some/path"
|
76
|
+
|
77
|
+
expect(result).to be_a(Assently::Client::ErrorResult)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#get" do
|
83
|
+
it "makes a get request" do
|
84
|
+
stub = stub_request(:get, "https://app.assently.com/some/path?key=value").
|
85
|
+
with({
|
86
|
+
basic_auth: ["admin", "secret"]
|
87
|
+
})
|
88
|
+
|
89
|
+
client.get "/some/path", { "key": "value" }
|
90
|
+
|
91
|
+
expect(stub).to have_been_requested
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "returned result" do
|
95
|
+
it "is a success when successful status is returned" do
|
96
|
+
stub_request(:get, "https://app.assently.com/some/path").
|
97
|
+
with(basic_auth: ["admin", "secret"]).
|
98
|
+
to_return({ status: 200 })
|
99
|
+
|
100
|
+
result = client.get "/some/path"
|
101
|
+
|
102
|
+
expect(result).to be_a(Assently::Client::SuccessResult)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "is not a success when non-success status is returned" do
|
106
|
+
stub_request(:get, "https://app.assently.com/some/path").
|
107
|
+
with(basic_auth: ["admin", "secret"]).
|
108
|
+
to_return({ status: 500 })
|
109
|
+
|
110
|
+
result = client.get "/some/path"
|
111
|
+
|
112
|
+
expect(result).to be_a(Assently::Client::ErrorResult)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "#connection" do
|
118
|
+
it "looks lika a http connection" do
|
119
|
+
expect(client.connection).to be_kind_of HTTP::Client
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "authentication" do
|
123
|
+
it "uses basic auth" do
|
124
|
+
expect(client.connection.default_options.headers["Authorization"]).to eq "Basic YWRtaW46c2VjcmV0"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "accept header" do
|
129
|
+
it "accepts json" do
|
130
|
+
expect(client.connection.default_options.headers["Accept"]).to eq "application/json"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "Client::SuccessResult" do
|
136
|
+
before do
|
137
|
+
stub_request(:post, "https://app.assently.com/some/path").
|
138
|
+
with(basic_auth: ["admin", "secret"]).
|
139
|
+
to_return({
|
140
|
+
status: 200,
|
141
|
+
body: '{ "result": "Success" }'
|
142
|
+
})
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "result" do
|
146
|
+
it "is successfull" do
|
147
|
+
result = client.post "/some/path"
|
148
|
+
|
149
|
+
expect(result.success?).to be true
|
150
|
+
end
|
151
|
+
|
152
|
+
it "parses the response json" do
|
153
|
+
result = client.post "/some/path"
|
154
|
+
|
155
|
+
expect(result.response).to eq("result" => "Success")
|
156
|
+
end
|
157
|
+
|
158
|
+
it "exposes the raw response" do
|
159
|
+
result = client.post "/some/path"
|
160
|
+
|
161
|
+
expect(result.raw).to eq('{ "result": "Success" }')
|
162
|
+
end
|
163
|
+
|
164
|
+
it "handles simple string bodies" do
|
165
|
+
stub_request(:post, "https://app.assently.com/some/path").
|
166
|
+
with(basic_auth: ["admin", "secret"]).
|
167
|
+
to_return({
|
168
|
+
status: 200,
|
169
|
+
body: "a string response"
|
170
|
+
})
|
171
|
+
|
172
|
+
result = client.post "/some/path"
|
173
|
+
|
174
|
+
expect(result.response).to eq "a string response"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "Client::ErrorResult" do
|
180
|
+
before do
|
181
|
+
stub_request(:post, "https://app.assently.com/some/path").
|
182
|
+
with(basic_auth: ["admin", "secret"]).
|
183
|
+
to_return({
|
184
|
+
status: 400,
|
185
|
+
body: '{"error":{"errorCode":"E041","message":"At least one signer is required."}}'
|
186
|
+
})
|
187
|
+
end
|
188
|
+
|
189
|
+
it "returns a error result" do
|
190
|
+
result = client.post "/some/path"
|
191
|
+
|
192
|
+
expect(result.success?).to be false
|
193
|
+
end
|
194
|
+
|
195
|
+
it "parses the error messages from the html body" do
|
196
|
+
result = client.post "/some/path"
|
197
|
+
|
198
|
+
expect(result.errors).to eq [ "E041 At least one signer is required." ]
|
199
|
+
end
|
200
|
+
|
201
|
+
it "exposes the raw response" do
|
202
|
+
result = client.post "/some/path"
|
203
|
+
|
204
|
+
expect(result.raw).to eq('{"error":{"errorCode":"E041","message":"At least one signer is required."}}')
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "assently/document"
|
3
|
+
|
4
|
+
module Assently
|
5
|
+
RSpec.describe Document do
|
6
|
+
let :fixture_path do
|
7
|
+
File.join(Dir.pwd, "spec/fixtures/agreement.pdf")
|
8
|
+
end
|
9
|
+
|
10
|
+
let :fixture_contents do
|
11
|
+
File.read(fixture_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
describe "with a local file" do
|
16
|
+
let :document do
|
17
|
+
Document.new fixture_path
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#filename" do
|
21
|
+
it "defaults to the file's basename" do
|
22
|
+
expect(document.filename).to eq "agreement.pdf"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "can be set in the constructor" do
|
26
|
+
document = Document.new fixture_path, filename: "special-agreement.pdf"
|
27
|
+
|
28
|
+
expect(document.filename).to eq "special-agreement.pdf"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
specify "#size" do
|
33
|
+
expect(document.size).to eq 6925
|
34
|
+
end
|
35
|
+
|
36
|
+
specify "#content_type" do
|
37
|
+
expect(document.content_type).to eq "application/pdf"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "has the file data encoded as base64" do
|
41
|
+
expect(document.data).to eq Base64.encode64(File.open(fixture_path).read)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#with an url" do
|
46
|
+
before do
|
47
|
+
stub_request(:get, "http://example.com/files/remote_agreement.pdf").to_return({
|
48
|
+
status: 200,
|
49
|
+
body: fixture_contents
|
50
|
+
})
|
51
|
+
end
|
52
|
+
|
53
|
+
let :document do
|
54
|
+
Document.new "http://example.com/files/remote_agreement.pdf"
|
55
|
+
end
|
56
|
+
|
57
|
+
specify "#filename" do
|
58
|
+
expect(document.filename).to eq "remote_agreement.pdf"
|
59
|
+
end
|
60
|
+
|
61
|
+
specify "#size" do
|
62
|
+
expect(document.size).to eq 6925
|
63
|
+
end
|
64
|
+
|
65
|
+
specify "#content_type" do
|
66
|
+
expect(document.content_type).to eq "application/pdf"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "has the file data encoded as base64" do
|
70
|
+
expect(document.data).to eq Base64.encode64(fixture_contents)
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "that is protected by basic authentication" do
|
74
|
+
describe "with valid credentials" do
|
75
|
+
let :url do
|
76
|
+
"example.com/files/protected_file.pdf"
|
77
|
+
end
|
78
|
+
|
79
|
+
before do
|
80
|
+
stub_request(:get, "@#{url}").
|
81
|
+
with(basic_auth: ["test-user", "secret"]).
|
82
|
+
to_return({
|
83
|
+
status: 200,
|
84
|
+
body: "the-body"
|
85
|
+
})
|
86
|
+
end
|
87
|
+
|
88
|
+
it "returns the document" do
|
89
|
+
document = Document.new("http://#{url}", username: "test-user", password: "secret")
|
90
|
+
|
91
|
+
expect(document.data).to eq Base64.encode64("the-body")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "with invalid credentials" do
|
96
|
+
let :url do
|
97
|
+
"http://example.com/files/protected_file.pdf"
|
98
|
+
end
|
99
|
+
|
100
|
+
before do
|
101
|
+
stub_request(:get, url).to_return({
|
102
|
+
status: [401, "Unauthorized"]
|
103
|
+
})
|
104
|
+
end
|
105
|
+
|
106
|
+
it "throws a informative error if it cannot authenticate" do
|
107
|
+
document = Document.new(url)
|
108
|
+
|
109
|
+
expect{
|
110
|
+
document.size
|
111
|
+
}.to raise_error(Assently::CouldNotFetchDocumentError, /#{url}/)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
it "adds form fields" do
|
118
|
+
document = Document.new fixture_contents
|
119
|
+
form_field = double "FormField", name: "FieldName", value: "Some Value"
|
120
|
+
|
121
|
+
document.add_form_field form_field
|
122
|
+
|
123
|
+
expect(document.form_fields).to eq [form_field]
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "assently/form_field"
|
3
|
+
|
4
|
+
module Assently
|
5
|
+
RSpec.describe FormField do
|
6
|
+
let :form_field do
|
7
|
+
FormField.new "A name", "Some value"
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "#name" do
|
11
|
+
expect(form_field.name).to eq "A name"
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "#value" do
|
15
|
+
expect(form_field.value).to eq "Some value"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "assently/id_generator"
|
3
|
+
|
4
|
+
module Assently
|
5
|
+
RSpec.describe IdGenerator do
|
6
|
+
describe ".generate" do
|
7
|
+
it ".returns a new id generated with SecureRandom" do
|
8
|
+
expect(SecureRandom).to receive(:uuid).and_return "very-random"
|
9
|
+
expect(IdGenerator.generate).to eq "very-random"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "assently/party"
|
3
|
+
|
4
|
+
module Assently
|
5
|
+
RSpec.describe Party do
|
6
|
+
describe ".new_with_attributes" do
|
7
|
+
let :party do
|
8
|
+
Party.new_with_attributes({
|
9
|
+
name: "Jane Doe",
|
10
|
+
email: "jane@example.com",
|
11
|
+
social_security_number: "191302275522"
|
12
|
+
})
|
13
|
+
end
|
14
|
+
|
15
|
+
it "sets the name" do
|
16
|
+
expect(party.name).to eq "Jane Doe"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "sets the email address" do
|
20
|
+
expect(party.email).to eq "jane@example.com"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "has a social security number" do
|
24
|
+
expect(party.social_security_number).to eq "191302275522"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "strips unwanted input from social security number" do
|
29
|
+
party = Party.new
|
30
|
+
party.social_security_number = "1913 02 27 - 5522"
|
31
|
+
|
32
|
+
expect(party.social_security_number).to eq "191302275522"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require "assently/case"
|
4
|
+
require "assently/serializers/case_serializer"
|
5
|
+
|
6
|
+
module Assently
|
7
|
+
module Serializers
|
8
|
+
RSpec.describe CaseSerializer do
|
9
|
+
describe ".serialize" do
|
10
|
+
it "maps the case to a api representation and return it as json" do
|
11
|
+
signature_case = double "Assently::Case"
|
12
|
+
api_hash = { "The" => "Case" }
|
13
|
+
|
14
|
+
expect(Assently::ApiMappers::CaseMapper).to receive(:to_api).with(signature_case).and_return api_hash
|
15
|
+
|
16
|
+
expect(CaseSerializer.serialize(signature_case)).to eq JSON.pretty_generate(api_hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "maps event subscription" do
|
20
|
+
api_hash = { "The" => "Case" }
|
21
|
+
signature_case = double "Assently::Case"
|
22
|
+
event_subscription = double "Assently::CaseEventSubscription", events: ["finished", "rejected"], url: "http://example.com"
|
23
|
+
options = { event_callback: event_subscription }
|
24
|
+
options_hash = {
|
25
|
+
"EventCallback" => {
|
26
|
+
"Events" => ["finished", "rejected"],
|
27
|
+
"Url" => "http://example.com"
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
expect(Assently::ApiMappers::CaseMapper).to receive(:to_api).with(signature_case).and_return api_hash
|
32
|
+
expect(Assently::ApiMappers::CaseOptionsMapper).to receive(:to_api).with(options).and_return options_hash
|
33
|
+
|
34
|
+
expect(CaseSerializer.serialize(signature_case, options)).to eq JSON.pretty_generate(api_hash.merge(options_hash))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "assently"
|
3
|
+
|
4
|
+
RSpec.describe Assently do
|
5
|
+
describe ".client" do
|
6
|
+
it "returns a Assently::Client" do
|
7
|
+
expect(Assently.client("admin", "secret")).to be_kind_of Assently::Client
|
8
|
+
end
|
9
|
+
|
10
|
+
it "passes arguments to the client" do
|
11
|
+
client = Assently.client "admin", "secret"
|
12
|
+
|
13
|
+
expect(client.api_key).to eq "admin"
|
14
|
+
expect(client.api_secret).to eq "secret"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
Binary file
|
@@ -0,0 +1,75 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://test.assently.com/api/v2/createcase
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: |-
|
9
|
+
{
|
10
|
+
"Id": "ce7dd6e7-bcda-4340-a9c7-6f1e51786a34",
|
11
|
+
"Name": "Agreement",
|
12
|
+
"NameAlias": "Agreement_alias",
|
13
|
+
"Documents": [
|
14
|
+
{
|
15
|
+
"Filename": "agreement.pdf",
|
16
|
+
"Data": "JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAg\nUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAFFjrEKwkAQRHu/\n4pVaeNlN7nKxVQTbwIIfcMZCoiFJ4e+7YmE1zMxjmJmemVyTYwypjcSk1CnE\nphVlGbjyojqtSlkR1uK0hEPuGunEA2H/t9+ZLJvy5GhOifiEFVR/oGtCBXtS\nmSle3tlehnGceE/LeAs77MHZ/FP/ARUJIsAKZW5kc3RyZWFtCmVuZG9iago1\nIDAgb2JqCjEyOAplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFy\nZW50IDMgMCBSIC9SZXNvdXJjZXMgNiAwIFIgL0NvbnRlbnRzIDQgMCBSIC9N\nZWRpYUJveCBbMCAwIDU5NSA4NDJdCj4+CmVuZG9iago2IDAgb2JqCjw8IC9Q\ncm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNyAw\nIFIgPj4gL0ZvbnQgPDwgL1RUMSA4IDAgUgo+PiA+PgplbmRvYmoKOSAwIG9i\nago8PCAvTGVuZ3RoIDEwIDAgUiAvTiAxIC9BbHRlcm5hdGUgL0RldmljZUdy\nYXkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBhVVdaBxVFD67\nMzt5iUMRbUsrdfCvIaRhUq0mFrXbTbq7Tdium402VarT2dnudCcz453ZtAl9\nCoJvWhDEV0V8Ei2I0GrE5MW+tFSoiRSLICi0WEEQ+iAKfmd2sjsbkcxwZ745\n9zvnnvPdexiivmXD9520RjTnhiJfyc4enz2h9X1HaVKpn3AZZuBny+Upxq7n\nWvzuve6tU4otN/ZxrN65Lb8yNSswwVrB8GqBOUeU0omUYdMXIVHf67CPng19\nxu8DP9CsVnLAnwCrsS8gPZi3XEvYppYXxoJWFl7ddpK5bjXPMba85pwW58rX\nHoz+oDk9ifcgcj5XM8YZPwX8oWlMTAMPAa/74eFKm5NOt5oz2bY9PVQXR2Zi\n+/FGq8B4mCi9tNiovgy8Dfiie6p0LOavmEHuBPBjsN9tWEXeD41I2maHxSow\nfCVdeBXmgyOdrFnjE8DPAi81vUnOYSfwcjA/zXbmf7/YyJWAsZacPmMcLQNv\nB77fcvLMRxx5wA/LHHMUeMp1Srwu6pXftIKoxgHgT8NGtRDz10NRZd9HYP+r\nbh8pAkOHzEMNUWA78skUfCc6T08DL4lWhWt/AviSISbywIiZ+clyZ1hDYEWh\nl1IGWeTRKTxNcukf1B6QTfMR8klgro5vh/JguBgCwwHrNNCvFGKerewfUBM2\n9mVGgGcZQ8T+GtXw1fazMcuII96OfMxN3BziuLRIBnjtle/EPE/eIevykxgH\n5Sn5OXlUHiNNfkE+JD8vj8M6Jh+MfAR8FxC1WwGveAdR25HeoFZPPqvIOYSP\nQz+D40UZBsjgb0RoRsyEGhd2tQZ8/723l8Rrtnn9nT8S6nBtzbjOrj4JXzqW\nVDvSv7ZZ7cwvmduZNTxvZm4lqtEyP2Zu4b7ZU5cXr2ajPhuZbyjL2tvYVa+H\nvbEDm1lZVO5EezKHall93lFWn5VsAYd41mF1aV8y4pXzyzs7vAXS1uRLr97o\nv3L+fzVhfVhnixKq1N0Lu3z/5MespvVW6V6Jlob0i/pd/SP9B/13fU3/AOg3\n6V3pC+lr6bL0pXSVNGlFWpW+kb6VPpO+wtfnsK5Kl5Fb8tS1T1nn9CDT9jk0\n4xPG9fApDogVYDbXz9YNpc5grpspn+3NK7DO3RPdWUs9rO5WH1XH1YfVx9Up\ndVA9oB5Sd6j7MUbUgroXM7s7KnFPsdY23mW8N/rOptlIq/aOcFYNqCeQpYG7\nmxf3qN2Jhjip+6AzR+tyeI12d9uIosXd66FjDZpBxTadjbQL8O3gG7v5H2/u\nSWSXegUny5b3yCNyMe7BrHwAXTjZ04+j3KXKhDKuZElTBpUxZUQ5yjiqlTtU\nU/ZidgzPiWT2iJ7g9CiCv09oncN/iyjn+QvCPt0Itf26/oyWxW/S0oquOTyk\nGY6jRVOBJqzAEvNWbZj4H8x+RH++GP1bU9uvmi0x37ZRKnWN6F/6uod7CmVu\nZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKMTA4OAplbmRvYmoKNyAwIG9iagpb\nIC9JQ0NCYXNlZCA5IDAgUiBdCmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9Q\nYWdlcyAvTWVkaWFCb3ggWzAgMCA1OTUgODQyXSAvQ291bnQgMSAvS2lkcyBb\nIDIgMCBSIF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9n\nIC9QYWdlcyAzIDAgUiA+PgplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvRm9u\ndCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9IVk5QREcrTWVubG8t\nUmVndWxhciAvRm9udERlc2NyaXB0b3IKMTIgMCBSIC9FbmNvZGluZyAvTWFj\nUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMTkgL1dp\nZHRocyBbIDYwMgowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDYwMiAwIDAg\nMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAw\nIDYwMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg\nMCAwIDAgMCAwIDAgMCA2MDIgNjAyIDAKMCAwIDAgMCAwIDYwMiAwIDAgNjAy\nIDAgMCA2MDIgMCAwIDAgMCA2MDIgXSA+PgplbmRvYmoKMTIgMCBvYmoKPDwg\nL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvSFZOUERHK01lbmxv\nLVJlZ3VsYXIgL0ZsYWdzIDMzIC9Gb250QkJveApbLTU1OCAtMzc1IDcxOCAx\nMDQxXSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDkyOCAvRGVzY2VudCAtMjM2\nIC9DYXBIZWlnaHQgNzI5Ci9TdGVtViA5OSAvWEhlaWdodCA1NDcgL1N0ZW1I\nIDgzIC9BdmdXaWR0aCA2MDIgL01heFdpZHRoIDYwMiAvRm9udEZpbGUyIDEz\nIDAgUgo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL0xlbmd0aCAxNCAwIFIgL0xl\nbmd0aDEgNDg3NiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHd\nOH18VNWV577z7nxn5r3JTL4hM4wTgWSSkAgYRBhCAolUjKAyg40GSGJAQigf\nIsaQbNlUEoKBLURAWlkXrbKuO6UUBwIxK9hig6sIQQRaS9W6samlFoIN5Kbn\nvYluf+6vv1//7b4393zdc8/Xve+9e2fNqrVVYIMmQAguqV20EvTLdpXQySWP\nrfHEeNPjAFJe9cpHamO85RXi0x9Zvr46xsedBZDP11QtqozxcJPwpBoSxHh2\n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\nmmVr63UZ5bSR/KpwD3k1WhFUfMbeZX7DaDEYwORUzp7o1yacvJ49pRaoBblB\nvwIKU1QPeJhHzYVclq/kqkEIsplKUC2DMlamlKnOcqbX202LL989jdHCSJQ3\n3vFE6SuHDh/Ofn1j0WOTcH32+POnhs7IFRfXNY65RauD9h8DvZHkCrAxNVhs\nlVCymC20V7VYLTKXzZzLhkSjycgTZW4yGaVEpD8sbCwRbIUWLqEJDfCG1WSz\nWsym2NfPaoScU4kFlMDUq1NPqIkFufQKNPLfGxXTSNNo/hbxI42/FR5zwGFh\nUB5ss5plazqks1FSCqbJtKM3p1pSrOk2epGwcVIGH2cYZ/SZsmwF0iReYCgw\n5pum2opNpeZZ1rtsD5hC5gXWsK1aWorV8lK+zFxlfUx6gj9uetK8yhpwWJKl\ndEwno+mWdEumlMmnSdP4VEuJJWxZJi3lNZZ6qRHXy43yE/xJS6MlqZyVq/mp\nTPsxn5X5Dh3f+4Pnjx8Sg5GfHIjQol4nFQ51YcuNvVL10G6tjCNv4eENtMsa\nqawm/vqyEEWzTf/3zIYSuAfmwf26pqbrjM0EPWG0mSh5YG5Z0ezMu6tWLK8L\nzKt6ZO3yRasA/gJU/qmjCmVuZHN0cmVhbQplbmRvYmoKMTQgMCBvYmoKMzM0\nOAplbmRvYmoKMTUgMCBvYmoKKGFncmVlbWVudCkKZW5kb2JqCjE2IDAgb2Jq\nCihNYWMgT1MgWCAxMC45LjQgUXVhcnR6IFBERkNvbnRleHQpCmVuZG9iagox\nNyAwIG9iagooKQplbmRvYmoKMTggMCBvYmoKKCkKZW5kb2JqCjE5IDAgb2Jq\nCihUZXh0RWRpdCkKZW5kb2JqCjIwIDAgb2JqCihEOjIwMTQwODMxMTkyNzI0\nWjAwJzAwJykKZW5kb2JqCjIxIDAgb2JqCigpCmVuZG9iagoyMiAwIG9iagpb\nICgpIF0KZW5kb2JqCjEgMCBvYmoKPDwgL1RpdGxlIDE1IDAgUiAvQXV0aG9y\nIDE3IDAgUiAvU3ViamVjdCAxOCAwIFIgL1Byb2R1Y2VyIDE2IDAgUiAvQ3Jl\nYXRvcgoxOSAwIFIgL0NyZWF0aW9uRGF0ZSAyMCAwIFIgL01vZERhdGUgMjAg\nMCBSIC9LZXl3b3JkcyAyMSAwIFIgL0FBUEw6S2V5d29yZHMKMjIgMCBSID4+\nCmVuZG9iagp4cmVmCjAgMjMKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDA2\nMTMzIDAwMDAwIG4gCjAwMDAwMDAyNDMgMDAwMDAgbiAKMDAwMDAwMTY5MSAw\nMDAwMCBuIAowMDAwMDAwMDIyIDAwMDAwIG4gCjAwMDAwMDAyMjQgMDAwMDAg\nbiAKMDAwMDAwMDM0NyAwMDAwMCBuIAowMDAwMDAxNjU2IDAwMDAwIG4gCjAw\nMDAwMDE4MjQgMDAwMDAgbiAKMDAwMDAwMDQ0NCAwMDAwMCBuIAowMDAwMDAx\nNjM1IDAwMDAwIG4gCjAwMDAwMDE3NzQgMDAwMDAgbiAKMDAwMDAwMjE5MyAw\nMDAwMCBuIAowMDAwMDAyNDQ1IDAwMDAwIG4gCjAwMDAwMDU4ODMgMDAwMDAg\nbiAKMDAwMDAwNTkwNCAwMDAwMCBuIAowMDAwMDA1OTMyIDAwMDAwIG4gCjAw\nMDAwMDU5ODQgMDAwMDAgbiAKMDAwMDAwNjAwMyAwMDAwMCBuIAowMDAwMDA2\nMDIyIDAwMDAwIG4gCjAwMDAwMDYwNDkgMDAwMDAgbiAKMDAwMDAwNjA5MSAw\nMDAwMCBuIAowMDAwMDA2MTEwIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUg\nMjMgL1Jvb3QgMTEgMCBSIC9JbmZvIDEgMCBSIC9JRCBbIDwwYzY4NDVjYjUx\nMTNiMDc0NzIyNGVhZGE2ZjA5NjAyND4KPDBjNjg0NWNiNTExM2IwNzQ3MjI0\nZWFkYTZmMDk2MDI0PiBdID4+CnN0YXJ0eHJlZgo2MzA4CiUlRU9GCg==\n",
|
17
|
+
"ContentType": "application/pdf",
|
18
|
+
"Size": 6925,
|
19
|
+
"FormFields": [
|
20
|
+
|
21
|
+
]
|
22
|
+
}
|
23
|
+
],
|
24
|
+
"Parties": [
|
25
|
+
{
|
26
|
+
"Name": "First Last",
|
27
|
+
"EmailAddress": "name@example.com",
|
28
|
+
"SocialSecurityNumber": "2405062254"
|
29
|
+
}
|
30
|
+
],
|
31
|
+
"AllowedSignatureTypes": [
|
32
|
+
"touch"
|
33
|
+
],
|
34
|
+
"CaseReferenceId": "e0d458e6-bdac-4d8b-80e6-bf468b9a2b0f",
|
35
|
+
"ContinueName": "Back to the site",
|
36
|
+
"ContinueUrl": "http://example.com/thanks",
|
37
|
+
"ContinueAuto": true,
|
38
|
+
"CancelUrl": "http://example.com/sorry",
|
39
|
+
"Procedure": "form",
|
40
|
+
"Culture": "sv-SE"
|
41
|
+
}
|
42
|
+
headers:
|
43
|
+
Accept:
|
44
|
+
- application/json
|
45
|
+
Authorization:
|
46
|
+
- Basic <ASSENTLY_API_AUTH_HEADER>
|
47
|
+
User-Agent:
|
48
|
+
- Faraday v0.11.0
|
49
|
+
Content-Type:
|
50
|
+
- application/json; charset=utf-8
|
51
|
+
Accept-Encoding:
|
52
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
53
|
+
response:
|
54
|
+
status:
|
55
|
+
code: 200
|
56
|
+
message: OK
|
57
|
+
headers:
|
58
|
+
Cache-Control:
|
59
|
+
- private, s-maxage=0
|
60
|
+
X-Frame-Options:
|
61
|
+
- SAMEORIGIN
|
62
|
+
Set-Cookie:
|
63
|
+
- sid=tc1muzjfyfsfqo05joyuxjr5; path=/; HttpOnly; Secure
|
64
|
+
Date:
|
65
|
+
- Thu, 26 Jan 2017 20:23:50 GMT
|
66
|
+
Content-Length:
|
67
|
+
- '0'
|
68
|
+
Strict-Transport-Security:
|
69
|
+
- max-age=31536000
|
70
|
+
body:
|
71
|
+
encoding: UTF-8
|
72
|
+
string: ''
|
73
|
+
http_version:
|
74
|
+
recorded_at: Thu, 26 Jan 2017 20:23:50 GMT
|
75
|
+
recorded_with: VCR 3.0.3
|