UNPKG

boldsign

Version:

NodeJS client for boldsign

1,093 lines (1,091 loc) 65.3 kB
import { TemplateApi } from '../../api/templateApi'; import { BrandingApi } from '../../api/brandingApi'; import { CreateTemplateRequest, DocumentCC, EditTemplateRequest, EmbeddedCreateTemplateRequest, EmbeddedSendTemplateFormRequest, EmbeddedTemplateEditRequest, FormField, ImageInfo, MergeAndSendForSignForm, PhoneNumber, Rectangle, ReminderSettings, Role, SendForSignFromTemplateForm, TemplateRole, TemplateTag, EmbeddedMergeTemplateFormRequest, AuthenticationSettings } from '../../model'; import * as fs from 'fs'; import config from '../config'; describe('Template API Test suite', () => { let brandingApi; let templateApi; let brandId; let createdTemplateId; let createdTemplateId1; let createdTemplateId2; let createdTemplateId3; let createdTemplateId4; beforeAll(() => { brandId = null; createdTemplateId = null; createdTemplateId1 = null; createdTemplateId2 = null; createdTemplateId3 = null; createdTemplateId4 =null; const apiKey = config.apiKey; const baseUrl = config.baseUrl; if (!baseUrl || !apiKey) { throw new Error("Environment variables 'HOST_URL' or 'API_KEY' are not set."); } templateApi = new TemplateApi(baseUrl); templateApi.setApiKey(apiKey); brandingApi = new BrandingApi(baseUrl); brandingApi.setApiKey(apiKey); }); test('Test1:should create a brand successfully', async () => { const brandName = "NodeSDK"; const brandLogo = fs.createReadStream("tests/documents/logo.jpg"); try { const createBrandApiResponse = await brandingApi.createBrand(brandName, brandLogo); console.log("Brand created successfully:", createBrandApiResponse.brandId); brandId = createBrandApiResponse.brandId; expect(createBrandApiResponse).toBeDefined(); } catch (error) { console.log("Error occurred while creating the brand:", error); expect(error).toBeUndefined(); } }, 20000); test('Test2: should create a template successfully with signer and signer email', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 100; bounds.width = 150; bounds.height = 50; signatureField.bounds = bounds; const role = new TemplateRole(); role.index = 1; role.name = "Signer"; role.defaultSignerName = "John Doe"; role.defaultSignerEmail = "johndoe@example.com"; role.signerOrder = 1; role.signerType = TemplateRole.SignerTypeEnum.Signer; role.formFields = [signatureField]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = "Testing node sdk"; createTemplateRequest.description = "Testing integration test case"; createTemplateRequest.documentTitle = "Node sdk test case"; createTemplateRequest.documentMessage = "Please check and sign"; createTemplateRequest.roles = [role]; createTemplateRequest.enableReassign = true; createTemplateRequest.enableSigningOrder = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.allowNewFiles = true; const documentFile = fs.createReadStream("tests/documents/agreement.pdf"); createTemplateRequest.files = [documentFile]; try { const response = await templateApi.createTemplate(createTemplateRequest); console.log("Template created successfully:", response); createdTemplateId = response.templateId; console.log("Created Template ID: ", createdTemplateId); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test3:Create template with existing brand ID', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; signatureField.bounds = { x: 50, y: 100, width: 150, height: 50 }; const role = new TemplateRole(); role.index = 1; role.name = "Signer"; role.defaultSignerName = "John Doe"; role.defaultSignerEmail = "johndoe@example.com"; role.signerOrder = 1; role.signerType = TemplateRole.SignerTypeEnum.Signer; role.formFields = [signatureField]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = "Template with Brand"; createTemplateRequest.description = "Created with brand ID"; createTemplateRequest.documentTitle = "Brand Template"; createTemplateRequest.documentMessage = "Please sign this"; createTemplateRequest.roles = [role]; createTemplateRequest.enableReassign = true; createTemplateRequest.enableSigningOrder = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.allowNewFiles = true; createTemplateRequest.brandId = brandId; createTemplateRequest.files = [fs.createReadStream("tests/documents/agreement.pdf")]; try { const response = await templateApi.createTemplate(createTemplateRequest); console.log("Template created:", response.templateId); } catch (error: any) { console.error("Error creating template:", error); expect(error).toBeUndefined(); } }, 20000); test('Test4: should create a template with form field', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 100; bounds.width = 100; bounds.height = 60; signatureField.bounds = bounds; const formFields = [signatureField]; const templateRole = new TemplateRole(); templateRole.index = 1; templateRole.name = "Hr"; templateRole.defaultSignerName = "Divya"; templateRole.defaultSignerEmail = "divya.boopathy+8@syncfusion.com"; templateRole.signerOrder = 1; templateRole.signerType = TemplateRole.SignerTypeEnum.Signer; templateRole.locale = TemplateRole.LocaleEnum.En; templateRole.formFields = formFields; templateRole.allowRoleEdit = true; templateRole.allowRoleDelete = true; const roles = [templateRole]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.enableReassign = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.enablePrintAndSign = false; createTemplateRequest.documentMessage = "document message for signers"; createTemplateRequest.enableSigningOrder = false; createTemplateRequest.useTextTags = false; createTemplateRequest.title = "title of the template"; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.description = "testingDescription"; createTemplateRequest.documentTitle = "title of the document"; createTemplateRequest.allowNewFiles = true; createTemplateRequest.roles = roles; const documentFile = fs.createReadStream("tests/documents/agreement.pdf"); createTemplateRequest.files = [documentFile]; try { const response = await templateApi.createTemplate(createTemplateRequest); console.log("Template created successfully:", response); createdTemplateId1 = response.templateId; console.log("Created Template ID:", createdTemplateId1); expect(response).toBeDefined(); } catch (error:any) { console.error("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test5: should create a template with multiple roles successfully', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 100; bounds.width = 100; bounds.height = 60; signatureField.bounds = bounds; const formFields = [signatureField]; const roles: TemplateRole[] = []; for (let i = 1; i <= 15; i++) { const templateRole = new TemplateRole(); templateRole.index = i; templateRole.name = `Role ${i}`; templateRole.signerOrder = i; templateRole.signerType = TemplateRole.SignerTypeEnum.Signer; templateRole.locale = TemplateRole.LocaleEnum.En; templateRole.formFields = formFields; templateRole.allowRoleEdit = true; templateRole.allowRoleDelete = true; roles.push(templateRole); } const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.enableReassign = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.enablePrintAndSign = false; createTemplateRequest.documentMessage = "document message for signers"; createTemplateRequest.enableSigningOrder = true; createTemplateRequest.useTextTags = false; createTemplateRequest.title = "Template with 15 Roles"; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.description = "This is a template with 15 roles."; createTemplateRequest.documentTitle = "Multi-role template"; createTemplateRequest.allowNewFiles = true; createTemplateRequest.roles = roles; const documentFile = fs.createReadStream("tests/documents/agreement.pdf"); createTemplateRequest.files = [documentFile]; try { const response = await templateApi.createTemplate(createTemplateRequest); console.log("Template created successfully:", response); createdTemplateId2 = response.templateId; console.log("Created Template ID:", createdTemplateId2); expect(response).toBeDefined(); } catch (error:any) { console.error("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test6: should create a template with multiple files successfully', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 100; bounds.width = 100; bounds.height = 60; signatureField.bounds = bounds; const formFields = [signatureField]; const templateRole = new TemplateRole(); templateRole.index = 1; templateRole.name = "Hr"; templateRole.defaultSignerName = "Divya"; templateRole.defaultSignerEmail = "divya.boopathy+25@syncfusion.com"; templateRole.signerOrder = 1; templateRole.signerType = TemplateRole.SignerTypeEnum.Signer; templateRole.locale = TemplateRole.LocaleEnum.En; templateRole.formFields = formFields; templateRole.allowRoleEdit = true; templateRole.allowRoleDelete = true; const roles = [templateRole]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.enableReassign = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.enablePrintAndSign = false; createTemplateRequest.documentMessage = "document message for signers"; createTemplateRequest.enableSigningOrder = false; createTemplateRequest.useTextTags = false; createTemplateRequest.title = "title of the template"; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.description = "testingDescription"; createTemplateRequest.documentTitle = "title of the document"; createTemplateRequest.allowNewFiles = true; createTemplateRequest.roles = roles; const files = [ fs.createReadStream("tests/documents/agreement.pdf"), fs.createReadStream("tests/documents/agreement.pdf"), fs.createReadStream("tests/documents/agreement.pdf") ]; createTemplateRequest.files = files; try { const response = await templateApi.createTemplate(createTemplateRequest); console.log("Template created successfully:", response); createdTemplateId3 = response.templateId; console.log("Created Template ID:", createdTemplateId3); expect(response).toBeDefined(); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test7: should create a template with image form field successfully', async () => { const imageField = new FormField(); imageField.name = "image"; imageField.id = "Image1"; imageField.fieldType = FormField.FieldTypeEnum.Image; imageField.font = FormField.FontEnum.Helvetica; imageField.pageNumber = 1; imageField.isRequired = true; imageField.imageInfo = new ImageInfo(); imageField.imageInfo.title = "Image Test"; imageField.imageInfo.allowedFileExtensions = ".png"; imageField.imageInfo.description = "Image for testing"; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 50; bounds.width = 100; bounds.height = 150; imageField.bounds = bounds; const role = new TemplateRole(); role.index = 1; role.name = "Signer"; role.signerType = TemplateRole.SignerTypeEnum.Signer; role.defaultSignerEmail = "john.doe@example.com"; role.defaultSignerName = "John Doe"; role.signerOrder = 1; role.formFields = [imageField]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = "New Template"; createTemplateRequest.documentTitle = "node_test_template_with_image_field"; createTemplateRequest.description = "This is a new template."; createTemplateRequest.files = [fs.createReadStream("tests/documents/agreement.pdf")]; createTemplateRequest.roles = [role]; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.allowNewFiles = true; createTemplateRequest.enableReassign = true; createTemplateRequest.enablePrintAndSign = false; createTemplateRequest.enableSigningOrder = true; try { const response = await templateApi.createTemplate(createTemplateRequest); console.log("Template with image field created successfully:", response); createdTemplateId4 = response.templateId; console.log("Created Template ID (Image Field):", createdTemplateId4); } catch (error: any) { console.error("Error occurred while creating template with image field:", error); expect(error).toBeUndefined(); } }, 20000); test('Test8: should fail to create a template with duplicate role index', async () => { const role1 = new TemplateRole(); role1.index = 1; role1.name = "Signer1"; role1.signerType = TemplateRole.SignerTypeEnum.Signer; role1.signerOrder = 1; role1.locale = TemplateRole.LocaleEnum.En; role1.imposeAuthentication = TemplateRole.ImposeAuthenticationEnum.EmailOtp; role1.deliveryMode = TemplateRole.DeliveryModeEnum.Email; role1.allowFieldConfiguration = true; role1.allowRoleEdit = true; role1.allowRoleDelete = true; const role2 = new TemplateRole(); role2.index = 2; role2.name = "Reviewer1"; role2.signerType = TemplateRole.SignerTypeEnum.Reviewer; role2.signerOrder = 2; role2.locale = TemplateRole.LocaleEnum.En; role2.imposeAuthentication = TemplateRole.ImposeAuthenticationEnum.None; role2.deliveryMode = TemplateRole.DeliveryModeEnum.Email; role2.allowFieldConfiguration = false; role2.allowRoleEdit = true; role2.allowRoleDelete = true; const role3 = new TemplateRole(); role3.index = 2; role3.name = "InPersonSigner1"; role3.signerType = TemplateRole.SignerTypeEnum.Reviewer; role3.signerOrder = 3; role3.locale = TemplateRole.LocaleEnum.En; role3.imposeAuthentication = TemplateRole.ImposeAuthenticationEnum.AccessCode; role3.deliveryMode = TemplateRole.DeliveryModeEnum.Email; role3.allowFieldConfiguration = false; role3.allowRoleEdit = true; role3.allowRoleDelete = true; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = "Duplicate Role Index Test"; createTemplateRequest.documentTitle = "node_test_template_duplicate_index"; createTemplateRequest.description = "Template with duplicate role index."; createTemplateRequest.files = [ fs.createReadStream("tests/documents/agreement.pdf"), fs.createReadStream("tests/documents/agreement.pdf") ]; createTemplateRequest.roles = [role1, role2, role3]; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.allowNewFiles = true; createTemplateRequest.enableReassign = true; createTemplateRequest.enablePrintAndSign = false; createTemplateRequest.enableSigningOrder = true; try { const response = await templateApi.createTemplate(createTemplateRequest); console.error("Unexpected success, test should have failed due to duplicate role index.", response.body); throw new Error("Test failed: Expected error due to duplicate role index."); } catch (error: any) { console.log("Expected error occurred due to duplicate role index:", error.response?.data || error.message); expect(error.response?.status).toBe(400); expect(error.response?.statusText).toBe("Bad Request"); } }, 20000); test('Test9: should fail to create template due to missing document title', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; signatureField.bounds = { x: 50, y: 100, width: 150, height: 50 }; const role = new TemplateRole(); role.index = 1; role.name = "Signer"; role.defaultSignerName = "John Doe"; role.defaultSignerEmail = "johndoe@example.com"; role.signerOrder = 1; role.signerType = TemplateRole.SignerTypeEnum.Signer; role.formFields = [signatureField]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = "Missing Document Title Test"; createTemplateRequest.description = "Should fail due to missing document title"; createTemplateRequest.documentMessage = "Please check and sign"; createTemplateRequest.roles = [role]; createTemplateRequest.files = [fs.createReadStream("tests/documents/agreement.pdf")]; try { await templateApi.createTemplate(createTemplateRequest); throw new Error("Test failed: API should have thrown an error due to missing document title."); } catch (error: any) { console.log("Expected error received:", error.response?.data || error.message); expect(error.response).toBeDefined(); expect(error.response?.status).toBe(400); expect(error.response.statusText).toBe("Bad Request"); } }, 20000); test('Test10: should fail to create template due to empty roles array', async () => { const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = "Template without roles"; createTemplateRequest.description = "This template should fail due to no roles"; createTemplateRequest.documentTitle = "Missing roles test case"; createTemplateRequest.documentMessage = "Please check and sign"; createTemplateRequest.roles = []; const documentFile = fs.createReadStream("tests/documents/agreement.pdf"); createTemplateRequest.files = [documentFile]; try { await templateApi.createTemplate(createTemplateRequest); throw new Error("Test failed: API should have thrown an error due to empty roles."); } catch (error: any) { console.log("Expected error for empty roles array:", error.response?.data || error.message); expect(error.response).toBeDefined(); expect(error.response?.status).toBe(400); expect(error.response.statusText).toBe("Bad Request"); } }, 20000); test('Test11: should fail to create a template with empty title', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 100; bounds.width = 150; bounds.height = 50; signatureField.bounds = bounds; const role = new TemplateRole(); role.index = 1; role.name = "Signer"; role.defaultSignerName = "John Doe"; role.defaultSignerEmail = "johndoe@example.com"; role.signerOrder = 1; role.signerType = TemplateRole.SignerTypeEnum.Signer; role.formFields = [signatureField]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.title = ""; createTemplateRequest.description = "Testing integration test case"; createTemplateRequest.documentTitle = "Node sdk test case"; createTemplateRequest.documentMessage = "Please check and sign"; createTemplateRequest.roles = [role]; createTemplateRequest.enableReassign = true; createTemplateRequest.enableSigningOrder = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.allowNewFiles = true; const documentFile = fs.createReadStream("tests/documents/agreement.pdf"); createTemplateRequest.files = [documentFile]; try { await templateApi.createTemplate(createTemplateRequest); throw new Error("Test failed: API should have thrown an error due to empty title."); } catch (error: any) { console.log("Expected error for empty title:", error.response?.data || error.message); expect(error.response).toBeDefined(); expect(error.response?.status).toBe(400); expect(error.response.statusText).toBe("Bad Request"); } }, 20000); test('Test12: should fail to create a template with form field invalid signer email', async () => { const signatureField = new FormField(); signatureField.fieldType = FormField.FieldTypeEnum.Signature; signatureField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 50; bounds.y = 100; bounds.width = 100; bounds.height = 60; signatureField.bounds = bounds; const formFields = [signatureField]; const templateRole = new TemplateRole(); templateRole.index = 1; templateRole.name = "Hr"; templateRole.defaultSignerName = "Divya"; templateRole.defaultSignerEmail = "invalid-email"; templateRole.signerOrder = 1; templateRole.signerType = TemplateRole.SignerTypeEnum.Signer; templateRole.locale = TemplateRole.LocaleEnum.En; templateRole.formFields = formFields; templateRole.allowRoleEdit = true; templateRole.allowRoleDelete = true; const roles = [templateRole]; const createTemplateRequest = new CreateTemplateRequest(); createTemplateRequest.enableReassign = true; createTemplateRequest.allowNewRoles = true; createTemplateRequest.enablePrintAndSign = false; createTemplateRequest.documentMessage = "document message for signers"; createTemplateRequest.enableSigningOrder = false; createTemplateRequest.useTextTags = false; createTemplateRequest.title = "title of the template"; createTemplateRequest.allowMessageEditing = true; createTemplateRequest.description = "testingDescription"; createTemplateRequest.documentTitle = "title of the document"; createTemplateRequest.allowNewFiles = true; createTemplateRequest.roles = roles; const documentFile = fs.createReadStream("tests/documents/agreement.pdf"); createTemplateRequest.files = [documentFile]; try { const response = await templateApi.createTemplate(createTemplateRequest); console.error("Unexpected success:", response); throw new Error("Template creation should have failed due to invalid email"); } catch (error: any) { console.log("Expected error for invalid email:", error.response?.data || error.message); expect(error.response).toBeDefined(); expect(error.response.status).toBe(400); expect(error.response.statusText).toBe("Bad Request"); } }, 20000); test('Test13:should edit a template successfully', async () => { const editTemplateRequest = new EditTemplateRequest(); editTemplateRequest.title = "Updated NodesdkTesting"; editTemplateRequest.description = "Updated description for the template"; editTemplateRequest.documentMessage = "Updated document message for signers"; editTemplateRequest.enableReassign = true; try { const response = await templateApi.editTemplate(createdTemplateId, editTemplateRequest); console.log("Template edited successfully:", response); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test14:should fail to edit a template with invalid template ID', async () => { const editTemplateRequest = new EditTemplateRequest(); editTemplateRequest.title = "Updated NodesdkTesting"; editTemplateRequest.description = "Updated description for the template"; editTemplateRequest.documentMessage = "Updated document message for signers"; editTemplateRequest.enableReassign = true; const invalidTemplateId = "invalid-template-id"; try { const response = await templateApi.editTemplate(invalidTemplateId, editTemplateRequest); console.error("Unexpected success response:", response); throw new Error("Test failed, template edit should not succeed with invalid template ID"); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); } }, 20000); test('Test15: should fail to edit a template with empty title', async () => { const editTemplateRequest = new EditTemplateRequest(); editTemplateRequest.title = ""; editTemplateRequest.description = "Updated description for the template"; editTemplateRequest.documentMessage = "Updated document message for signers"; editTemplateRequest.enableReassign = true; const validTemplateId = "valid-template-id"; try { const response = await templateApi.editTemplate(validTemplateId, editTemplateRequest); console.error("Unexpected success response:", response); throw new Error("Test failed, template edit should not succeed with empty title"); } catch (error: any) { console.log("Expected error occurred for empty title:", error.response?.data || error.message); expect(error.response).toBeDefined(); expect(error.response.status).toBe(403); expect(error.response.statusText).toBe("Forbidden"); } }, 20000); test('Test16:should add tag to template successfully', async () => { const addTag = new TemplateTag(); addTag.templateId = createdTemplateId; addTag.documentLabels = ["test", "api"]; addTag.templateLabels = ["test", "api"]; try { const response = await templateApi.addTag(addTag); console.log("Tag added successfully:", response); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } },20000); test('Test17: should fail to add tag to template with invalid template ID', async () => { const addTag = new TemplateTag(); addTag.templateId = "INVALID_TEMPLATE_ID"; addTag.documentLabels = ["test", "api"]; addTag.templateLabels = ["test", "api"]; try { const response = await templateApi.addTag(addTag); console.error("Unexpected success response:", response); throw new Error("Test failed, tag should not have been added with invalid template ID"); } catch (error: any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeDefined(); } },20000); test('Test18: should fail to add tag to template with empty document labels and template labels', async () => { const addTag = new TemplateTag(); addTag.templateId = createdTemplateId; addTag.documentLabels = []; addTag.templateLabels = []; try { const response = await templateApi.addTag(addTag); console.error("Unexpected success response:", response); throw new Error("Test failed, tag should not have been added with empty document labels and template labels"); } catch (error: any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeDefined(); } },20000); test('Test19: should delete tag from template successfully', async () => { const deleteTag = new TemplateTag(); deleteTag.templateId = createdTemplateId; deleteTag.documentLabels = ["test", "api"]; deleteTag.templateLabels = ["test", "api"]; try { const response = await templateApi.deleteTag(deleteTag); console.log("Tag deleted successfully:", response); } catch (error:any) { console.error("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } },20000); test('Test20: should fail to delete tag from template with invalid template ID', async () => { const deleteTag = new TemplateTag(); deleteTag.templateId = "INVALID_TEMPLATE_ID"; deleteTag.documentLabels = ["test", "api"]; deleteTag.templateLabels = ["test", "api"]; try { const response = await templateApi.deleteTag(deleteTag); console.error("Unexpected success response:", response); throw new Error("Test failed, tag should not have been deleted with invalid template ID"); } catch (error: any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeDefined(); } },20000); test('Test21: should fail to delete tag from template with valid template ID and empty labels', async () => { const deleteTag = new TemplateTag(); deleteTag.templateId = createdTemplateId; deleteTag.documentLabels = []; deleteTag.templateLabels = []; try { const response = await templateApi.deleteTag(deleteTag); console.error("Unexpected success response:", response); throw new Error("Test failed, tag should not have been deleted with empty labels"); } catch (error: any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeDefined(); } },20000); test('Test22: should retrieve template properties successfully', async () => { try { const response = await templateApi.getProperties(createdTemplateId); console.log("Template Properties:", response); expect(response).toBeDefined(); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } },20000); test('Test23: should fail to retrieve template properties with invalid template ID', async () => { const invalidTemplateId = "INVALID_TEMPLATE_ID"; try { const response = await templateApi.getProperties(invalidTemplateId); console.error("Unexpected success response:", response); throw new Error("Test failed, API should have thrown an error for invalid template ID"); } catch (error: any) { console.log("Error occurred while calling the API:", error.message); } },20000); test('Test24: should fail to retrieve template properties with empty template', async () => { const templateId = ""; try { const response = await templateApi.getProperties(templateId); console.error("Unexpected success response:", response); throw new Error("Test failed, API should have thrown an error for invalid template ID"); } catch (error: any) { console.log("Error occurred while calling the API:", error); expect(error.response.status).toBe(400); expect(error.response.statusText).toBe("Bad Request"); } },20000); test('Test25:should download template successfully', async () => { try { console.log("Created Template ID:", createdTemplateId1); const response = await templateApi.download(createdTemplateId); console.log("Template downloaded successfully:", response); expect(response).toBeDefined(); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test26:should fail to download template with invalid template ID', async () => { const invalidTemplateId = "invalid-template-id"; try { const response = await templateApi.download(invalidTemplateId); console.error("Unexpected success response:", response); throw new Error("Test failed, template download should not succeed with an invalid template ID"); } catch (error:any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeDefined(); } }, 20000); test('Test27: should send document for signing using template', async () => { const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; formField.bounds = bounds; const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+20@syncfusion.com"; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.authenticationType = Role.AuthenticationTypeEnum.AccessCode; role.authenticationCode = '123456'; role.authenticationSettings = { authenticationFrequency: AuthenticationSettings.AuthenticationFrequencyEnum.EveryAccess }; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.formFields = [formField]; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = true; sendForSignFromTemplate.labels = ["Invitation", "Form", "Test"]; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; try { const response = await templateApi.sendUsingTemplate(createdTemplateId, sendForSignFromTemplate); console.log("Document sent for signing using template successfully:", response); expect(response).toBeDefined(); } catch (error:any) { console.error("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test28:should send document for signing using template with multiple CCs', async () => { const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 100; bounds.y = 100; bounds.width = 100; bounds.height = 50; formField.bounds = bounds; const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+23@syncfusion.com"; role.signerOrder = 1; role.privateMessage = "Please check and sign the document."; role.authenticationCode = "123456"; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Hr"; role.formFields = [formField]; role.locale = Role.LocaleEnum.En; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = true; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = false; sendForSignFromTemplate.labels = ["Invitation"]; const ccEmails: DocumentCC[] = [ { emailAddress: "divya.boopathy+5@syncfusion.com" }, { emailAddress: "divya.boopathy+8@syncfusion.com" }, { emailAddress: "divya.boopathy+9@syncfusion.com" } ]; sendForSignFromTemplate.cc = ccEmails; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryDays = 180; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; sendForSignFromTemplate.roleRemovalIndices = [1, 2]; try { const response = await templateApi.sendUsingTemplate(createdTemplateId, sendForSignFromTemplate); console.log("Document sent for signing using template successfully:", response); expect(response).toBeDefined(); } catch (error:any) { console.error("Error occurred while calling the API:", error.message); expect(error.message).toBeUndefined(); } }, 20000); test('Test29: should send document from template with file path', async () => { const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; formField.bounds = bounds; const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+20@syncfusion.com"; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.formFields = [formField]; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const fileStream = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [fileStream]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = true; sendForSignFromTemplate.labels = ["Invitation", "Form", "Test"]; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; try { const response = await templateApi.sendUsingTemplate(createdTemplateId, sendForSignFromTemplate); console.log("Document sent for signing using template successfully:", response); expect(response).toBeDefined(); } catch (error) { console.error("Error occurred while calling the API:", error); expect(error).toBeUndefined(); } }, 20000); test('Test30: should fail to send document for signing using invalid template ID with valid fields', async () => { const templateId = "INVALID_TEMPLATE_ID"; const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; formField.bounds = bounds; const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+20@syncfusion.com"; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.formFields = [formField]; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = true; sendForSignFromTemplate.labels = ["Invitation", "Form", "Test"]; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; try { const response = await templateApi.sendUsingTemplate(templateId, sendForSignFromTemplate); console.error("Unexpected success response:", response); throw new Error("Test failed, document should not have been sent with invalid template ID."); } catch (error: any) { console.log("Error occurred while calling the API:", error.message); expect(error.message).toBeDefined(); } }, 20000); test('Test31: should send document for signing using template with email and SMS', async () => { const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; formField.bounds = bounds; const phoneNumber = new PhoneNumber(); phoneNumber.countryCode = "+91"; phoneNumber.number = "6381261236"; const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+20@syncfusion.com"; role.phoneNumber = phoneNumber; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.formFields = [formField]; role.deliveryMode = Role.DeliveryModeEnum.EmailAndSms; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = true; sendForSignFromTemplate.labels = ["Invitation", "Form", "Test"]; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; try { const response = await templateApi.sendUsingTemplate(createdTemplateId, sendForSignFromTemplate); console.log("Document sent for signing using template with email and SMS successfully:", response); expect(response).toBeDefined(); } catch (error) { console.error("Error occurred while calling the API:", error); expect(error).toBeUndefined(); } }, 20000); test('Test32: should fail with invalid email and empty phone number', async () => { const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; formField.bounds = bounds; const phoneNumber = new PhoneNumber(); phoneNumber.countryCode = ""; phoneNumber.number = ""; const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "invalid-email"; role.phoneNumber = phoneNumber; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.formFields = [formField]; role.deliveryMode = Role.DeliveryModeEnum.EmailAndSms; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = true; sendForSignFromTemplate.labels = ["Invitation", "Form", "Test"]; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; try { const response = await templateApi.sendUsingTemplate(createdTemplateId, sendForSignFromTemplate); console.error("Expected failure, but API call succeeded:", response); fail("Expected API to fail due to invalid email and empty phone number"); } catch (error:any) { console.log("Error occurred while calling the API:", error); expect(error).toBeDefined(); expect(error.response.status).toBe(400); expect(error.response.statusText).toBe("Bad Request"); } }, 20000); test('Test33: should send document using template with existing form fields', async () => { const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+20@syncfusion.com"; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.existingFormFields = [ { id: "State", value: "North Carolina" } ]; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hideDocumentId = true; sendForSignFromTemplate.labels = ["Invitation", "Form", "Test"]; const reminderSettings = new ReminderSettings(); reminderSettings.reminderDays = 3; reminderSettings.reminderCount = 5; reminderSettings.enableAutoReminder = false; sendForSignFromTemplate.reminderSettings = reminderSettings; sendForSignFromTemplate.expiryValue = 60; sendForSignFromTemplate.disableExpiryAlert = true; sendForSignFromTemplate.enablePrintAndSign = true; sendForSignFromTemplate.enableReassign = true; sendForSignFromTemplate.enableSigningOrder = true; try { const response = await templateApi.sendUsingTemplate(createdTemplateId1, sendForSignFromTemplate); console.log("Document sent using template with pre-filled fields successfully:", response); expect(response).toBeDefined(); } catch (error) { console.error("Error occurred while calling the API:", error); expect(error).toBeUndefined(); } }, 20000); test('Test34: should fail to send document using template with empty existing form field', async () => { const role = new Role(); role.roleIndex = 50; role.signerName = "Divya"; role.signerEmail = "divya.boopathy+20@syncfusion.com"; role.signerOrder = 1; role.enableEmailOTP = false; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Manager"; role.privateMessage = "Please check and sign the document"; role.existingFormFields = [ { id: "", value: "North Carolina" } ]; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); const files = fs.createReadStream("tests/documents/agreement.pdf"); sendForSignFromTemplate.files = [files]; sendForSignFromTemplate.title = "Invitation form"; sendForSignFromTemplate.message = "Kindly review and sign this."; sendForSignFromTemplate.roles = [role]; sendForSignFromTemplate.disableEmails = false; sendForSignFromTemplate.disableSMS = false; sendForSignFromTemplate.hid