diff --git a/src/main/java/com/hellosign/sdk/resource/TemplateSignatureRequest.java b/src/main/java/com/hellosign/sdk/resource/TemplateSignatureRequest.java index ee5a9008..e8983320 100644 --- a/src/main/java/com/hellosign/sdk/resource/TemplateSignatureRequest.java +++ b/src/main/java/com/hellosign/sdk/resource/TemplateSignatureRequest.java @@ -1,7 +1,11 @@ package com.hellosign.sdk.resource; import com.hellosign.sdk.HelloSignException; +import com.hellosign.sdk.resource.support.Document; +import com.hellosign.sdk.resource.support.FormField; import com.hellosign.sdk.resource.support.Signer; +import org.json.JSONArray; + import java.io.Serializable; import java.util.HashMap; import java.util.List; @@ -23,6 +27,9 @@ public class TemplateSignatureRequest extends AbstractRequest { private static final String TEMPLATE_SIGNERS_NAME = "name"; private static final String TEMPLATE_CCS = "ccs"; private static final String TEMPLATE_CCS_EMAIL = "email_address"; + private static final String TEMPLATE_APPENDED_FILE = "file"; + private static final String TEMPLATE_APPENDED_FILE_URL = "file_url"; + // Signers, CC email addresses and custom fields are required // to have an associated role. We'll manage these in a Map, @@ -255,6 +262,17 @@ public Map getPostFields() throws HelloSignException { if (hasMessage()) { fields.put(REQUEST_MESSAGE, getMessage()); } + + List docs = getDocuments(); + for (int i = 0; i < docs.size(); i++) { + Document d = docs.get(i); + fields.put(TEMPLATE_APPENDED_FILE + "[" + i + "]", d.getFile()); + } + List fileUrls = getFileUrls(); + for (int i = 0; i < fileUrls.size(); i++) { + fields.put(TEMPLATE_APPENDED_FILE_URL + "[" + i + "]", fileUrls.get(i)); + } + if (hasRedirectUrl()) { fields.put(REQUEST_REDIRECT_URL, getRedirectUrl()); } diff --git a/src/test/java/com/hellosign/sdk/HelloSignClientTest.java b/src/test/java/com/hellosign/sdk/HelloSignClientTest.java index 84b5bd5f..d628562b 100644 --- a/src/test/java/com/hellosign/sdk/HelloSignClientTest.java +++ b/src/test/java/com/hellosign/sdk/HelloSignClientTest.java @@ -102,14 +102,6 @@ protected String getTestFileAsString(String name) throws FileNotFoundException { return result; } - protected File getTestFixture(String name) { - String path = System.getProperty("file.separator") + this.getClass().getSimpleName() - + System.getProperty("file.separator") + "Fixtures" + System - .getProperty("file.separator") + name; - URL resource = this.getClass().getResource(path); - return new File(resource.getFile()); - } - protected void mockResponseCode(int code) { doReturn(code).when(spy).getLastResponseCode(); } @@ -997,7 +989,7 @@ public void testSignatureRequestWithFormFields() Document nda = new Document(); - File file = this.getTestFixture("W9.pdf"); + File file = TestUtils.getTestFixture(getClass(), "W9.pdf"); nda.setFile(file); FormField text = new FormField(); diff --git a/src/test/java/com/hellosign/sdk/PostFieldsTest.java b/src/test/java/com/hellosign/sdk/PostFieldsTest.java index d64486d2..6ebc72cc 100644 --- a/src/test/java/com/hellosign/sdk/PostFieldsTest.java +++ b/src/test/java/com/hellosign/sdk/PostFieldsTest.java @@ -1,12 +1,11 @@ package com.hellosign.sdk; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static com.hellosign.sdk.TestUtils.getTestFixture; +import static org.junit.Assert.*; -import com.hellosign.sdk.resource.EmbeddedRequest; -import com.hellosign.sdk.resource.SignatureRequest; -import com.hellosign.sdk.resource.TemplateDraft; -import com.hellosign.sdk.resource.UnclaimedDraft; +import com.hellosign.sdk.resource.*; + +import java.io.File; import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -63,6 +62,49 @@ public void testEmbeddedSignatureRequest() throws Exception { assertEquals("http://www.orimi.com/pdf-test.pdf", postFields.get("file_url[0]")); } + @Test + public void testEmbeddedTemplateSignatureRequestWithFiles() throws Exception { + TemplateSignatureRequest req = new TemplateSignatureRequest(); + req.addFile(getTestFixture(getClass(), "Sample1.pdf")); + req.addFile(getTestFixture(getClass(), "Sample2.pdf")); + req.setSigner("Role A", "ted@example.com", "Ted Example"); + req.setTestMode(true); + req.addMetadata("test_key", "test_value"); + + EmbeddedRequest embeddedReq = new EmbeddedRequest("034fb51064187cf28e4aad1c2533ad8f", req); + + Map postFields = embeddedReq.getPostFields(); + assertEquals("ted@example.com", postFields.get("signers[Role A][email_address]")); + assertEquals("Ted Example", postFields.get("signers[Role A][name]")); + assertEquals("test_value", postFields.get("metadata[test_key]")); + assertEquals(true, postFields.get("test_mode")); + assertEquals("034fb51064187cf28e4aad1c2533ad8f", postFields.get("client_id")); + assertTrue(((File) postFields.get("file[0]")).getName().contentEquals("Sample1.pdf")); + assertTrue(((File) postFields.get("file[1]")).getName().contentEquals("Sample2.pdf")); + } + + + @Test + public void testEmbeddedTemplateSignatureRequestWithFileUrls() throws Exception { + TemplateSignatureRequest req = new TemplateSignatureRequest(); + req.addFileUrl("http://www.orimi.com/pdf-test.pdf"); + req.addFileUrl("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"); + req.setSigner("Role A", "ted@example.com", "Ted Example"); + req.setTestMode(true); + req.addMetadata("test_key", "test_value"); + + EmbeddedRequest embeddedReq = new EmbeddedRequest("034fb51064187cf28e4aad1c2533ad8f", req); + + Map postFields = embeddedReq.getPostFields(); + assertEquals("ted@example.com", postFields.get("signers[Role A][email_address]")); + assertEquals("Ted Example", postFields.get("signers[Role A][name]")); + assertEquals("test_value", postFields.get("metadata[test_key]")); + assertEquals(true, postFields.get("test_mode")); + assertEquals("034fb51064187cf28e4aad1c2533ad8f", postFields.get("client_id")); + assertEquals(postFields.get("file_url[0]"), "http://www.orimi.com/pdf-test.pdf"); + assertEquals(postFields.get("file_url[1]"), "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"); + } + @Test public void testCustomFieldsOnEmbeddedRequest() throws Exception { SignatureRequest req = new SignatureRequest(); diff --git a/src/test/java/com/hellosign/sdk/TestUtils.java b/src/test/java/com/hellosign/sdk/TestUtils.java new file mode 100644 index 00000000..4ede01fb --- /dev/null +++ b/src/test/java/com/hellosign/sdk/TestUtils.java @@ -0,0 +1,15 @@ +package com.hellosign.sdk; + +import java.io.File; +import java.net.URL; + +public class TestUtils { + + public static File getTestFixture(Class testClass, String name) { + String path = System.getProperty("file.separator") + testClass.getSimpleName() + + System.getProperty("file.separator") + "Fixtures" + System + .getProperty("file.separator") + name; + URL resource = testClass.getResource(path); + return new File(resource.getFile()); + } +} diff --git a/src/test/resources/PostFieldsTest/Fixtures/Sample1.pdf b/src/test/resources/PostFieldsTest/Fixtures/Sample1.pdf new file mode 100644 index 00000000..c2904684 Binary files /dev/null and b/src/test/resources/PostFieldsTest/Fixtures/Sample1.pdf differ diff --git a/src/test/resources/PostFieldsTest/Fixtures/Sample2.pdf b/src/test/resources/PostFieldsTest/Fixtures/Sample2.pdf new file mode 100644 index 00000000..c2904684 Binary files /dev/null and b/src/test/resources/PostFieldsTest/Fixtures/Sample2.pdf differ