RocketChat/Rocket.Chat

View on GitHub
apps/meteor/ee/server/lib/ldap/copyCustomFieldsLDAP.spec.ts

Summary

Maintainability
C
1 day
Test Coverage
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' });
    });
});