boldsign
Version:
NodeJS client for boldsign
307 lines (241 loc) • 11.3 kB
text/typescript
import { TemplateApi } from '../../api/templateApi';
import * as sinon from 'sinon';
describe('TemplateApi Unit Test', () => {
let templateApiStub: sinon.SinonStubbedInstance<TemplateApi>;
beforeEach(() => {
// Create a stub instance of TemplateApi
templateApiStub = sinon.createStubInstance(TemplateApi);
});
afterEach(() => {
sinon.restore();
});
it('should mock and verify createTemplate call', async () => {
const templateData = {
name: 'Sample Template',
fields: {
Title: 'title',
Description: 'description',
DocumentTitle: 'documentTitle',
Files: 'path/to/file.png',
BrandId: 'brand_id',
onBehalfOf: 'email_example',
}
};
const mockCreatedTemplate = {
id: 'templateId',
name: 'Sample Template'
};
templateApiStub.createTemplate.resolves(mockCreatedTemplate);
const result = await templateApiStub.createTemplate(templateData);
expect(result.id).toEqual('templateId');
sinon.assert.calledOnceWithExactly(templateApiStub.createTemplate, templateData);
});
it('should mock and verify listTemplates call', async () => {
const mockTemplatesList = [
{ id: 'template1', name: 'Template One' },
{ id: 'template2', name: 'Template Two' }
];
templateApiStub.listTemplates.resolves(mockTemplatesList);
const result = await templateApiStub.listTemplates();
expect(result).toBeDefined();
expect(Array.isArray(result)).toBe(true);
expect(result.length).toBe(2);
expect(result[0].id).toBe('template1');
expect(result[1].name).toBe('Template Two');
sinon.assert.calledOnce(templateApiStub.listTemplates);
});
it('should mock and verify deleteTemplate call', async () => {
const templateId = 'templateIdToDelete';
const mockDeleteResponse = {
success: true,
message: 'Template deleted successfully'
};
templateApiStub.deleteTemplate.resolves(mockDeleteResponse);
const result = await templateApiStub.deleteTemplate(templateId);
expect(result).toBeDefined();
expect(result.success).toBe(true);
expect(result.message).toBe('Template deleted successfully');
sinon.assert.calledOnceWithExactly(templateApiStub.deleteTemplate, templateId);
});
it('should mock and verify getTemplateDetails call', async () => {
const templateId = 'template123';
const mockTemplateDetails = {
id: 'template123',
name: 'Detailed Template',
fields: {
Title: 'Sample Title',
Description: 'Some description'
}
};
templateApiStub.getTemplateDetails = sinon.stub().resolves(mockTemplateDetails);
const result = await templateApiStub.getTemplateDetails(templateId);
expect(result).toBeDefined();
expect(result.id).toBe('template123');
expect(result.name).toBe('Detailed Template');
sinon.assert.calledOnceWithExactly(templateApiStub.getTemplateDetails, templateId);
});
it('should mock and verify editTemplate (updateTemplate) call', async () => {
const templateId = 'template123';
const updateData = {
name: 'Updated Template',
fields: {
Title: 'Updated Title',
Description: 'Updated description',
DocumentTitle: 'Updated documentTitle',
Files: 'path/to/updated_file.png',
BrandId: 'updated_brand_id',
onBehalfOf: 'updated_email@example.com',
}
};
const mockUpdatedTemplate = {
id: 'template123',
name: 'Updated Template',
fields: updateData.fields
};
templateApiStub.updateTemplate = sinon.stub().resolves(mockUpdatedTemplate);
const result = await templateApiStub.updateTemplate(templateId, updateData);
expect(result).toBeDefined();
expect(result.id).toBe(templateId);
expect(result.name).toBe('Updated Template');
sinon.assert.calledOnceWithExactly(templateApiStub.updateTemplate, templateId, updateData);
});
it('should mock and verify addTemplateTag call', async () => {
const templateId = 'template123';
const tagData = {
tag: 'new-tag',
};
const mockAddTagResponse = {
success: true,
message: 'Tag added successfully to the template',
templateId: 'template123',
tags: ['new-tag'],
};
templateApiStub.addTemplateTag = sinon.stub().resolves(mockAddTagResponse);
const result = await templateApiStub.addTemplateTag(templateId, tagData);
expect(result).toBeDefined();
expect(result.success).toBe(true);
expect(result.message).toBe('Tag added successfully to the template');
expect(result.templateId).toBe(templateId);
expect(result.tags).toEqual(['new-tag']);
sinon.assert.calledOnceWithExactly(templateApiStub.addTemplateTag, templateId, tagData);
});
it('should mock and verify deleteTemplateTag call', async () => {
const templateId = 'template123';
const tagData = {
tag: 'new-tag',
};
const mockDeleteTagResponse = {
success: true,
message: 'Tag deleted successfully from the template',
templateId: 'template123',
tags: [],
};
templateApiStub.deleteTemplateTag = sinon.stub().resolves(mockDeleteTagResponse);
const result = await templateApiStub.deleteTemplateTag(templateId, tagData);
expect(result).toBeDefined();
expect(result.success).toBe(true);
expect(result.message).toBe('Tag deleted successfully from the template');
expect(result.templateId).toBe(templateId);
expect(result.tags).toEqual([]);
sinon.assert.calledOnceWithExactly(templateApiStub.deleteTemplateTag, templateId, tagData);
});
it('should mock and verify downloadTemplate call', async () => {
const templateId = 'template123';
const mockDownloadResponse = Buffer.from('some template data');
templateApiStub.downloadTemplate = sinon.stub().resolves(mockDownloadResponse);
const result = await templateApiStub.downloadTemplate(templateId);
expect(result).toBeDefined();
expect(result).toBeInstanceOf(Buffer);
expect(result.toString()).toBe(mockDownloadResponse.toString());
sinon.assert.calledOnceWithExactly(templateApiStub.downloadTemplate, templateId);
});
it('should mock and verify createEmbeddedTemplate call', async () => {
const embeddedTemplateData = {
name: 'Embedded Template',
fields: {
Title: 'title',
Description: 'description',
DocumentTitle: 'documentTitle',
Files: 'path/to/file.pdf',
BrandId: 'brand123',
onBehalfOf: 'user@example.com',
},
redirectUrl: 'https://your-app.com/redirect',
};
const mockEmbeddedTemplateResponse = {
templateId: 'embeddedTemplate123',
url: 'https://signing-service.com/embedded/template/embeddedTemplate123',
expiresAt: '2025-12-31T23:59:59Z'
};
templateApiStub.createEmbeddedTemplate = sinon.stub().resolves(mockEmbeddedTemplateResponse);
const result = await templateApiStub.createEmbeddedTemplate(embeddedTemplateData);
expect(result).toBeDefined();
expect(result.templateId).toBe('embeddedTemplate123');
expect(result.url).toContain('/embedded/template/embeddedTemplate123');
expect(result.expiresAt).toBe('2025-12-31T23:59:59Z');
sinon.assert.calledOnceWithExactly(templateApiStub.createEmbeddedTemplate, embeddedTemplateData);
});
it('should mock and verify editEmbeddedTemplate call', async () => {
const templateId = 'embeddedTemplate123';
const updateData = {
name: 'Updated Embedded Template',
fields: {
Title: 'Updated Title',
Description: 'Updated Description',
DocumentTitle: 'Updated Doc Title',
Files: 'path/to/updated_file.pdf',
BrandId: 'updatedBrand456',
onBehalfOf: 'updateduser@example.com',
},
redirectUrl: 'https://your-app.com/updated-redirect',
};
const mockUpdatedEmbeddedTemplateResponse = {
templateId: templateId,
name: 'Updated Embedded Template',
url: 'https://signing-service.com/embedded/template/embeddedTemplate123',
expiresAt: '2025-12-31T23:59:59Z',
updated: true
};
templateApiStub.editEmbeddedTemplate = sinon.stub().resolves(mockUpdatedEmbeddedTemplateResponse);
const result = await templateApiStub.editEmbeddedTemplate(templateId, updateData);
expect(result).toBeDefined();
expect(result.templateId).toBe(templateId);
expect(result.name).toBe('Updated Embedded Template');
expect(result.url).toContain('/embedded/template/embeddedTemplate123');
expect(result.updated).toBe(true);
expect(result.expiresAt).toBe('2025-12-31T23:59:59Z');
sinon.assert.calledOnceWithExactly(templateApiStub.editEmbeddedTemplate, templateId, updateData);
});
it('should mock and verify createEmbeddedRequestLinkFromTemplate call', async () => {
const templateId = 'template123';
const requestData = {
title: 'Embedded Signing Request',
message: 'Please sign this document via embedded link.',
roles: [
{
role: 'Signer',
name: 'Jane Doe',
email: 'jane.doe@example.com',
}
],
redirectUrl: 'https://your-app.com/redirect-after-signing',
onBehalfOf: 'admin@example.com',
isSandbox: true,
labels: ['embedded', 'request'],
};
const mockResponse = {
requestId: 'req789',
url: 'https://signing-service.com/embedded/request/req789',
expiresAt: '2025-12-31T23:59:59Z',
templateId: 'template123',
};
templateApiStub.createEmbeddedRequestLinkFromTemplate = sinon.stub().resolves(mockResponse);
const result = await templateApiStub.createEmbeddedRequestLinkFromTemplate(templateId, requestData);
expect(result).toBeDefined();
expect(result.requestId).toBe('req789');
expect(result.url).toContain('/embedded/request/req789');
expect(result.templateId).toBe(templateId);
expect(result.expiresAt).toBe('2025-12-31T23:59:59Z');
sinon.assert.calledOnceWithExactly(templateApiStub.createEmbeddedRequestLinkFromTemplate, templateId, requestData);
});
});