@defra-fish/dynamics-lib
Version:
Framework to support integration with dynamics
134 lines (106 loc) • 4.89 kB
JavaScript
import { createActivity, updateActivity } from '../activity.queries.js'
import { dynamicsClient } from '../../client/dynamics-client.js'
jest.mock('dynamics-web-api', () => {
return jest.fn().mockImplementation(() => {
return {
executeUnboundAction: jest.fn()
}
})
})
describe('Activity Service', () => {
describe('createActivity', () => {
const getSuccessResponse = () => ({
'@odata.context': 'https://dynamics.com/api/data/v9.1/defra_CreateRCRActivityResponse',
RCRActivityId: 'abc123',
ReturnStatus: 'success',
SuccessMessage: 'RCR Activity - created successfully',
ErrorMessage: null,
oDataContext: 'https://dynamics.com/api/data/v9.1/defra_CreateRCRActivityResponse'
})
const getErrorResponse = () => ({
'@odata.context': 'https://dynamics.com/api/data/v9.1/.defra_CreateRCRActivityResponse',
RCRActivityId: null,
ReturnStatus: 'error',
SuccessMessage: '',
ErrorMessage: 'Failed to create activity',
oDataContext: 'https://dynamics.com/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.defra_CreateRCRActivityResponse'
})
it('should call dynamicsClient with correct parameters', async () => {
dynamicsClient.executeUnboundAction.mockResolvedValue(getSuccessResponse())
await createActivity('contact-identifier-123', 2023)
expect(dynamicsClient.executeUnboundAction).toHaveBeenCalledWith('defra_CreateRCRActivity', {
ContactId: 'contact-identifier-123',
ActivityStatus: 'STARTED',
Season: 2023
})
})
it('should return the CRM response correctly', async () => {
const successResponse = getSuccessResponse()
dynamicsClient.executeUnboundAction.mockResolvedValue(successResponse)
const result = await createActivity('contact-identifier-123', 2024)
expect(result).toEqual(successResponse)
})
it('should handle error in dynamicsClient response', async () => {
const error = new Error('Failed to create activity')
dynamicsClient.executeUnboundAction.mockRejectedValue(error)
await expect(createActivity('contact-identifier-123', 2024)).rejects.toThrow('Failed to create activity')
})
it('should handle the case where activity creation fails', async () => {
dynamicsClient.executeUnboundAction.mockResolvedValue(getErrorResponse())
const result = await createActivity('invalid-contact-id', 2024)
expect(result).toMatchObject({
RCRActivityId: null,
ReturnStatus: 'error',
SuccessMessage: '',
ErrorMessage: 'Failed to create activity'
})
})
})
describe('updateActivity', () => {
const getSuccessResponse = () => ({
'@odata.context': 'https://dynamics.om/api/data/v9.1/defra_UpdateRCRActivityResponse',
ReturnStatus: 'success',
SuccessMessage: 'RCR Activity - updated successfully',
ErrorMessage: null,
oDataContext: 'https://dynamics.com/api/data/v9.1/defra_UpdateRCRActivityResponse'
})
const getErrorResponse = () => ({
'@odata.context': 'https://dynamics.om/api/data/v9.1/defra_UpdateRCRActivityResponse',
RCRActivityId: null,
ReturnStatus: 'error',
SuccessMessage: '',
ErrorMessage: 'Failed to update activity',
oDataContext: 'https://dynamics.com/api/data/v9.1/defra_UpdateRCRActivityResponse'
})
it('should call dynamicsClient with correct parameters', async () => {
dynamicsClient.executeUnboundAction.mockResolvedValue(getSuccessResponse())
await updateActivity('contact-identifier-123', 2023)
expect(dynamicsClient.executeUnboundAction).toHaveBeenCalledWith('defra_UpdateRCRActivity', {
ContactId: 'contact-identifier-123',
ActivityStatus: 'SUBMITTED',
Season: 2023
})
})
it('should return the CRM response correctly', async () => {
const successResponse = getSuccessResponse()
dynamicsClient.executeUnboundAction.mockResolvedValue(successResponse)
const result = await updateActivity('contact-identifier-123', 2024)
expect(result).toEqual(successResponse)
})
it('should handle error in dynamicsClient response', async () => {
const error = new Error('Failed to update activity')
dynamicsClient.executeUnboundAction.mockRejectedValue(error)
await expect(updateActivity('contact-identifier-123', 2024)).rejects.toThrow('Failed to update activity')
})
it('should handle the case where activity creation fails', async () => {
dynamicsClient.executeUnboundAction.mockResolvedValue(getErrorResponse())
const result = await updateActivity('invalid-contact-id', 2024)
expect(result).toMatchObject({
RCRActivityId: null,
ReturnStatus: 'error',
SuccessMessage: '',
ErrorMessage: 'Failed to update activity'
})
})
})
})