fix: `contact.conflictingFields` being updated with nullish values (#36097)
Co-authored-by: Kevin Aleman <kaleman960@gmail.com>pull/36031/head
parent
a06db5e809
commit
c8b8cf8556
@ -0,0 +1,5 @@ |
||||
--- |
||||
"@rocket.chat/meteor": patch |
||||
--- |
||||
|
||||
Fixes `contact.conflictingFields` being updated with nullish values. |
||||
@ -0,0 +1,61 @@ |
||||
import type { ILivechatContact } from '@rocket.chat/core-typings'; |
||||
import { expect } from 'chai'; |
||||
import proxyquire from 'proxyquire'; |
||||
import sinon from 'sinon'; |
||||
|
||||
const modelsMock = { |
||||
LivechatContacts: { |
||||
updateContact: sinon.stub(), |
||||
}, |
||||
}; |
||||
|
||||
const { updateContactsCustomFields } = proxyquire.noCallThru().load('../../../../../../app/livechat/server/lib/custom-fields.ts', { |
||||
'@rocket.chat/models': modelsMock, |
||||
}); |
||||
|
||||
describe('[Custom Fields] updateContactsCustomFields', () => { |
||||
beforeEach(() => { |
||||
modelsMock.LivechatContacts.updateContact.reset(); |
||||
}); |
||||
|
||||
it('should not add conflictingFields to the update data when its nullish', async () => { |
||||
const contact: Partial<ILivechatContact> = { |
||||
_id: 'contactId', |
||||
customFields: { |
||||
customField: 'value', |
||||
}, |
||||
}; |
||||
|
||||
modelsMock.LivechatContacts.updateContact.resolves({ ...contact, customFields: { customField: 'newValue' } }); |
||||
|
||||
await updateContactsCustomFields(contact, 'customField', 'newValue', true); |
||||
|
||||
expect(modelsMock.LivechatContacts.updateContact.calledOnce).to.be.true; |
||||
expect(modelsMock.LivechatContacts.updateContact.getCall(0).args[0]).to.be.equal('contactId'); |
||||
expect(modelsMock.LivechatContacts.updateContact.getCall(0).args[1]).to.deep.equal({ |
||||
customFields: { customField: 'newValue' }, |
||||
}); |
||||
}); |
||||
|
||||
it('should add conflictingFields to the update data only when it is modified', async () => { |
||||
const contact: Partial<ILivechatContact> = { |
||||
_id: 'contactId', |
||||
customFields: { |
||||
customField: 'value', |
||||
}, |
||||
}; |
||||
|
||||
modelsMock.LivechatContacts.updateContact.resolves({ |
||||
...contact, |
||||
conflictingFields: [{ field: 'customFields.customField', value: 'newValue' }], |
||||
}); |
||||
|
||||
await updateContactsCustomFields(contact, 'customField', 'newValue', false); |
||||
|
||||
expect(modelsMock.LivechatContacts.updateContact.calledOnce).to.be.true; |
||||
expect(modelsMock.LivechatContacts.updateContact.getCall(0).args[0]).to.be.equal('contactId'); |
||||
expect(modelsMock.LivechatContacts.updateContact.getCall(0).args[1]).to.deep.equal({ |
||||
conflictingFields: [{ field: 'customFields.customField', value: 'newValue' }], |
||||
}); |
||||
}); |
||||
}); |
||||
Loading…
Reference in new issue