apps/meteor/ee/server/lib/ldap/copyCustomFieldsLDAP.spec.ts
import type { IImportUser, ILDAPEntry } from '@rocket.chat/core-typings';
import type { Logger } from '@rocket.chat/logger';
import { expect, spy } from 'chai';
import { copyCustomFieldsLDAP } from './copyCustomFieldsLDAP';
describe('LDAP copyCustomFieldsLDAP', () => {
it('should copy custom fields from ldapUser to rcUser', () => {
const ldapUser = {
mail: 'test@test.com',
givenName: 'Test',
} as unknown as ILDAPEntry;
const userData = {
name: 'Test',
username: 'test',
} as unknown as IImportUser;
copyCustomFieldsLDAP(
{
ldapUser,
userData,
syncCustomFields: true,
customFieldsSettings: JSON.stringify({
mappedGivenName: { type: 'text', required: false },
}),
customFieldsMap: JSON.stringify({
givenName: 'mappedGivenName',
}),
},
{
debug: () => undefined,
error: () => undefined,
} as unknown as Logger,
);
expect(userData).to.have.property('customFields');
expect(userData.customFields).to.be.eql({ mappedGivenName: 'Test' });
});
it('should copy custom fields from ldapUser to rcUser already having other custom fields', () => {
const ldapUser = {
mail: 'test@test.com',
givenName: 'Test',
} as unknown as ILDAPEntry;
const userData = {
name: 'Test',
username: 'test',
customFields: {
custom: 'Test',
},
} as unknown as IImportUser;
copyCustomFieldsLDAP(
{
ldapUser,
userData,
syncCustomFields: true,
customFieldsSettings: JSON.stringify({
mappedGivenName: { type: 'text', required: false },
}),
customFieldsMap: JSON.stringify({
givenName: 'mappedGivenName',
}),
},
{
debug: () => undefined,
error: () => undefined,
} as unknown as Logger,
);
expect(userData).to.have.property('customFields');
expect(userData.customFields).to.be.eql({ custom: 'Test', mappedGivenName: 'Test' });
});
it('should not copy custom fields from ldapUser to rcUser if syncCustomFields is false', () => {
const ldapUser = {
mail: 'test@test.com',
givenName: 'Test',
} as unknown as ILDAPEntry;
const userData = {
name: 'Test',
username: 'test',
} as unknown as IImportUser;
copyCustomFieldsLDAP(
{
ldapUser,
userData,
syncCustomFields: false,
customFieldsSettings: JSON.stringify({
mappedGivenName: { type: 'text', required: false },
}),
customFieldsMap: JSON.stringify({
givenName: 'mappedGivenName',
}),
},
{
debug: () => undefined,
error: () => undefined,
} as unknown as Logger,
);
expect(userData).to.not.have.property('customFields');
});
it('should call logger.error if customFieldsSettings is not a valid JSON', () => {
const debug = spy();
const error = spy();
const ldapUser = {
mail: 'test@test.com',
givenName: 'Test',
} as unknown as ILDAPEntry;
const userData = {
name: 'Test',
username: 'test',
} as unknown as IImportUser;
copyCustomFieldsLDAP(
{
ldapUser,
userData,
syncCustomFields: true,
customFieldsSettings: `${JSON.stringify({
mappedGivenName: { type: 'text', required: false },
})}}`,
customFieldsMap: JSON.stringify({
givenName: 'mappedGivenName',
}),
},
{
debug,
error,
} as unknown as Logger,
);
expect(error).to.have.been.called.exactly(1);
});
it('should call logger.error if customFieldsMap is not a valid JSON', () => {
const debug = spy();
const error = spy();
const ldapUser = {
mail: 'test@test.com',
givenName: 'Test',
} as unknown as ILDAPEntry;
const userData = {
name: 'Test',
username: 'test',
} as unknown as IImportUser;
copyCustomFieldsLDAP(
{
ldapUser,
userData,
syncCustomFields: true,
customFieldsSettings: JSON.stringify({
mappedGivenName: { type: 'text', required: false },
}),
customFieldsMap: `${JSON.stringify({
givenName: 'mappedGivenName',
})}}`,
},
{
debug,
error,
} as unknown as Logger,
);
expect(error).to.have.been.called.exactly(1);
});
it('should call logger.debug if some custom fields are not mapped but still mapping the other fields', () => {
const debug = spy();
const error = spy();
const ldapUser = {
mail: 'test@test.com',
givenName: 'Test',
} as unknown as ILDAPEntry;
const userData = {
name: 'Test',
username: 'test',
} as unknown as IImportUser;
copyCustomFieldsLDAP(
{
ldapUser,
userData,
syncCustomFields: true,
customFieldsSettings: JSON.stringify({
mappedGivenName: { type: 'text', required: false },
}),
customFieldsMap: JSON.stringify({
givenName: 'mappedGivenName',
test: 'test',
}),
},
{
debug,
error,
} as unknown as Logger,
);
expect(debug).to.have.been.called.exactly(1);
expect(userData).to.have.property('customFields');
expect(userData.customFields).to.be.eql({ mappedGivenName: 'Test' });
});
});