From 4dab83e7a8fab0583977caf5a7136b2782e53612 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Tue, 16 Jul 2024 11:35:07 -0300 Subject: [PATCH 01/12] feat(Omnichannel): [FE] Queued Status option Current Chats --- .../views/omnichannel/currentChats/CurrentChatsPage.tsx | 4 +++- .../client/views/omnichannel/currentChats/FilterByText.tsx | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx b/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx index 95fb9a54c3ce..dc73ffb81cbd 100644 --- a/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx +++ b/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx @@ -54,6 +54,7 @@ type CurrentChatQuery = { customFields?: string; sort: string; count?: number; + queued?: boolean; }; type useQueryType = ( @@ -95,8 +96,9 @@ const currentChatQuery: useQueryType = ( } if (status !== 'all') { - query.open = status === 'opened' || status === 'onhold'; + query.open = status === 'opened' || status === 'onhold' || status === 'queued'; query.onhold = status === 'onhold'; + query.queued = status === 'queued'; } if (servedBy && servedBy !== 'all') { query.agents = [servedBy]; diff --git a/apps/meteor/client/views/omnichannel/currentChats/FilterByText.tsx b/apps/meteor/client/views/omnichannel/currentChats/FilterByText.tsx index 131aa06f0a70..cda579387ea1 100644 --- a/apps/meteor/client/views/omnichannel/currentChats/FilterByText.tsx +++ b/apps/meteor/client/views/omnichannel/currentChats/FilterByText.tsx @@ -30,6 +30,7 @@ const FilterByText = ({ setFilter, reload, customFields, setCustomFields, hasCus ['closed', t('Closed')], ['opened', t('Room_Status_Open')], ['onhold', t('On_Hold_Chats')], + ['queued', t('Queued')], ]; const [guest, setGuest] = useLocalStorage('guest', ''); From 44f42a64886553409f8e1a09b35dae3c9a96e617 Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Tue, 16 Jul 2024 08:56:30 -0600 Subject: [PATCH 02/12] Add possibility to filter by queued chats --- apps/meteor/app/livechat/imports/server/rest/rooms.ts | 3 ++- apps/meteor/app/livechat/server/api/lib/rooms.ts | 3 +++ apps/meteor/server/models/raw/LivechatRooms.ts | 7 +++++++ packages/rest-typings/src/v1/omnichannel.ts | 7 +++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/meteor/app/livechat/imports/server/rest/rooms.ts b/apps/meteor/app/livechat/imports/server/rest/rooms.ts index f7d5ddb314c9..f80ed61a131e 100644 --- a/apps/meteor/app/livechat/imports/server/rest/rooms.ts +++ b/apps/meteor/app/livechat/imports/server/rest/rooms.ts @@ -30,7 +30,7 @@ API.v1.addRoute( async get() { const { offset, count } = await getPaginationItems(this.queryParams); const { sort, fields } = await this.parseJsonQuery(); - const { agents, departmentId, open, tags, roomName, onhold } = this.queryParams; + const { agents, departmentId, open, tags, roomName, onhold, queued } = this.queryParams; const { createdAt, customFields, closedAt } = this.queryParams; const createdAtParam = validateDateParams('createdAt', createdAt); @@ -69,6 +69,7 @@ API.v1.addRoute( tags, customFields: parsedCf, onhold, + queued, options: { offset, count, sort, fields }, }), ); diff --git a/apps/meteor/app/livechat/server/api/lib/rooms.ts b/apps/meteor/app/livechat/server/api/lib/rooms.ts index b130e5c2c73a..26449dce3963 100644 --- a/apps/meteor/app/livechat/server/api/lib/rooms.ts +++ b/apps/meteor/app/livechat/server/api/lib/rooms.ts @@ -14,6 +14,7 @@ export async function findRooms({ tags, customFields, onhold, + queued, options: { offset, count, fields, sort }, }: { agents?: Array; @@ -31,6 +32,7 @@ export async function findRooms({ tags?: Array; customFields?: Record; onhold?: string | boolean; + queued?: string | boolean; options: { offset: number; count: number; fields: Record; sort: Record }; }): Promise }>> { const extraQuery = await callbacks.run('livechat.applyRoomRestrictions', {}); @@ -44,6 +46,7 @@ export async function findRooms({ tags, customFields, onhold: ['t', 'true', '1'].includes(`${onhold}`), + queued: ['t', 'true', '1'].includes(`${queued}`), options: { sort: sort || { ts: -1 }, offset, diff --git a/apps/meteor/server/models/raw/LivechatRooms.ts b/apps/meteor/server/models/raw/LivechatRooms.ts index d1b704e024b9..339ca3cf8cbd 100644 --- a/apps/meteor/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/server/models/raw/LivechatRooms.ts @@ -1211,6 +1211,7 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive visitorId, roomIds, onhold, + queued, options = {}, extraQuery = {}, }: { @@ -1226,6 +1227,7 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive visitorId?: string; roomIds?: string[]; onhold?: boolean; + queued?: boolean; options?: { offset?: number; count?: number; sort?: { [k: string]: SortDirection } }; extraQuery?: Filter; }) { @@ -1280,6 +1282,11 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive }; } + if (queued) { + query.servedBy = { $exists: false }; + query.open = true; + } + return this.findPaginated(query, { sort: options.sort || { name: 1 }, skip: options.offset, diff --git a/packages/rest-typings/src/v1/omnichannel.ts b/packages/rest-typings/src/v1/omnichannel.ts index 3dad53cbe8d2..ec53304605fc 100644 --- a/packages/rest-typings/src/v1/omnichannel.ts +++ b/packages/rest-typings/src/v1/omnichannel.ts @@ -2552,6 +2552,7 @@ export type GETLivechatRoomsParams = PaginatedRequest<{ departmentId?: string; open?: string | boolean; onhold?: string | boolean; + queued?: string | boolean; tags?: string[]; }>; @@ -2617,6 +2618,12 @@ const GETLivechatRoomsParamsSchema = { { type: 'boolean', nullable: true }, ], }, + queued: { + anyOf: [ + { type: 'string', nullable: true }, + { type: 'boolean', nullable: true }, + ], + }, tags: { type: 'array', items: { From 79b4f0e25ad5ae004c3f41f6fe39c01e6cff9a1e Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Tue, 16 Jul 2024 09:51:59 -0600 Subject: [PATCH 03/12] test --- .../meteor/server/models/raw/LivechatRooms.ts | 1 + .../tests/end-to-end/api/livechat/00-rooms.ts | 66 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/apps/meteor/server/models/raw/LivechatRooms.ts b/apps/meteor/server/models/raw/LivechatRooms.ts index 339ca3cf8cbd..ed0f29c85702 100644 --- a/apps/meteor/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/server/models/raw/LivechatRooms.ts @@ -1285,6 +1285,7 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive if (queued) { query.servedBy = { $exists: false }; query.open = true; + query.onHold = { $ne: true }; } return this.findPaginated(query, { diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index 5c881b530d08..2e6a8a177122 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -35,6 +35,7 @@ import { fetchMessages, deleteVisitor, makeAgentUnavailable, + sendAgentMessage, } from '../../../data/livechat/rooms'; import { saveTags } from '../../../data/livechat/tags'; import type { DummyResponse } from '../../../data/livechat/utils'; @@ -341,6 +342,71 @@ describe('LIVECHAT - rooms', () => { expect(body.rooms.some((room: IOmnichannelRoom) => !!room.closedAt)).to.be.true; expect(body.rooms.some((room: IOmnichannelRoom) => room.open)).to.be.true; }); + it('should return queued rooms when `queued` param is passed', async () => { + await updateSetting('Livechat_Routing_Method', 'Manual_Selection'); + const visitor = await createVisitor(); + const room = await createLivechatRoom(visitor.token); + + const { body } = await request + .get(api('livechat/rooms')) + .query({ queued: true }) + .set(credentials) + .expect(200); + + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.not.undefined; + }); + it('should return queued rooms when `queued` and `open` params are passed', async () => { + const visitor = await createVisitor(); + const room = await createLivechatRoom(visitor.token); + + const { body } = await request + .get(api('livechat/rooms')) + .query({ queued: true, open: true }) + .set(credentials) + .expect(200); + + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.not.undefined; + + await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); + }); + (IS_EE ? it : it.skip)('should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', async () => { + await updateSetting('Livechat_allow_manual_on_hold', true); + await updateSetting('Livechat_Routing_Method', 'Manual_Selection'); + + const { room } = await startANewLivechatRoomAndTakeIt(); + await sendAgentMessage(room._id); + const response = await request + .post(api('livechat/room.onHold')) + .set(credentials) + .send({ + roomId: room._id, + }) + .expect(200); + + expect(response.body.success).to.be.true; + + const visitor = await createVisitor(); + const room2 = await createLivechatRoom(visitor.token); + + const { body } = await request + .get(api('livechat/rooms')) + .query({ queued: true, onHold: true }) + .set(credentials) + .expect(200); + + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; + + await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); + await updateSetting('Livechat_allow_manual_on_hold', false); + }); (IS_EE ? it : it.skip)('should return only rooms with the given department', async () => { const { department } = await createDepartmentWithAnOnlineAgent(); From eb85017b3d745759ff9857984a3908ee250c5280 Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Tue, 16 Jul 2024 09:53:41 -0600 Subject: [PATCH 04/12] ts --- packages/model-typings/src/models/ILivechatRoomsModel.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/model-typings/src/models/ILivechatRoomsModel.ts b/packages/model-typings/src/models/ILivechatRoomsModel.ts index 6384b325f991..d4da1d7d8159 100644 --- a/packages/model-typings/src/models/ILivechatRoomsModel.ts +++ b/packages/model-typings/src/models/ILivechatRoomsModel.ts @@ -28,6 +28,7 @@ type WithOptions = { options?: any; }; +// TODO: Fix types of model export interface ILivechatRoomsModel extends IBaseModel { getQueueMetrics(params: { departmentId: any; agentId: any; includeOfflineAgents: any; options?: any }): any; @@ -96,6 +97,7 @@ export interface ILivechatRoomsModel extends IBaseModel { visitorId?: any; roomIds?: any; onhold: any; + queued: any; options?: any; extraQuery?: any; }): FindPaginated>; From 6b99a66a72eb0770cff258befa8cb82cf6236509 Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Tue, 16 Jul 2024 10:29:57 -0600 Subject: [PATCH 05/12] lint --- .../tests/end-to-end/api/livechat/00-rooms.ts | 67 ++++++++----------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index 2e6a8a177122..494e207b09d8 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -347,11 +347,7 @@ describe('LIVECHAT - rooms', () => { const visitor = await createVisitor(); const room = await createLivechatRoom(visitor.token); - const { body } = await request - .get(api('livechat/rooms')) - .query({ queued: true }) - .set(credentials) - .expect(200); + const { body } = await request.get(api('livechat/rooms')).query({ queued: true }).set(credentials).expect(200); expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; @@ -361,11 +357,7 @@ describe('LIVECHAT - rooms', () => { const visitor = await createVisitor(); const room = await createLivechatRoom(visitor.token); - const { body } = await request - .get(api('livechat/rooms')) - .query({ queued: true, open: true }) - .set(credentials) - .expect(200); + const { body } = await request.get(api('livechat/rooms')).query({ queued: true, open: true }).set(credentials).expect(200); expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; @@ -373,40 +365,39 @@ describe('LIVECHAT - rooms', () => { await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); }); - (IS_EE ? it : it.skip)('should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', async () => { - await updateSetting('Livechat_allow_manual_on_hold', true); - await updateSetting('Livechat_Routing_Method', 'Manual_Selection'); + (IS_EE ? it : it.skip)( + 'should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', + async () => { + await updateSetting('Livechat_allow_manual_on_hold', true); + await updateSetting('Livechat_Routing_Method', 'Manual_Selection'); - const { room } = await startANewLivechatRoomAndTakeIt(); - await sendAgentMessage(room._id); - const response = await request - .post(api('livechat/room.onHold')) - .set(credentials) - .send({ - roomId: room._id, - }) - .expect(200); + const { room } = await startANewLivechatRoomAndTakeIt(); + await sendAgentMessage(room._id); + const response = await request + .post(api('livechat/room.onHold')) + .set(credentials) + .send({ + roomId: room._id, + }) + .expect(200); - expect(response.body.success).to.be.true; + expect(response.body.success).to.be.true; - const visitor = await createVisitor(); - const room2 = await createLivechatRoom(visitor.token); + const visitor = await createVisitor(); + const room2 = await createLivechatRoom(visitor.token); - const { body } = await request - .get(api('livechat/rooms')) - .query({ queued: true, onHold: true }) - .set(credentials) - .expect(200); + const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onHold: true }).set(credentials).expect(200); - expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; - expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; - expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; - expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; - expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; - await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); - await updateSetting('Livechat_allow_manual_on_hold', false); - }); + await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); + await updateSetting('Livechat_allow_manual_on_hold', false); + }, + ); (IS_EE ? it : it.skip)('should return only rooms with the given department', async () => { const { department } = await createDepartmentWithAnOnlineAgent(); From 559485d3ce017a91cbeb1d69ac0edf49260461be Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Tue, 16 Jul 2024 12:00:44 -0600 Subject: [PATCH 06/12] test --- apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index 494e207b09d8..a0b0472388ba 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -386,7 +386,7 @@ describe('LIVECHAT - rooms', () => { const visitor = await createVisitor(); const room2 = await createLivechatRoom(visitor.token); - const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onHold: true }).set(credentials).expect(200); + const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onhold: true }).set(credentials).expect(200); expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; From cd02d540cbddd9fbddd5f418ccd632cf94986ec5 Mon Sep 17 00:00:00 2001 From: Martin Schoeler Date: Tue, 16 Jul 2024 15:14:37 -0300 Subject: [PATCH 07/12] Create weak-tigers-suffer.md --- .changeset/weak-tigers-suffer.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/weak-tigers-suffer.md diff --git a/.changeset/weak-tigers-suffer.md b/.changeset/weak-tigers-suffer.md new file mode 100644 index 000000000000..91748a43c677 --- /dev/null +++ b/.changeset/weak-tigers-suffer.md @@ -0,0 +1,7 @@ +--- +"@rocket.chat/meteor": minor +"@rocket.chat/model-typings": minor +"@rocket.chat/rest-typings": minor +--- + +Added the ability to filter chats by `queued` on the Current Chats Omnichannel page From ff913e54a854aa65b8aa3a1408df2e6c1f812297 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Thu, 18 Jul 2024 17:03:54 -0300 Subject: [PATCH 08/12] add status to table --- .../views/omnichannel/currentChats/CurrentChatsPage.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx b/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx index dc73ffb81cbd..c439cc838874 100644 --- a/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx +++ b/apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx @@ -172,8 +172,9 @@ const CurrentChatsPage = ({ id, onRowClick }: { id?: string; onRowClick: (_id: s const renderRow = useCallback( (room) => { const { _id, fname, servedBy, ts, lm, department, open, onHold, priorityWeight } = room; - const getStatusText = (open: boolean, onHold: boolean): string => { + const getStatusText = (open: boolean, onHold: boolean, servedBy: boolean): string => { if (!open) return t('Closed'); + if (open && !servedBy) return t('Queued'); return onHold ? t('On_Hold_Chats') : t('Room_Status_Open'); }; @@ -200,7 +201,7 @@ const CurrentChatsPage = ({ id, onRowClick }: { id?: string; onRowClick: (_id: s {moment(lm).format('L LTS')} - {getStatusText(open, onHold)} + {getStatusText(open, onHold, !!servedBy?.username)} {canRemoveClosedChats && !open && } From 1c56af138d538cec1b2293ca6b56bd177fe5cd84 Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Thu, 18 Jul 2024 15:21:37 -0600 Subject: [PATCH 09/12] fix --- apps/meteor/server/models/raw/LivechatRooms.ts | 4 ++++ .../tests/end-to-end/api/livechat/00-rooms.ts | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/apps/meteor/server/models/raw/LivechatRooms.ts b/apps/meteor/server/models/raw/LivechatRooms.ts index ed0f29c85702..648af95ed180 100644 --- a/apps/meteor/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/server/models/raw/LivechatRooms.ts @@ -1244,6 +1244,10 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive ...(visitorId && visitorId !== 'undefined' && { 'v._id': visitorId }), }; + if (open) { + query.servedBy = { $exists: true }; + } + if (createdAt) { query.ts = {}; if (createdAt.start) { diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index a0b0472388ba..ff9ebc2d15ab 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -363,6 +363,19 @@ describe('LIVECHAT - rooms', () => { expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.not.undefined; + }); + it('should return open rooms when `open` is param is passed. Open rooms should not include queued conversations', async () => { + const visitor = await createVisitor(); + const room = await createLivechatRoom(visitor.token); + + const { room: room2 } = await startANewLivechatRoomAndTakeIt(); + + const { body } = await request.get(api('livechat/rooms')).query({ open: true }).set(credentials).expect(200); + + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; + await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); }); (IS_EE ? it : it.skip)( From 256e8d0277df2cd87fabf8696814222aa3437672 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Fri, 19 Jul 2024 09:51:16 -0300 Subject: [PATCH 10/12] :/ --- apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index ff9ebc2d15ab..b8ec7aa19269 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -362,7 +362,6 @@ describe('LIVECHAT - rooms', () => { expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.not.undefined; - }); it('should return open rooms when `open` is param is passed. Open rooms should not include queued conversations', async () => { const visitor = await createVisitor(); From 43f88dda3f6af1e7798ab6c0e8b4d8ae5f8f9838 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Fri, 19 Jul 2024 16:05:42 -0300 Subject: [PATCH 11/12] fix tests --- .../tests/end-to-end/api/livechat/00-rooms.ts | 62 ++++++++++--------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index b8ec7aa19269..4c1e3697cda0 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -377,39 +377,45 @@ describe('LIVECHAT - rooms', () => { await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); }); - (IS_EE ? it : it.skip)( - 'should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', - async () => { + describe('Queued and OnHold chats', () => { + before(async () => { await updateSetting('Livechat_allow_manual_on_hold', true); await updateSetting('Livechat_Routing_Method', 'Manual_Selection'); + }); - const { room } = await startANewLivechatRoomAndTakeIt(); - await sendAgentMessage(room._id); - const response = await request - .post(api('livechat/room.onHold')) - .set(credentials) - .send({ - roomId: room._id, - }) - .expect(200); - - expect(response.body.success).to.be.true; - - const visitor = await createVisitor(); - const room2 = await createLivechatRoom(visitor.token); - - const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onhold: true }).set(credentials).expect(200); - - expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; - expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; - expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; - expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; - expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; - + after(async () => { await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); await updateSetting('Livechat_allow_manual_on_hold', false); - }, - ); + }); + + (IS_EE ? it : it.skip)( + 'should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', + async () => { + const { room } = await startANewLivechatRoomAndTakeIt(); + await sendAgentMessage(room._id); + const response = await request + .post(api('livechat/room.onHold')) + .set(credentials) + .send({ + roomId: room._id, + }) + .expect(200); + + expect(response.body.success).to.be.true; + + const visitor = await createVisitor(); + const room2 = await createLivechatRoom(visitor.token); + + const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onhold: true }).set(credentials).expect(200); + + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; + }, + ); + }); (IS_EE ? it : it.skip)('should return only rooms with the given department', async () => { const { department } = await createDepartmentWithAnOnlineAgent(); From 54517a98fcb17213eddb1107d871ac5270a6f33a Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Fri, 19 Jul 2024 16:17:41 -0300 Subject: [PATCH 12/12] skip describe if not EE --- .../tests/end-to-end/api/livechat/00-rooms.ts | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index 4c1e3697cda0..23f6d35d2acd 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -377,7 +377,7 @@ describe('LIVECHAT - rooms', () => { await updateSetting('Livechat_Routing_Method', 'Auto_Selection'); }); - describe('Queued and OnHold chats', () => { + (IS_EE ? describe : describe.skip)('Queued and OnHold chats', () => { before(async () => { await updateSetting('Livechat_allow_manual_on_hold', true); await updateSetting('Livechat_Routing_Method', 'Manual_Selection'); @@ -388,33 +388,30 @@ describe('LIVECHAT - rooms', () => { await updateSetting('Livechat_allow_manual_on_hold', false); }); - (IS_EE ? it : it.skip)( - 'should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', - async () => { - const { room } = await startANewLivechatRoomAndTakeIt(); - await sendAgentMessage(room._id); - const response = await request - .post(api('livechat/room.onHold')) - .set(credentials) - .send({ - roomId: room._id, - }) - .expect(200); - - expect(response.body.success).to.be.true; - - const visitor = await createVisitor(); - const room2 = await createLivechatRoom(visitor.token); - - const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onhold: true }).set(credentials).expect(200); - - expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; - expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; - expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; - expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; - expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; - }, - ); + it('should not return on hold rooms along with queued rooms when `queued` is true and `onHold` is true', async () => { + const { room } = await startANewLivechatRoomAndTakeIt(); + await sendAgentMessage(room._id); + const response = await request + .post(api('livechat/room.onHold')) + .set(credentials) + .send({ + roomId: room._id, + }) + .expect(200); + + expect(response.body.success).to.be.true; + + const visitor = await createVisitor(); + const room2 = await createLivechatRoom(visitor.token); + + const { body } = await request.get(api('livechat/rooms')).query({ queued: true, onhold: true }).set(credentials).expect(200); + + expect(body.rooms.every((room: IOmnichannelRoom) => room.open)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.servedBy)).to.be.true; + expect(body.rooms.every((room: IOmnichannelRoom) => !room.onHold)).to.be.true; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room._id)).to.be.undefined; + expect(body.rooms.find((froom: IOmnichannelRoom) => froom._id === room2._id)).to.be.not.undefined; + }); }); (IS_EE ? it : it.skip)('should return only rooms with the given department', async () => { const { department } = await createDepartmentWithAnOnlineAgent();