You are here:
Example Test Suite for Life Sciences Custom Scripts
This example provides a test suite for a custom script in Life Sciences Cloud for Customer Engagement.
This example Jest test suite is designed to test the example custom script in Best Practices for Life Sciences Custom Scripts.
import fs from 'fs';
import path from 'path';
// Load the script
const scriptContent = fs.readFileSync(path.resolve(__dirname, '../inquiryQuestionsValidation.js'));
const scriptFunction = new Function('env', 'record', 'db', 'ConditionBuilder', 'FieldCondition', `return ${scriptContent.toString()}`);
// Mock the classes and variables that are used in the script
const mockEnv = {
getOption: jest.fn(),
};
const mockDb = {
query: jest.fn(),
};
const mockRecord = {
stringValue: jest.fn(),
};
const mockConditionBuilder = jest.fn().mockImplementation(() => ({
build: jest.fn().mockResolvedValue({}),
}));
const mockFieldCondition = jest.fn();
describe('inquiryQuestionsValidation', () => {
beforeEach(() => {
// Clear all mocks and reset modules to ensure a clean state
jest.clearAllMocks();
});
test('should return Inquiry Questions Added when there are inquiry questions', async () => {
// Mock the db.query method to return the desired value
mockDb.query.mockResolvedValue([{ Id: '1', Name: 'Question 1' }]);
// The scriptFunction returns an array containing a Promise
const promiseArray = scriptFunction(mockEnv, mockRecord, mockDb, mockConditionBuilder, mockFieldCondition);
// Wait for the Promise in the array to resolve
const result = await Promise.all(promiseArray);
// Assert that the result is as expected
expect(result).toEqual([{
title: 'Inquiry Questions Added',
status: 'success',
}]);
});
test('should return No Inquiry Questions Found when there are no inquiry questions', async () => {
// Mock the db.query method to return the desired value
mockDb.query.mockResolvedValue([]);
// The scriptFunction returns an array containing a Promise
const promiseArray = scriptFunction(mockEnv, mockRecord, mockDb, mockConditionBuilder, mockFieldCondition);
// Wait for the Promise in the array to resolve
const result = await Promise.all(promiseArray);
// Assert that the result is as expected
expect(result).toEqual([{
title: 'No Inquiry Questions Found',
status: 'error',
}]);
});
test('should return Caught Exception During Inquiry Questions Validation when there is an error', async () => {
// Mock the db.query method to return the desired value
mockDb.query.mockRejectedValue(new Error('Error'));
// The scriptFunction returns an array containing a Promise
const promiseArray = scriptFunction(mockEnv, mockRecord, mockDb, mockConditionBuilder, mockFieldCondition);
// Wait for the Promise in the array to resolve
const result = await Promise.all(promiseArray);
// Assert that the result is as expected
expect(result).toEqual([{
title: 'Caught Exception During Inquiry Questions Validation',
status: 'error',
}]);
});
});

