Skip to content

Commit

Permalink
test: add api tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ricardogarim committed Feb 13, 2025
1 parent 2e6cdfc commit 4f3c135
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 7 deletions.
2 changes: 1 addition & 1 deletion apps/meteor/app/livechat/server/api/v1/visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ API.v1.addRoute(
{ projection: { _id: 1, required: 1 } },
false,
).toArray();
await validateRequiredCustomFields(keys, livechatCustomFields);
validateRequiredCustomFields(keys, livechatCustomFields);

const matchingCustomFields = livechatCustomFields.filter((field) => keys.includes(field._id));
const processedKeys = await Promise.all(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { ILivechatCustomField } from '@rocket.chat/core-typings';

export const validateRequiredCustomFields = async (customFields: string[], livechatCustomFields: ILivechatCustomField[]) => {
export const validateRequiredCustomFields = (customFields: string[], livechatCustomFields: ILivechatCustomField[]) => {
const errors: string[] = [];
const requiredCustomFields = livechatCustomFields.filter((field) => field.required);

Expand Down
55 changes: 54 additions & 1 deletion apps/meteor/tests/end-to-end/api/livechat/09-visitors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ describe('LIVECHAT - visitors', () => {
expect(body.visitor).to.not.have.property('livechatData');
});

it('should not update a custom field whe the overwrite flag is false', async () => {
it('should not update a custom field when the overwrite flag is false', async () => {
const token = `${new Date().getTime()}-test`;
const customFieldName = `new_custom_field_${Date.now()}`;
await createCustomField({
Expand Down Expand Up @@ -223,6 +223,59 @@ describe('LIVECHAT - visitors', () => {
expect(body.visitor.livechatData).to.have.property(customFieldName, 'Not a real address :)');
});

it('should not validate required custom fields if no custom fields are provided', async () => {
const token = `${new Date().getTime()}-test`;
const customFieldName = `required_custom_field`;
await createCustomField({
searchable: true,
field: customFieldName,
label: customFieldName,
defaultValue: 'default_value',
scope: 'visitor',
visibility: 'public',
regexp: '',
required: true,
});
const { body } = await request.post(api('livechat/visitor')).send({ visitor: { token } });
expect(body).to.have.property('success', true);
expect(body).to.have.property('visitor');
expect(body.visitor).to.have.property('token', token);
await deleteCustomField(customFieldName);
});

it('should fail if provided custom fields but are missing required ones', async () => {
const token = `${new Date().getTime()}-test`;
const optionalCustomFieldName = `optional_custom_field`;
await createCustomField({
searchable: true,
field: optionalCustomFieldName,
label: optionalCustomFieldName,
defaultValue: 'default_value',
scope: 'visitor',
visibility: 'public',
regexp: '',
required: false,
});
const requiredCustomFieldName = `required_custom_field`;
await createCustomField({
searchable: true,
field: requiredCustomFieldName,
label: requiredCustomFieldName,
defaultValue: 'default_value',
scope: 'visitor',
visibility: 'public',
regexp: '',
required: true,
});
const { body } = await request
.post(api('livechat/visitor'))
.send({ visitor: { token, customFields: [{ key: optionalCustomFieldName, value: 'test', overwrite: true }] } });
expect(body).to.have.property('success', false);
expect(body).to.have.property('error');
expect(body.error).to.be.equal(`Missing required custom fields: required_custom_field`);
await Promise.all([deleteCustomField(optionalCustomFieldName), deleteCustomField(requiredCustomFieldName)]);
});

describe('special cases', () => {
before(async () => {
await updateSetting('Livechat_Allow_collect_and_store_HTTP_header_informations', true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ describe('validateRequiredCustomFields', () => {
];

try {
await validateRequiredCustomFields(customFields, livechatCustomFields);
validateRequiredCustomFields(customFields, livechatCustomFields);
throw new Error('Expected error was not thrown');
} catch (error) {
if (error instanceof Error) {
Expand All @@ -30,7 +30,7 @@ describe('validateRequiredCustomFields', () => {
{ _id: 'customField2', required: true, label: 'Custom Field 2', scope: 'visitor', visibility: 'public', _updatedAt: new Date() },
];

await validateRequiredCustomFields(customFields, livechatCustomFields);
validateRequiredCustomFields(customFields, livechatCustomFields);
});

it('should not throw an error if no custom fields are required', async () => {
Expand All @@ -40,7 +40,7 @@ describe('validateRequiredCustomFields', () => {
{ _id: 'customField2', required: false, label: 'Custom Field 2', scope: 'visitor', visibility: 'public', _updatedAt: new Date() },
];

await validateRequiredCustomFields(customFields, livechatCustomFields);
validateRequiredCustomFields(customFields, livechatCustomFields);
});

it('should throw an error if none of the required custom fields are provided', async () => {
Expand All @@ -51,7 +51,7 @@ describe('validateRequiredCustomFields', () => {
];

try {
await validateRequiredCustomFields(customFields, livechatCustomFields);
validateRequiredCustomFields(customFields, livechatCustomFields);
throw new Error('Expected error was not thrown');
} catch (error) {
if (error instanceof Error) {
Expand Down

0 comments on commit 4f3c135

Please sign in to comment.