-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ddb3334
commit 3804b43
Showing
1 changed file
with
80 additions
and
14 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 |
---|---|---|
|
@@ -32,7 +32,7 @@ declare const window: Window & { | |
setAgent: (agent: { username: string; _id: string }) => void; | ||
setBusinessUnit: (businessUnit?: string) => void; | ||
setCustomField: (field: { key: string; value: string }) => void; | ||
setDepartment: (department: { _id: string; name: string }) => void; | ||
setDepartment: (dep: string) => void; | ||
setGuestEmail: (email: string) => void; | ||
setGuestName: (name: string) => void; | ||
setGuestToken: (token: string) => void; | ||
|
@@ -55,9 +55,9 @@ declare const window: Window & { | |
}; | ||
}; | ||
|
||
test.describe('OC - Livechat API', () => { | ||
// TODO: Check if there is a way to add livechat to the global window object | ||
test.describe.only('OC - Livechat API', () => { | ||
// TODO: Check if there is a way to add livechat to the global window object | ||
|
||
test.describe('Basic Widget Interactions', () => { | ||
// Tests that rely only on the widget itself, without requiring further interaction from the main RC app | ||
let poAuxContext: { page: Page; poHomeOmnichannel: HomeOmnichannel }; | ||
|
@@ -213,27 +213,49 @@ test.describe('OC - Livechat API', () => { | |
test.skip(!IS_EE, 'Enterprise Only'); | ||
// Tests that requires interaction from an agent or more | ||
let poAuxContext: { page: Page; poHomeOmnichannel: HomeOmnichannel }; | ||
let poAuxContext2: { page: Page; poHomeOmnichannel: HomeOmnichannel }; | ||
let poLiveChat: OmnichannelLiveChatEmbedded; | ||
let page: Page; | ||
let depId: string; | ||
let dep2Id: string; | ||
let agent: Awaited<ReturnType<typeof createAgent>>; | ||
let agent2: Awaited<ReturnType<typeof createAgent>>; | ||
|
||
test.beforeAll(async ({ api }) => { | ||
agent = await createAgent(api, 'user1') | ||
|
||
const response = await api.post('/livechat/department', {department: { | ||
agent2 = await createAgent(api, 'user2') | ||
|
||
const dep1 = await api.post('/livechat/department', {department: { | ||
enabled: true, | ||
email: faker.internet.email(), | ||
showOnRegistration: true, | ||
showOnOfflineForm: true, | ||
name: `new department ${Date.now()}`, | ||
description: 'created from api', | ||
|
||
}}); | ||
|
||
expect(response.status()).toBe(200); | ||
|
||
const resBody = await response.json(); | ||
depId = resBody.department._id; | ||
const dep2 = await api.post('/livechat/department', {department: { | ||
enabled: true, | ||
email: faker.internet.email(), | ||
showOnRegistration: true, | ||
showOnOfflineForm: true, | ||
name: `new department ${Date.now()}`, | ||
description: 'created from api', | ||
}}); | ||
|
||
expect(dep1.status()).toBe(200); | ||
expect(dep2.status()).toBe(200); | ||
|
||
const dep1Body = await dep1.json(); | ||
depId = dep1Body.department._id; | ||
const dep2Body = await dep1.json(); | ||
dep2Id = dep2Body.department._id; | ||
|
||
// Assign agents to deps | ||
await api.post('/v1/livechat/department/:_id/agents', { departmentId: depId, agentId: 'user1' }); | ||
await api.post('/v1/livechat/department/:_id/agents', { departmentId: dep2Id, agentId: 'user2' }); | ||
|
||
await expect((await api.post('/settings/Enable_CSP', { value: false })).status()).toBe(200); | ||
await expect((await api.post('/settings/Livechat_offline_email', { value: '[email protected]' })).status()).toBe(200); | ||
}); | ||
|
@@ -253,6 +275,11 @@ test.describe('OC - Livechat API', () => { | |
await poAuxContext.poHomeOmnichannel.sidenav.switchStatus('online'); | ||
} | ||
|
||
if (testInfo.title === 'OC - Livechat API - setDepartment') { | ||
const { page: pageCtx2 } = await createAuxContext(browser, Users.user2); | ||
poAuxContext2 = { page: pageCtx2, poHomeOmnichannel: new HomeOmnichannel(pageCtx) }; | ||
} | ||
|
||
await page.goto('/packages/rocketchat_livechat/assets/demo.html'); | ||
}); | ||
|
||
|
@@ -264,6 +291,7 @@ test.describe('OC - Livechat API', () => { | |
test.afterAll(async ({ api }) => { | ||
await expect((await api.post('/settings/Enable_CSP', { value: true })).status()).toBe(200); | ||
await agent.delete(); | ||
await agent2.delete(); | ||
await expect((await api.post('/settings/Omnichannel_enable_department_removal', { value: true })).status()).toBe(200); | ||
const response = await api.delete(`/livechat/department/${depId}`, { name: 'TestDep', email: '[email protected]' }); | ||
expect(response.status()).toBe(200); | ||
|
@@ -315,6 +343,44 @@ test.describe('OC - Livechat API', () => { | |
}); | ||
}); | ||
|
||
test('OC - Livechat API - setDepartment', async () => { | ||
|
||
const registerGuestVisitor = { | ||
name: faker.person.firstName(), | ||
email: faker.internet.email(), | ||
token: faker.string.uuid(), | ||
}; | ||
|
||
// Start Chat | ||
await poLiveChat.page.evaluate(() => window.RocketChat.livechat.maximizeWidget()); | ||
await expect(page.frameLocator('#rocketchat-iframe').getByText('Start Chat')).toBeVisible(); | ||
|
||
await poLiveChat.page.evaluate( | ||
(registerGuestVisitor) => window.RocketChat.livechat.registerGuest(registerGuestVisitor), | ||
registerGuestVisitor, | ||
); | ||
|
||
await expect(page.frameLocator('#rocketchat-iframe').getByText('Start Chat')).not.toBeVisible(); | ||
|
||
await poLiveChat.onlineAgentMessage.type('this_a_test_message_from_visitor'); | ||
await poLiveChat.btnSendMessageToOnlineAgent.click(); | ||
|
||
await test.step('Expect registered guest to be in dep1', async () => { | ||
await poAuxContext.poHomeOmnichannel.sidenav.openChat(registerGuestVisitor.name); | ||
}); | ||
|
||
await test.step('Expect setDepartment to change a guest department', async () => { | ||
await poLiveChat.page.evaluate( | ||
(depId) => window.RocketChat.livechat.setDepartment(depId), | ||
depId, | ||
); | ||
}); | ||
|
||
await test.step('Expect registered guest to be in dep2', async () => { | ||
await poAuxContext2.poHomeOmnichannel.sidenav.openChat(registerGuestVisitor.name); | ||
}); | ||
}); | ||
|
||
test('OC - Livechat API - registerGuest', async ({ browser }) => { | ||
const registerGuestVisitor = { | ||
name: faker.person.firstName(), | ||
|
@@ -495,14 +561,14 @@ test.describe('OC - Livechat API', () => { | |
|
||
const { page: pageCtx } = await createAuxContext(browser, Users.user1); | ||
poAuxContext = { page: pageCtx, poHomeOmnichannel: new HomeOmnichannel(pageCtx) }; | ||
|
||
// This is needed since the livechat will not react to online/offline status changes if already loaded in a page | ||
if (testInfo.title === 'Expect onOfflineFormSubmit to trigger callback') { | ||
await poAuxContext.poHomeOmnichannel.sidenav.switchStatus('offline'); | ||
} else { | ||
await poAuxContext.poHomeOmnichannel.sidenav.switchStatus('online'); | ||
} | ||
|
||
await page.goto('/packages/rocketchat_livechat/assets/demo.html'); | ||
}); | ||
|
||
|
@@ -635,7 +701,7 @@ test.describe('OC - Livechat API', () => { | |
await poLiveChat.sendMessage(newVisitor, false); | ||
await poLiveChat.onlineAgentMessage.type('this_a_test_message_from_visitor'); | ||
await poLiveChat.btnSendMessageToOnlineAgent.click(); | ||
|
||
|
||
const watchForTrigger = page.waitForFunction(() => window.onAgentStatusChange === true); | ||
|
||
|
@@ -717,5 +783,5 @@ test.describe('OC - Livechat API', () => { | |
}); | ||
}); | ||
}); | ||
|
||
}); |