boldsign
Version:
NodeJS client for boldsign
362 lines (318 loc) • 14.3 kB
text/typescript
import {BrandingApi,ContactsApi,CustomFieldApi,DocumentApi,TemplateApi,SenderIdentitiesApi,TeamsApi,UserApi} from '../../api';
import {ContactDetails,BrandCustomFieldDetails,CustomFormField,DocumentSigner,FormField,Rectangle,SendForSign,AuthenticationSettings,CreateTemplateRequest,TemplateRole,Role,SendForSignFromTemplateForm,ReminderSettings,CreateSenderIdentityRequest,CreateTeamRequest,CreateUser} from '../../model';
import config from '../config';
import * as fs from 'fs';
import { performance } from 'perf_hooks';
describe('Full Integration & Performance Test Suite', () => {
let senderIdentitiesApi:SenderIdentitiesApi;
let brandingApi: BrandingApi;
let contactsApi: ContactsApi;
let customFieldApi: CustomFieldApi;
let documentApi: DocumentApi;
let templateApi: TemplateApi;
let teamsApi: TeamsApi;
let userApi:UserApi;
let brandId;
let createdUserId;
let teamName;
let createdCustomFieldId;
let createdSenderIdentityId;
let createdDocumentId;
let createdTemplateId;
let emailId;
let customFieldName;
const generateRandomEmail = () => `sdktesting${Math.floor(1000 + Math.random() * 9000)}.com`;
const generateRandomNumber = () => Math.floor(1000 + Math.random() * 9000).toString();
beforeAll(() => {
const apiKey = config.apiKey;
const baseUrl = config.baseUrl;
if (!apiKey || !baseUrl) {
throw new Error("Environment variables 'API_KEY' or 'HOST_URL' are not set.");
}
brandingApi = new BrandingApi(baseUrl);
brandingApi.setApiKey(apiKey);
contactsApi = new ContactsApi(baseUrl);
contactsApi.setApiKey(apiKey);
customFieldApi = new CustomFieldApi(baseUrl);
customFieldApi.setApiKey(apiKey);
documentApi = new DocumentApi(baseUrl);
documentApi.setApiKey(apiKey);
templateApi = new TemplateApi(baseUrl);
templateApi.setApiKey(apiKey);
senderIdentitiesApi =new SenderIdentitiesApi(baseUrl);
senderIdentitiesApi.setApiKey(apiKey);
teamsApi = new TeamsApi(baseUrl);
teamsApi.setApiKey(apiKey);
userApi = new UserApi(baseUrl);
userApi.setApiKey(apiKey);
emailId = generateRandomEmail();
customFieldName = `Test Custom Field ${generateRandomNumber()}`;
teamName = `sdktestingteam${generateRandomNumber()}`;
});
test('Performance Test 1: Create a brand', async () => {
const brandLogo = fs.createReadStream("tests/documents/logo.jpg");
const start = performance.now();
try {
const response = await brandingApi.createBrand(
"NodeSDK_Perf",
brandLogo,
"Blue",
"Black",
"White",
"{SenderName} from Syncfusion"
);
const end = performance.now();
const duration = end - start;
console.log(`Brand creation took ${duration.toFixed(10)} ms`);
brandId = response.brandId;
expect(brandId).toBeDefined();
expect(duration).toBeLessThan(10000);
} catch (error: any) {
console.error("Error during brand creation:", error.message);
expect(error).toBeUndefined();
}
}, 20000);
test('Performance Test 2: Create a contact', async () => {
const contactDetails = new ContactDetails();
contactDetails.name = "sdktesting";
contactDetails.email = emailId;
const start = performance.now();
try {
const response = await contactsApi.createContact([contactDetails]);
const end = performance.now();
const duration = end - start;
console.log(`Contact creationcontac took ${duration.toFixed(10)} ms`);
expect(response).toBeDefined();
expect(duration).toBeLessThan(10000);
} catch (error) {
console.error("Error during contact creation:", error);
expect(error).toBeUndefined();
}
}, 20000);
test('Performance Test 3: Create a custom field', async () => {
const formField = new CustomFormField();
formField.fieldType = CustomFormField.FieldTypeEnum.Signature;
formField.placeHolder = "string";
formField.isRequired = true;
const customFieldDetails = new BrandCustomFieldDetails();
customFieldDetails.fieldName = customFieldName;
customFieldDetails.fieldDescription = "string";
customFieldDetails.fieldOrder = 2;
customFieldDetails.brandId = brandId;
customFieldDetails.sharedField = true;
customFieldDetails.formField = formField;
const start = performance.now();
try {
const response = await customFieldApi.createCustomField(customFieldDetails);
const end = performance.now();
const duration = end - start;
console.log(`Custom field creation took ${duration.toFixed(10)} ms`);
createdCustomFieldId = response.customFieldId;
expect(createdCustomFieldId).toBeDefined();
expect(duration).toBeLessThan(10000);
} catch (error: any) {
console.error("Error during custom field creation:", error.message);
expect(error).toBeUndefined();
}
}, 20000);
test('Performance Test 4: Send document for signing', async () => {
const signer = new DocumentSigner();
signer.name = 'Test Signer';
signer.emailAddress = 'mohammedmushraf.abuthakir+6@syncfusion.com';
signer.signerOrder = 1;
signer.signerType = DocumentSigner.SignerTypeEnum.Signer;
signer.authenticationType = DocumentSigner.AuthenticationTypeEnum.AccessCode;
signer.authenticationCode = '123456';
signer.authenticationSettings = {
authenticationFrequency: AuthenticationSettings.AuthenticationFrequencyEnum.EveryAccess
};
const formField = new FormField();
formField.name = 'Sign';
formField.fieldType = FormField.FieldTypeEnum.Signature;
formField.font = FormField.FontEnum.Helvetica;
formField.pageNumber = 1;
formField.isRequired = true;
formField.bounds = new Rectangle();
signer.formFields = [formField];
signer.privateMessage = 'This is a private message for signer';
const sendRequest = new SendForSign();
sendRequest.title = 'Document SDK API';
sendRequest.files = [fs.createReadStream('tests/documents/agreement.pdf')];
sendRequest.enablePrintAndSign = true;
sendRequest.signers = [signer];
sendRequest.message = 'Please sign this document';
const start = performance.now();
try {
const response = await documentApi.sendDocument(sendRequest);
const end = performance.now();
const duration = end - start;
console.log(`Document sending took ${duration.toFixed(10)} ms`);
createdDocumentId = response.documentId;
expect(createdDocumentId).toBeDefined();
expect(duration).toBeLessThan(10000);
} catch (error) {
console.error("Error during document sending:", error);
expect(error).toBeUndefined();
}
}, 20000);
test('Performance Test 5: Create a template', 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;
createTemplateRequest.files = [fs.createReadStream("tests/documents/agreement.pdf")];
const start = performance.now();
try {
const response = await templateApi.createTemplate(createTemplateRequest);
const end = performance.now();
const duration = end - start;
console.log(`Template creation took ${duration.toFixed(10)} ms`);
createdTemplateId = response.templateId;
expect(createdTemplateId).toBeDefined();
expect(duration).toBeLessThan(10000);
} catch (error: any) {
console.error("Error during template creation:", error.message);
expect(error).toBeUndefined();
}
}, 20000);
test('Performanc Test 6: should send document for signing using template', async () => {
const start = performance.now();
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);
const end = performance.now();
const duration = end - start;
console.log(`Send document from template took ${duration.toFixed(10)} ms`);
expect(duration).toBeLessThan(10000);
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('Performance Test 7: should create sender identity successfully', async () => {
const start = performance.now();
const createSenderIdentityRequest = new CreateSenderIdentityRequest();
createSenderIdentityRequest.name = "SenderIdentity API";
createSenderIdentityRequest.email = emailId;
createSenderIdentityRequest.redirectUrl = "https://boldsign.com";
try {
const response = await senderIdentitiesApi.createSenderIdentities(createSenderIdentityRequest);
console.log("Sender Identity created successfully:", response);
createdSenderIdentityId = response;
console.log("Created Sender Identity ID:", createdSenderIdentityId);
const end = performance.now();
const duration = end - start;
console.log(`Sender Identity creation took ${duration.toFixed(10)} ms`);
expect(duration).toBeLessThan(10000);
expect(response).toBeDefined();
} catch (error:any) {
console.log("Error occurred while calling the API:", error.message);
expect(error.message).toBeUndefined();
}
},20000);
test('Performance test 8: should create team successfully', async () => {
const start = performance.now();
const createTeamRequest = new CreateTeamRequest();
createTeamRequest.teamName = teamName;
try {
const createTeamResponse = await teamsApi.createTeam(createTeamRequest);
console.log('Team created successfully:', createTeamResponse);
const end = performance.now();
const duration = end - start;
console.log(`Teams creation took ${duration.toFixed(10)} ms`);
expect(duration).toBeLessThan(10000);
expect(createTeamResponse).toBeDefined();
} catch (error:any) {
console.error('Error occurred while creating team:', error.message);
expect(error.message).toBeUndefined();
}
},20000);
test('Performance test 9:should create user successfully', async () => {
const start = performance.now();
const createUserRequest = new CreateUser();
createUserRequest.emailId = emailId;
createUserRequest.userRole = CreateUser.UserRoleEnum.Member;
try {
const response = await userApi.createUser([createUserRequest]);
console.log("User created successfully:", response);
console.log("Created User ID:", createdUserId);
const end = performance.now();
const duration = end - start;
console.log(`User creation took ${duration.toFixed(10)} ms`);
expect(duration).toBeLessThan(10000);
expect(response).toBeDefined();
} catch (error:any) {
console.error("Error occurred while calling the API:", error.message);
expect(error.message).toBeUndefined();
}
},20000);
});