egree 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +5 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +72 -0
  8. data/Rakefile +1 -0
  9. data/egree.gemspec +31 -0
  10. data/lib/egree.rb +8 -0
  11. data/lib/egree/case.rb +64 -0
  12. data/lib/egree/client.rb +103 -0
  13. data/lib/egree/document.rb +45 -0
  14. data/lib/egree/form_field.rb +3 -0
  15. data/lib/egree/party.rb +21 -0
  16. data/lib/egree/reference_id.rb +34 -0
  17. data/lib/egree/serializers/case.rb +22 -0
  18. data/lib/egree/serializers/document.rb +21 -0
  19. data/lib/egree/serializers/form_field.rb +16 -0
  20. data/lib/egree/serializers/party.rb +17 -0
  21. data/lib/egree/serializers/reference_id.rb +18 -0
  22. data/lib/egree/version.rb +3 -0
  23. data/spec/egree/case_spec.rb +74 -0
  24. data/spec/egree/client/create_case_spec.rb +62 -0
  25. data/spec/egree/client/get_case_url_spec.rb +84 -0
  26. data/spec/egree/client_spec.rb +125 -0
  27. data/spec/egree/document_spec.rb +73 -0
  28. data/spec/egree/form_field_spec.rb +18 -0
  29. data/spec/egree/party_spec.rb +35 -0
  30. data/spec/egree/reference_id_spec.rb +40 -0
  31. data/spec/egree/serializers/case_spec.rb +30 -0
  32. data/spec/egree/serializers/document_spec.rb +45 -0
  33. data/spec/egree/serializers/form_field_spec.rb +29 -0
  34. data/spec/egree/serializers/party_spec.rb +34 -0
  35. data/spec/egree/serializers/reference_id_spec.rb +28 -0
  36. data/spec/egree_spec.rb +17 -0
  37. data/spec/fixtures/agreement.pdf +0 -0
  38. data/spec/fixtures/cassettes/Egree_Client/_create_case/invalid_case.yml +58 -0
  39. data/spec/fixtures/cassettes/Egree_Client/_create_case/valid_case.yml +67 -0
  40. data/spec/fixtures/cassettes/Egree_Client/_create_case/with_an_invalid_case/includes_the_error_message.yml +66 -0
  41. data/spec/fixtures/cassettes/Egree_Client/_get_case_url/case_exists.yml +113 -0
  42. data/spec/fixtures/cassettes/Egree_Client/_get_case_url/case_missing.yml +45 -0
  43. data/spec/spec_helper.rb +38 -0
  44. metadata +219 -0
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+ require "egree/document"
3
+
4
+ module Egree
5
+ RSpec.describe Document do
6
+ let :fixture_path do
7
+ File.join(Dir.pwd, "spec/fixtures/agreement.pdf")
8
+ end
9
+
10
+ describe "with a local file" do
11
+ let :document do
12
+ Document.new fixture_path
13
+ end
14
+
15
+ specify "#filename" do
16
+ expect(document.filename).to eq "agreement.pdf"
17
+ end
18
+
19
+ specify "#size" do
20
+ expect(document.size).to eq 6925
21
+ end
22
+
23
+ specify "#content_type" do
24
+ expect(document.content_type).to eq "application/pdf"
25
+ end
26
+
27
+ it "has the file data encoded as base64" do
28
+ expect(document.data).to eq Base64.encode64(File.open(fixture_path).read)
29
+ end
30
+ end
31
+
32
+ describe "#with an url" do
33
+ before do
34
+ fixture_path = File.join(Dir.pwd, "spec/fixtures/agreement.pdf")
35
+
36
+ stub_request(:get, "http://example.com/files/remote_agreement.pdf").to_return({
37
+ status: 200,
38
+ body: File.read(fixture_path)
39
+ })
40
+ end
41
+
42
+ let :document do
43
+ Document.new "http://example.com/files/remote_agreement.pdf"
44
+ end
45
+
46
+ specify "#filename" do
47
+ expect(document.filename).to eq "remote_agreement.pdf"
48
+ end
49
+
50
+ specify "#size" do
51
+ expect(document.size).to eq 6925
52
+ end
53
+
54
+ specify "#content_type" do
55
+ expect(document.content_type).to eq "application/pdf"
56
+ end
57
+
58
+ it "has the file data encoded as base64" do
59
+ fixture_path = File.join(Dir.pwd, "spec/fixtures/agreement.pdf")
60
+ expect(document.data).to eq Base64.encode64(File.open(fixture_path).read)
61
+ end
62
+ end
63
+
64
+ it "adds form fields" do
65
+ document = Document.new fixture_path
66
+ form_field = double "FormField", name: "FieldName", value: "Some Value"
67
+
68
+ document.add_form_field form_field
69
+
70
+ expect(document.form_fields).to eq [form_field]
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+ require "egree/form_field"
3
+
4
+ module Egree
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,35 @@
1
+ require "spec_helper"
2
+ require "egree/party"
3
+
4
+ module Egree
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,40 @@
1
+ require "spec_helper"
2
+ require "egree/reference_id"
3
+
4
+ module Egree
5
+ RSpec.describe ReferenceId do
6
+ describe ".generate" do
7
+ it ".returns a new reference id generated with SecureRandom" do
8
+ expect(SecureRandom).to receive(:uuid).and_return "very-random"
9
+
10
+ expect(ReferenceId.generate).to eq ReferenceId.new("very-random")
11
+ end
12
+
13
+ it "stores the id" do
14
+ expect(ReferenceId.new("123").id).to eq "123"
15
+ end
16
+
17
+ describe "#to_s" do
18
+ it "returns the id" do
19
+ expect(ReferenceId.new(123).to_s).to eq "123"
20
+ end
21
+ end
22
+
23
+ describe "#to_json" do
24
+ it "uses Serializers::ReferenceId" do
25
+ reference_id = ReferenceId.new 123
26
+
27
+ expect(reference_id.to_json).to eq Serializers::ReferenceId.serialize(reference_id)
28
+ end
29
+ end
30
+
31
+ describe "#to_api_hash" do
32
+ it "delegates to Serializers::ReferenceId" do
33
+ reference_id = ReferenceId.new 123
34
+
35
+ expect(reference_id.to_api_hash).to eq Serializers::ReferenceId.to_api_hash(reference_id)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ require "egree/case"
4
+ require "egree/serializers/case"
5
+
6
+ module Egree
7
+ module Serializers
8
+ RSpec.describe Case do
9
+ it "serializes the case into the expected format" do
10
+ party = double "Party"
11
+ document = double "Document"
12
+
13
+ signature_case = Egree::Case.new "Agreement", ["electronicId"]
14
+ signature_case.add_party party
15
+ signature_case.add_document document
16
+
17
+ expect(Egree::Serializers::Party).to receive(:to_api_hash).with(party).and_return(party: "on")
18
+ expect(Egree::Serializers::Document).to receive(:to_api_hash).with(document).and_return(document: "on")
19
+
20
+ expect(Case.serialize(signature_case)).to eq JSON.pretty_generate({
21
+ "Name" => "Agreement",
22
+ "Documents" => [{ document: "on" }],
23
+ "Parties" => [{ party: "on" }],
24
+ "AllowedSignatureTypes" => ["electronicId"],
25
+ "CaseReferenceId" => signature_case.reference_id.to_s
26
+ })
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+ require "egree/serializers/document"
3
+
4
+ module Egree
5
+ module Serializers
6
+ RSpec.describe Document do
7
+ describe ".serialize" do
8
+ it "returns a json string of the api hash" do
9
+ document = double "Document"
10
+
11
+ expect(Document).to receive(:to_api_hash).with(document).and_return(document: "hash")
12
+
13
+ expect(Document.serialize(document)).to eq JSON.pretty_generate(document: "hash")
14
+ end
15
+ end
16
+
17
+ describe ".to_api_hash" do
18
+ it "creates a hash that matches the api's expected format" do
19
+ form_field = double "FormField"
20
+
21
+ document = double("Document", {
22
+ filename: "agreement.pdf",
23
+ size: 123,
24
+ data: "encoded-data",
25
+ content_type: "application/pdf",
26
+ form_fields: [form_field]
27
+ })
28
+
29
+ expect(Egree::Serializers::FormField).to receive(:to_api_hash).with(form_field).and_return({
30
+ name: "FieldKey",
31
+ value: "FieldValue"
32
+ })
33
+
34
+ expect(Document.to_api_hash(document)).to eq({
35
+ "Filename" => "agreement.pdf",
36
+ "Data" => "encoded-data",
37
+ "ContentType" => "application/pdf",
38
+ "Size" => 123,
39
+ "FormFields" => [{ name: "FieldKey", value: "FieldValue" }]
40
+ })
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ require "egree/serializers/form_field"
4
+ require "egree/form_field"
5
+
6
+ module Egree
7
+ module Serializers
8
+ RSpec.describe FormField do
9
+ describe ".serialize" do
10
+ it "returns a json string of the api hash" do
11
+ form_field = double "FormField"
12
+
13
+ expect(FormField).to receive(:to_api_hash).with(form_field).and_return(form_field: "hash")
14
+
15
+ expect(FormField.serialize(form_field)).to eq JSON.pretty_generate(form_field: "hash")
16
+ end
17
+ end
18
+
19
+ specify ".to_api_hash" do
20
+ form_field = Egree::FormField.new "The name", "The Value"
21
+
22
+ expect(FormField.to_api_hash(form_field)).to eq({
23
+ "Name" => "The name",
24
+ "Value" => "The Value"
25
+ })
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+ require "egree/serializers/party"
3
+
4
+ module Egree
5
+ module Serializers
6
+ RSpec.describe Party do
7
+ describe ".serialize" do
8
+ it "returns a json string of the api hash" do
9
+ party = double "Party"
10
+
11
+ expect(Party).to receive(:to_api_hash).with(party).and_return(party: "hash")
12
+
13
+ expect(Party.serialize(party)).to eq JSON.pretty_generate(party: "hash")
14
+ end
15
+ end
16
+
17
+ describe ".to_api_hash" do
18
+ it "creates a hash that matches the api's expected format" do
19
+ party = double("Party", {
20
+ name: "First Last",
21
+ email: "first-last@example.com",
22
+ social_security_number: "1234567890"
23
+ })
24
+
25
+ expect(Party.to_api_hash(party)).to eq({
26
+ "Name" => "First Last",
27
+ "EmailAddress" => "first-last@example.com",
28
+ "SocialSecurityNumber" => "1234567890"
29
+ })
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ require "egree/serializers/reference_id"
4
+ require "egree/reference_id"
5
+
6
+ module Egree
7
+ module Serializers
8
+ RSpec.describe ReferenceId do
9
+ describe ".serialize" do
10
+ it "returns a json string of the api hash" do
11
+ reference_id = double "ReferenceId"
12
+
13
+ expect(ReferenceId).to receive(:to_api_hash).with(reference_id).and_return(reference_id: "value")
14
+
15
+ expect(ReferenceId.serialize(reference_id)).to eq JSON.pretty_generate(reference_id: "value")
16
+ end
17
+ end
18
+
19
+ specify ".to_api_hash" do
20
+ reference_id = Egree::ReferenceId.new 123
21
+
22
+ expect(ReferenceId.to_api_hash(reference_id)).to eq({
23
+ "CaseReferenceId" => "123"
24
+ })
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+ require "egree"
3
+
4
+ RSpec.describe Egree do
5
+ describe ".client" do
6
+ it "creates a Egree::Client" do
7
+ expect(Egree.client("admin", "secret")).to be_kind_of Egree::Client
8
+ end
9
+
10
+ it "passes arguments to the client" do
11
+ client = Egree.client "admin", "secret"
12
+
13
+ expect(client.username).to eq "admin"
14
+ expect(client.password).to eq "secret"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,58 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://<EGREE_USERNAME>:<EGREE_PASSWORD>@test.underskrift.se/apiv1/createcasecommand
6
+ body:
7
+ encoding: UTF-8
8
+ string: |-
9
+ {
10
+ "Name": "Agreement",
11
+ "Documents": [
12
+
13
+ ],
14
+ "Parties": [
15
+
16
+ ],
17
+ "AllowedSignatureTypes": [
18
+ "touch"
19
+ ],
20
+ "CaseReferenceId": "4768be74-f444-498b-a113-ef3e60b969e4"
21
+ }
22
+ headers:
23
+ Accept:
24
+ - application/json
25
+ User-Agent:
26
+ - Faraday v0.9.0
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Accept-Encoding:
30
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
31
+ response:
32
+ status:
33
+ code: 500
34
+ message: E041 At least one signer is required.
35
+ headers:
36
+ Cache-Control:
37
+ - private, s-maxage=0
38
+ Content-Type:
39
+ - text/html; charset=utf-8
40
+ Server:
41
+ - Microsoft-IIS/7.5
42
+ Strict-Transport-Security:
43
+ - max-age=31536000
44
+ Set-Cookie:
45
+ - ASP.NET_SessionId=31ps0gai2zzkk4j3dcfj5is2; path=/; HttpOnly
46
+ X-Aspnet-Version:
47
+ - 4.0.30319
48
+ Date:
49
+ - Fri, 12 Sep 2014 10:06:24 GMT
50
+ Content-Length:
51
+ - '104'
52
+ body:
53
+ encoding: UTF-8
54
+ string: <html><body><h1>500 Internal server error</h1><p>E041 At least one signer
55
+ is required.</p></body></html>
56
+ http_version:
57
+ recorded_at: Fri, 12 Sep 2014 10:06:27 GMT
58
+ recorded_with: VCR 2.9.2
@@ -0,0 +1,67 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://<EGREE_USERNAME>:<EGREE_PASSWORD>@test.underskrift.se/apiv1/createcasecommand
6
+ body:
7
+ encoding: UTF-8
8
+ string: |-
9
+ {
10
+ "Name": "Agreement",
11
+ "Documents": [
12
+ {
13
+ "Filename": "agreement.pdf",
14
+ "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",
15
+ "ContentType": "application/pdf",
16
+ "Size": 6925,
17
+ "FormFields": [
18
+
19
+ ]
20
+ }
21
+ ],
22
+ "Parties": [
23
+ {
24
+ "Name": "First Last",
25
+ "EmailAddress": "name@example.com",
26
+ "SocialSecurityNumber": "4503089239"
27
+ }
28
+ ],
29
+ "AllowedSignatureTypes": [
30
+ "touch"
31
+ ],
32
+ "CaseReferenceId": "6c99f997-6115-4524-af93-791fe4e626dd"
33
+ }
34
+ headers:
35
+ Accept:
36
+ - application/json
37
+ User-Agent:
38
+ - Faraday v0.9.0
39
+ Content-Type:
40
+ - application/json; charset=utf-8
41
+ Accept-Encoding:
42
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
43
+ response:
44
+ status:
45
+ code: 200
46
+ message: OK
47
+ headers:
48
+ Cache-Control:
49
+ - private, s-maxage=0
50
+ Server:
51
+ - Microsoft-IIS/7.5
52
+ Strict-Transport-Security:
53
+ - max-age=31536000
54
+ Set-Cookie:
55
+ - ASP.NET_SessionId=ondwcvli0qi5bildy5olrlvh; path=/; HttpOnly
56
+ X-Aspnet-Version:
57
+ - 4.0.30319
58
+ Date:
59
+ - Fri, 12 Sep 2014 10:06:24 GMT
60
+ Content-Length:
61
+ - '0'
62
+ body:
63
+ encoding: UTF-8
64
+ string: ''
65
+ http_version:
66
+ recorded_at: Fri, 12 Sep 2014 10:06:26 GMT
67
+ recorded_with: VCR 2.9.2