@defra-fish/dynamics-lib
Version:
Framework to support integration with dynamics
109 lines (100 loc) • 4.54 kB
JavaScript
import { Permission, Contact, Permit, PoclFile, Transaction, retrieveGlobalOptionSets } from '../../index.js'
let optionSetData
describe('permission entity', () => {
beforeAll(async () => {
optionSetData = await retrieveGlobalOptionSets().cached()
})
it('maps from dynamics', async () => {
const permission = Permission.fromResponse(
{
'@odata.etag': 'W/"186695153"',
defra_permissionid: '347a9083-361e-ea11-a810-000d3a25c5d6',
defra_name: '00000000-2WC3FDR-CD379B',
defra_issuedate: '2019-12-13T09:00:00Z',
defra_startdate: '2019-12-14T00:00:00Z',
defra_enddate: '2020-12-13T23:59:59Z',
defra_stagingid: '71ad9a25-2a03-406b-a0e3-f4ff37799374',
defra_datasource: 910400003,
defra_renewal: true,
defra_rcpagreement: false,
defra_licenceforyou: 1
},
optionSetData
)
const expectedFields = {
id: '347a9083-361e-ea11-a810-000d3a25c5d6',
referenceNumber: '00000000-2WC3FDR-CD379B',
issueDate: '2019-12-13T09:00:00Z',
startDate: '2019-12-14T00:00:00Z',
endDate: '2020-12-13T23:59:59Z',
stagingId: '71ad9a25-2a03-406b-a0e3-f4ff37799374',
dataSource: expect.objectContaining({ id: 910400003, label: 'Web Sales', description: 'Web Sales' }),
isRenewal: true,
isRecurringPayment: false,
isLicenceForYou: expect.objectContaining({ id: 1, label: 'Yes', description: 'Yes' })
}
expect(permission).toBeInstanceOf(Permission)
expect(permission).toMatchObject(expect.objectContaining({ etag: 'W/"186695153"', ...expectedFields }))
expect(permission.toJSON()).toMatchObject(expect.objectContaining(expectedFields))
expect(JSON.parse(permission.toString())).toMatchObject(expect.objectContaining(expectedFields))
})
it('maps to dynamics', async () => {
// Mimic a permit which is already persisted to test binding
const permit = Permit.fromResponse(
{
'@odata.etag': 'W/"22639016"',
defra_availablefrom: '2017-03-31T23:00:00Z',
defra_availableto: '2020-03-31T22:59:00Z',
defra_duration: 910400000,
defra_permittype: 910400000,
defra_advertisedprice: 6.0,
defra_permitid: '9d1b34a0-0c66-e611-80dc-c4346bad0190',
defra_name: '2017-20 Coarse 1 day 2 Rod Licence (Full)',
defra_permitsubtype: 910400000,
defra_equipment: 910400000,
defra_isforfulfilment: false,
defra_iscountersales: true,
defra_advertisedprice_base: 6.0,
defra_itemid: '42289'
},
optionSetData
)
// Mimic a new contact to test binding
const contact = new Contact()
// Mimic a new transaction to test binding
const transaction = new Transaction()
const poclFile = new PoclFile()
const permission = new Permission()
permission.referenceNumber = '00000000-2WC3FDR-CD379B'
permission.issueDate = '2019-12-13T09:00:00Z'
permission.startDate = '2019-12-14T00:00:00Z'
permission.endDate = '2020-12-13T23:59:59Z'
permission.stagingId = '71ad9a25-2a03-406b-a0e3-f4ff37799374'
permission.dataSource = optionSetData.defra_datasource.options['910400003']
permission.isRenewal = true
permission.isRecurringPayment = false
permission.isLicenceForYou = optionSetData.defra_islicenceforyou.options['1']
permission.bindToEntity(Permission.definition.relationships.licensee, contact)
permission.bindToEntity(Permission.definition.relationships.permit, permit)
permission.bindToEntity(Permission.definition.relationships.transaction, transaction)
permission.bindToEntity(Permission.definition.relationships.poclFile, poclFile)
const dynamicsEntity = permission.toRequestBody()
expect(dynamicsEntity).toMatchObject(
expect.objectContaining({
defra_name: '00000000-2WC3FDR-CD379B',
defra_issuedate: '2019-12-13T09:00:00Z',
defra_startdate: '2019-12-14T00:00:00Z',
defra_enddate: '2020-12-13T23:59:59Z',
defra_stagingid: '71ad9a25-2a03-406b-a0e3-f4ff37799374',
defra_datasource: 910400003,
defra_licenceforyou: 1,
'defra_PermitId@odata.bind': `/${Permit.definition.dynamicsCollection}(${permit.id})`,
'defra_ContactId@odata.bind': `$${contact.uniqueContentId}`,
'defra_Transaction@odata.bind': `$${transaction.uniqueContentId}`,
'defra_POCLFileId@odata.bind': `$${poclFile.uniqueContentId}`,
defra_renewal: true,
defra_rcpagreement: false
})
)
})
})