egree 0.0.1

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.
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\nG+FbamrXkB3tsp0iMHZ53ZKR/rijxCfULnp8xD9cIt6zYlFtFWG6nB8TGLuy\nbvUanQUn+YfbV66qGtFnIQBjeoq64enhxpiGDhlBi2SDTHgUDCCBArvACcAX\nGNOBA6Ob0jBmzj32qvywY+o1SDfpw95ck5yvEac2/fGlGy1DjHeZ7ic21ql1\n0DhjrRhFOZ++0TIcz7t0S1rPV5clCqbMw1ITcx/YXs5npDE3dAASbAKZuUAQ\nHa9DJwWETNVpRYcO2E0Su07HHfjdbD7Dz+KggWQ28BO0Qh5Bi27PrGuZwE4S\no04bdB2u07IuR10i6RIWDAsUAoca8KbAGwIH8/DPnfhlA14faOPXBV7vlgeu\nhflAGw40ydeuZvBrYbwWlK9m4J++yOF/GsQvcvCPAq8I/EMefu7C33dgP4XY\nL7A/Onw6OCz/bjZ+1lfJP+vAvkr8H4Gf/jaVfyrwt6n4icCPH8WPBP6mEy//\nOplfHsRfJ+OHHfgrgb8UeOmim18SeNGNFzrwg/Nu/oHA81us/Lwb32/Ac1Ow\nl5jeKXhW4Jn3LPyMwPcseFrguwLfaVX5O2n43wn4tsBTHdiz2c97BP5C4FsN\neFLgzwX+TOCbu+P4CYHHBb4h8L8EdpO9bhe+bsOuY528S+Cxo+X8WCcea5KP\ndvr50XI8GpQ7/XhE4OEOjLbP4K8JPETo0CD+lGwdFPiTSjxQiT+2Y8SJ/ynw\nVREcwv8Q+IrAf3fifoEvv2TnL+fhS3b80Ysq/9FYfFHFF/YF+AsNuC+A/ybw\neYH/KnDvc8l8byU+90OFP5eMP1TwBxbcI/BZcvKswN1xuGtnNt8lcGc2PkP+\nn+nAjh2dvEPgDlpbOzpxR5O8faufby/H7UH5+wL/ReA24rd14lY/tlMx2mfg\n05Tt0y7cYsU2ErRV4mYq2mY/tqrYInCTwKcEfq9Z5d8T2KziPwvcKPC7aiH/\n7nz8J4FNj2PjhgbeKHBDAzaMxicF1tvxCYHrBD4mcO0aG1/rwLVRBsEL8hob\nrumWVztxdVBeJfA7AlcKrFsxn9d14IrasXzFfKwdi8sFPpqHywQuzcOaQXyk\nE6sFVgmsFLhk8Wi+ROBiUPji0bhIYIXAhwU+tNDKH7JjeSV++yQ+SMyDLlxo\nRVrRIRcuEPiAwPtTk/n9eXifwPkC5wm8twHLBN7jwrkC72YBfrfAb3XinLF4\nV2kSv2syls508tIkLClO4iUCZxM3uxJnETerE4uTsIgERZNxZqHKZzpxZlQK\nBs1y4QwHL1SxMCoBcTOCdj7DgTOirJu44HQbD9oxGGVNxE23mfl0G06PsmCw\nUp4m8E4K4c5BnCrwjrE4RWABFbigEm+fkMJvn4OTBU4KuPgkgRPn4G25Kfy2\nOZhPKF9gHinmCZxA3RNSMDcFc4jKScJscwLP7sRAVjwPuDAQlTS3WYrKs+Ix\nSwu3Q84c7+eZAseT5ng/jpOm8HECxwq8VWCGA/0JhdxfjLc40CdwjMPBxwj0\negLc24CeAKbPwdHkebTAUQLTqLZpAlNpVlKTMUVgssAkgYlkIXEWJrgDPKEQ\n3S6FuwPoUjCe9OJd6KTxToEqZa4WokIeFBWVWO0cdht3ONARq509zsLtNrTH\nahdHtYuzYBzV7qBsM6NNW1uTZatAC2ViEWhOQJOCRoEGMm0QyF2IlBwOokQC\naQoyCoAFEBRkUVbZvIVl/v+54B88Ffp0RqFHb/vZNsLaPiIKT0mN9JX+6o7C\ncdKRdL0o62Et7AjRL9Leogc2whfMgj9nk4nqorEh2UvSdtijj27HT2EtHoUz\n8BZcJOpTVoA0lp0BL/uQ/LR87UPCLuKOE6zHLgyxdFYL+9irZLEeoqwOGiXC\n0jyy/LZ8mqRvw1N0fx/2QR3RWgYbKf5fwkHYDFdhp9QHC4k+Am9SPII+v3ou\nrBcGyNJ+6U6pmvTeJGu7YTfbCL2wWgb6lAu4zHulTLJ6kDIAWAx7eC/fqdWD\ncC+/Qj0AowxRg8vooyy02r3IjrIJ0lw4Q+Pr4T78Nn4HL7Jm2Sevwz5olwAr\nYBm8w3sNLmg3+qDdUM3WyxX6XU/W6qV1cgXbD31kczF+SbyXItujZwxwUJrH\n5/K5lHM1yfbosD0GDQq8jYNU922SYCXyLJxO+dTL34Kd8DzZvZUqA1CHE8l7\nHdTzLbEb9tMd4FuwgyqqV4PlS3fCHqmabaZoB6iadVgEk8nHKP45NLODFDcY\nG2A17wUgcjzAa0YDl+nxhiyPEpH8pZWR4L0hz8mwN5D1DdajGD0RKIvErfdE\nh4fLQnIqD0d4WgT9pojs913+W52XA1lzykKeKEssLhoxW1xRRML5IfJAP01M\n7opJFhOURriffqUVEc+SGk+r0uqb0qpUTQnQ/i9rDoGy0I8ZezocZcPNUSga\ndZh2kfjwQ9RtzvJ4ipcWRVgFMZYsEoz3EmXN8syiMGfNC/nCnlZPa2llq2eW\np2ZRJcWtY+qoag3nUAbzQ0sJ3hfyRoLh1K/JqnBY827T7NAQUm8Nk4VlIxYI\n66KcIVKKy5rjiWBGWejeUKSpKDUSLAqner2e4kh3WSjSXZTqDYdJy/51pBRx\nw9KkkZgdFLN9PPUrMStUomBqBMKtrZrN+SGfN9LU2praSnmM8FHo/oaAwTcF\nwRFBFDQbVIli+h6UkTFCPm+qJvB5fV6KM1xEvlVtaoopUm84QLtxqNGeUvk0\nPQenoYVa/Ui7EuPZMsLaFdv700GEzgVHiPdA6P/s4XXFESD9NfN30vh36n1T\nTaazyV9fBp0x6vB/zyBmnc+ADAjSoeIkc7FCtoH9TFpOcglqRIdcw/fRqc4I\n6Uf1MweAgbkOMRPfKMmQc+Js/wRQzvaf7c+NV72q36t6a2S4uRpTb34iOoz2\nL79YZRinuWCsmQx+wraTrUTtVHNEL5Q1k+rGyJM1M3cCo9GsmVWIvWy7oAAY\nvVNBLqEn1wr3aGNoPebQcqNmU6IA71Ijml0iGfGcsEzNSHJGvPldesNpCjI1\nAzVLzhHybtJ9xedTuPmqj6CvpUca19Mz9H4P7x06IU0dzJT+MKTq+dcPfyQ7\n6Q2iQBrkBlM4uFLa7K420y57F3sWE2UwSLNVp7VklHK1/2Z/Xt4EyOn/+Gq/\n8rlaUJDLNPsT7cw3RlIVZ35eAnMl5OdNmnhbhm+MARdGo9m7Knv6PvtF1W7h\n2NTcvHlzc/MmPC3N/HP/lvkL2B3MzVQ2eYGwnrtw6WzvxQvafGjxVMj14KZ4\n8mNV1I6jVqqMRBmnUeZpOVRRA8SR8AjEQ7KO076qsNvrNmhBTHZTXB5QFcjP\ncxqzKUaDUa64+ZHp9VdD3bVLjz8obogLzHPl3PWIbdum5ldMUttCwycnby94\nLTOTFbB4ZmNB8atn1rwcWaHN0xWap4WGFPJ6ayyqOHoktKi0eTFfooi01ahF\nFAcWwjTXrgTK0DcmY6LqneiV3nkw/H7fCz8VH7AP2Y4nNzx75g28tlVbNxK0\nUM4llLMVEsEXjDe0OaHN1uXclWR2OorQ6Z6WpBeflqFe+Vw2xuD+qtC35jlV\nRYpNgFTTtnVr25atW7f0XR/4rG9gAD+8cK734sXecxf2iPfEb8RlcYYF6NM9\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