Skip to content
Snippets Groups Projects
Unverified Commit 0f0b8e17 authored by Martin Schoeler's avatar Martin Schoeler Committed by GitHub
Browse files

fix: hidden custom fields being validated on some cases (#29556)

parent 0fb7d907
No related branches found
No related tags found
No related merge requests found
---
"@rocket.chat/meteor": patch
"@rocket.chat/model-typings": patch
---
fix: hidden custom fields being required in some cases
...@@ -72,9 +72,13 @@ export const Contacts = { ...@@ -72,9 +72,13 @@ export const Contacts = {
} }
} }
const allowedCF = LivechatCustomField.findByScope<Pick<ILivechatCustomField, '_id' | 'label' | 'regexp' | 'required'>>('visitor', { const allowedCF = LivechatCustomField.findByScope<Pick<ILivechatCustomField, '_id' | 'label' | 'regexp' | 'required' | 'visibility'>>(
projection: { _id: 1, label: 1, regexp: 1, required: 1 }, 'visitor',
}); {
projection: { _id: 1, label: 1, regexp: 1, required: 1 },
},
false,
);
const livechatData: Record<string, string> = {}; const livechatData: Record<string, string> = {};
......
...@@ -13,8 +13,12 @@ export class LivechatCustomFieldRaw extends BaseRaw<ILivechatCustomField> implem ...@@ -13,8 +13,12 @@ export class LivechatCustomFieldRaw extends BaseRaw<ILivechatCustomField> implem
return [{ key: { scope: 1 } }]; return [{ key: { scope: 1 } }];
} }
findByScope(scope: ILivechatCustomField['scope'], options?: FindOptions<ILivechatCustomField>): FindCursor<ILivechatCustomField> { findByScope(
return this.find({ scope }, options || {}); scope: ILivechatCustomField['scope'],
options?: FindOptions<ILivechatCustomField>,
includeHidden = true,
): FindCursor<ILivechatCustomField> {
return this.find({ scope, ...(includeHidden === true ? {} : { visibility: { $ne: 'hidden' } }) }, options);
} }
findMatchingCustomFields( findMatchingCustomFields(
......
import { faker } from '@faker-js/faker'; import { faker } from '@faker-js/faker';
import { createToken } from '../../client/lib/utils/createToken'; import { createToken } from '../../client/lib/utils/createToken';
import { IS_EE } from './config/constants';
import { Users } from './fixtures/userStates'; import { Users } from './fixtures/userStates';
import { OmnichannelContacts } from './page-objects/omnichannel-contacts-list'; import { OmnichannelContacts } from './page-objects/omnichannel-contacts-list';
import { OmnichannelSection } from './page-objects/omnichannel-section'; import { OmnichannelSection } from './page-objects/omnichannel-section';
...@@ -18,6 +19,16 @@ const createContact = (generateToken = false) => ({ ...@@ -18,6 +19,16 @@ const createContact = (generateToken = false) => ({
const NEW_CONTACT = createContact(); const NEW_CONTACT = createContact();
const EDIT_CONTACT = createContact(); const EDIT_CONTACT = createContact();
const EXISTING_CONTACT = createContact(true); const EXISTING_CONTACT = createContact(true);
const NEW_CUSTOM_FIELD = {
searchable: true,
field: 'hiddenCustomField',
label: 'hiddenCustomField',
defaultValue: 'test_contact_center_hidden_customField',
scope: 'visitor',
visibility: 'hidden',
required: true,
regexp: '',
}
const URL = { const URL = {
contactCenter: '/omnichannel-directory/contacts', contactCenter: '/omnichannel-directory/contacts',
...@@ -47,12 +58,19 @@ test.describe('Omnichannel Contact Center', () => { ...@@ -47,12 +58,19 @@ test.describe('Omnichannel Contact Center', () => {
// Add a contact // Add a contact
const { id: _, ...data } = EXISTING_CONTACT; const { id: _, ...data } = EXISTING_CONTACT;
await api.post('/omnichannel/contact', data); await api.post('/omnichannel/contact', data);
if (IS_EE) {
await api.post('/livechat/custom.field', NEW_CUSTOM_FIELD);
}
}); });
test.afterAll(async ({ api }) => { test.afterAll(async ({ api }) => {
// Remove added contacts // Remove added contacts
await api.delete('/livechat/visitor', { token: EXISTING_CONTACT.token }); await api.delete('/livechat/visitor', { token: EXISTING_CONTACT.token });
await api.delete('/livechat/visitor', { token: NEW_CONTACT.token }); await api.delete('/livechat/visitor', { token: NEW_CONTACT.token });
if (IS_EE) {
await api.post('method.call/livechat:removeCustomField', { message: NEW_CUSTOM_FIELD.field });
}
}); });
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
......
...@@ -5,8 +5,16 @@ import type { IBaseModel } from './IBaseModel'; ...@@ -5,8 +5,16 @@ import type { IBaseModel } from './IBaseModel';
// eslint-disable-next-line @typescript-eslint/no-empty-interface // eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface ILivechatCustomFieldModel extends IBaseModel<ILivechatCustomField> { export interface ILivechatCustomFieldModel extends IBaseModel<ILivechatCustomField> {
findByScope<T extends Document = ILivechatCustomField>(scope: ILivechatCustomField['scope'], options?: FindOptions<T>): FindCursor<T>; findByScope<T extends Document = ILivechatCustomField>(
findByScope(scope: ILivechatCustomField['scope'], options?: FindOptions<ILivechatCustomField>): FindCursor<ILivechatCustomField>; scope: ILivechatCustomField['scope'],
options?: FindOptions<T>,
includeHidden?: boolean,
): FindCursor<T>;
findByScope(
scope: ILivechatCustomField['scope'],
options?: FindOptions<ILivechatCustomField>,
includeHidden?: boolean,
): FindCursor<ILivechatCustomField>;
findMatchingCustomFields( findMatchingCustomFields(
scope: ILivechatCustomField['scope'], scope: ILivechatCustomField['scope'],
searchable: boolean, searchable: boolean,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment