Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinSchoeler committed Mar 8, 2024
1 parent ddb3334 commit 3804b43
Showing 1 changed file with 80 additions and 14 deletions.
94 changes: 80 additions & 14 deletions apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-api.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 };
Expand Down Expand Up @@ -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);
});
Expand All @@ -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');
});

Expand All @@ -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);
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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');
});

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -717,5 +783,5 @@ test.describe('OC - Livechat API', () => {
});
});
});

});

0 comments on commit 3804b43

Please sign in to comment.