1+ import { faker } from '@faker-js/faker' ;
12import type { Credentials } from '@rocket.chat/api-client' ;
2- import { UserStatus , type ILivechatDepartment , type IUser } from '@rocket.chat/core-typings' ;
3+ import { UserStatus } from '@rocket.chat/core-typings' ;
4+ import type { ILivechatDepartment , IUser } from '@rocket.chat/core-typings' ;
35import { expect } from 'chai' ;
46import { after , before , describe , it } from 'mocha' ;
57
6- import { getCredentials , request , api } from '../../../data/api-data' ;
8+ import { getCredentials , request , api , credentials } from '../../../data/api-data' ;
79import {
810 createAgent ,
911 makeAgentAvailable ,
@@ -33,7 +35,9 @@ import { IS_EE } from '../../../e2e/config/constants';
3335
3436 let testUser : { user : IUser ; credentials : Credentials } ;
3537 let testUser2 : { user : IUser ; credentials : Credentials } ;
38+ let testUser3 : { user : IUser ; credentials : Credentials } ;
3639 let testDepartment : ILivechatDepartment ;
40+ let visitorEmail : string ;
3741
3842 before ( async ( ) => {
3943 const user = await createUser ( ) ;
@@ -60,14 +64,43 @@ import { IS_EE } from '../../../e2e/config/constants';
6064 } ) ;
6165
6266 before ( async ( ) => {
63- testDepartment = await createDepartment ( [ { agentId : testUser . user . _id } ] ) ;
67+ const user = await createUser ( ) ;
68+ await createAgent ( user . username ) ;
69+ const credentials3 = await login ( user . username , password ) ;
70+ await makeAgentAvailable ( credentials3 ) ;
71+
72+ testUser3 = {
73+ user,
74+ credentials : credentials3 ,
75+ } ;
6476 } ) ;
6577
66- after ( async ( ) => {
67- await deleteUser ( testUser . user ) ;
68- await deleteUser ( testUser2 . user ) ;
78+ before ( async ( ) => {
79+ testDepartment = await createDepartment ( [ { agentId : testUser . user . _id } , { agentId : testUser3 . user . _id } ] ) ;
80+ await updateSetting ( 'Livechat_assign_new_conversation_to_bot' , true ) ;
81+
82+ const visitorName = faker . person . fullName ( ) ;
83+ visitorEmail = faker . internet . email ( ) . toLowerCase ( ) ;
84+ await request
85+ . post ( api ( 'omnichannel/contacts' ) )
86+ . set ( credentials )
87+ . send ( {
88+ name : visitorName ,
89+ emails : [ visitorEmail ] ,
90+ phones : [ ] ,
91+ contactManager : testUser3 . user . _id ,
92+ } ) ;
6993 } ) ;
7094
95+ after ( async ( ) =>
96+ Promise . all ( [
97+ deleteUser ( testUser . user ) ,
98+ deleteUser ( testUser2 . user ) ,
99+ deleteUser ( testUser3 . user ) ,
100+ updateSetting ( 'Livechat_assign_new_conversation_to_bot' , false ) ,
101+ ] ) ,
102+ ) ;
103+
71104 it ( 'should route a room to an available agent' , async ( ) => {
72105 const visitor = await createVisitor ( testDepartment . _id ) ;
73106 const room = await createLivechatRoom ( visitor . token ) ;
@@ -91,9 +124,24 @@ import { IS_EE } from '../../../e2e/config/constants';
91124 expect ( roomInfo . servedBy ) . to . be . an ( 'object' ) ;
92125 expect ( roomInfo . servedBy ?. _id ) . to . not . be . equal ( testUser2 . user . _id ) ;
93126 } ) ;
127+ ( IS_EE ? it : it . skip ) (
128+ 'should route to contact manager if it is online and Livechat_assign_new_conversation_to_bot is enabled' ,
129+ async ( ) => {
130+ const visitor = await createVisitor ( testDepartment . _id , faker . person . fullName ( ) , visitorEmail ) ;
131+ const room = await createLivechatRoom ( visitor . token ) ;
132+
133+ await sleep ( 5000 ) ;
134+
135+ const roomInfo = await getLivechatRoomInfo ( room . _id ) ;
136+
137+ expect ( roomInfo . servedBy ) . to . be . an ( 'object' ) ;
138+ expect ( roomInfo . servedBy ?. _id ) . to . be . equal ( testUser3 . user . _id ) ;
139+ } ,
140+ ) ;
94141 it ( 'should fail to start a conversation if there is noone available and Livechat_accept_chats_with_no_agents is false' , async ( ) => {
95142 await updateSetting ( 'Livechat_accept_chats_with_no_agents' , false ) ;
96143 await makeAgentUnavailable ( testUser . credentials ) ;
144+ await makeAgentUnavailable ( testUser3 . credentials ) ;
97145
98146 const visitor = await createVisitor ( testDepartment . _id ) ;
99147 const { body } = await request . get ( api ( 'livechat/room' ) ) . query ( { token : visitor . token } ) . expect ( 400 ) ;
@@ -147,6 +195,21 @@ import { IS_EE } from '../../../e2e/config/constants';
147195 const roomInfo = await getLivechatRoomInfo ( room . _id ) ;
148196 expect ( roomInfo . servedBy ) . to . be . undefined ;
149197 } ) ;
198+ ( IS_EE ? it : it . skip ) (
199+ 'should route to another available agent if contact manager is unavailable and Livechat_assign_new_conversation_to_bot is enabled' ,
200+ async ( ) => {
201+ await makeAgentAvailable ( testUser . credentials ) ;
202+ const visitor = await createVisitor ( testDepartment . _id , faker . person . fullName ( ) , visitorEmail ) ;
203+ const room = await createLivechatRoom ( visitor . token ) ;
204+
205+ await sleep ( 5000 ) ;
206+
207+ const roomInfo = await getLivechatRoomInfo ( room . _id ) ;
208+
209+ expect ( roomInfo . servedBy ) . to . be . an ( 'object' ) ;
210+ expect ( roomInfo . servedBy ?. _id ) . to . be . equal ( testUser . user . _id ) ;
211+ } ,
212+ ) ;
150213 } ) ;
151214 describe ( 'Load Balancing' , ( ) => {
152215 before ( async ( ) => {
0 commit comments