-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix:
Waiting Queue
feature not queueing rooms (#33772)
- Loading branch information
Showing
5 changed files
with
144 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"@rocket.chat/meteor": patch | ||
--- | ||
|
||
Fixes `waiting queue` feature. When `Livechat_waiting_queue` setting is enabled, incoming conversations should be sent to the queue instead of being assigned directly. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
118 changes: 118 additions & 0 deletions
118
.../meteor/tests/e2e/omnichannel/omnichannel-livechat-queue-management-autoselection.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
import { createFakeVisitor } from '../../mocks/data'; | ||
import { IS_EE } from '../config/constants'; | ||
import { createAuxContext } from '../fixtures/createAuxContext'; | ||
import { Users } from '../fixtures/userStates'; | ||
import { HomeOmnichannel, OmnichannelLiveChat } from '../page-objects'; | ||
import { test, expect } from '../utils/test'; | ||
|
||
const firstVisitor = createFakeVisitor(); | ||
|
||
const secondVisitor = createFakeVisitor(); | ||
|
||
test.use({ storageState: Users.user1.state }); | ||
|
||
test.describe('OC - Livechat - Queue Management', () => { | ||
test.skip(!IS_EE, 'Enterprise Only'); | ||
|
||
let poHomeOmnichannel: HomeOmnichannel; | ||
let poLiveChat: OmnichannelLiveChat; | ||
|
||
const waitingQueueMessage = 'This is a message from Waiting Queue'; | ||
|
||
test.beforeAll(async ({ api, browser }) => { | ||
await Promise.all([ | ||
api.post('/settings/Livechat_Routing_Method', { value: 'Auto_Selection' }), | ||
api.post('/settings/Livechat_accept_chats_with_no_agents', { value: true }), | ||
api.post('/settings/Livechat_waiting_queue', { value: true }), | ||
api.post('/settings/Livechat_waiting_queue_message', { value: waitingQueueMessage }), | ||
api.post('/livechat/users/agent', { username: 'user1' }), | ||
]); | ||
|
||
const { page: omniPage } = await createAuxContext(browser, Users.user1, '/', true); | ||
poHomeOmnichannel = new HomeOmnichannel(omniPage); | ||
|
||
// Agent will be offline for these tests | ||
await poHomeOmnichannel.sidenav.switchOmnichannelStatus('offline'); | ||
}); | ||
|
||
test.beforeEach(async ({ browser, api }) => { | ||
const context = await browser.newContext(); | ||
const page2 = await context.newPage(); | ||
|
||
poLiveChat = new OmnichannelLiveChat(page2, api); | ||
await poLiveChat.page.goto('/livechat'); | ||
}); | ||
|
||
test.afterAll(async ({ api }) => { | ||
await Promise.all([ | ||
api.post('/settings/Livechat_waiting_queue', { value: false }), | ||
api.post('/settings/Livechat_waiting_queue_message', { value: '' }), | ||
api.delete('/livechat/users/agent/user1'), | ||
]); | ||
await poHomeOmnichannel.page.close(); | ||
}); | ||
|
||
test.describe('OC - Queue Management - Auto Selection', () => { | ||
let poLiveChat2: OmnichannelLiveChat; | ||
|
||
test.beforeEach(async ({ browser, api }) => { | ||
const context = await browser.newContext(); | ||
const page = await context.newPage(); | ||
poLiveChat2 = new OmnichannelLiveChat(page, api); | ||
await poLiveChat2.page.goto('/livechat'); | ||
}); | ||
|
||
test.afterEach(async () => { | ||
await poLiveChat2.closeChat(); | ||
await poLiveChat2.page.close(); | ||
await poLiveChat.closeChat(); | ||
await poLiveChat.page.close(); | ||
}); | ||
|
||
test('Update user position on Queue', async () => { | ||
await test.step('should start livechat session', async () => { | ||
await poLiveChat.openAnyLiveChatAndSendMessage({ | ||
liveChatUser: firstVisitor, | ||
message: 'Test message', | ||
isOffline: false, | ||
}); | ||
}); | ||
|
||
await test.step('expect to receive Waiting Queue message on chat', async () => { | ||
await expect(poLiveChat.page.locator(`div >> text=${waitingQueueMessage}`)).toBeVisible(); | ||
}); | ||
|
||
await test.step('expect to be on spot #1', async () => { | ||
await expect(poLiveChat.queuePosition(1)).toBeVisible(); | ||
}); | ||
|
||
await test.step('should start secondary livechat session', async () => { | ||
await poLiveChat2.openAnyLiveChatAndSendMessage({ | ||
liveChatUser: secondVisitor, | ||
message: 'Test message', | ||
isOffline: false, | ||
}); | ||
}); | ||
|
||
await test.step('should start secondary livechat on spot #2', async () => { | ||
await expect(poLiveChat2.queuePosition(2)).toBeVisible(); | ||
}); | ||
|
||
await test.step('should start the queue by making the agent available again', async () => { | ||
await poHomeOmnichannel.sidenav.switchOmnichannelStatus('online'); | ||
}); | ||
|
||
await test.step('user1 should get assigned to the first chat', async () => { | ||
await expect(poLiveChat.queuePosition(1)).not.toBeVisible(); | ||
}); | ||
|
||
await test.step('secondary session should be on position #1', async () => { | ||
await expect(poLiveChat2.queuePosition(1)).toBeVisible(); | ||
}); | ||
|
||
await test.step('secondary session should be taken by user1', async () => { | ||
await expect(poLiveChat2.queuePosition(1)).not.toBeVisible(); | ||
}); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters