Skip to content

Commit cccb1f2

Browse files
committed
added tests
Signed-off-by: Abhinav Kumar <[email protected]>
1 parent 9b9c8ca commit cccb1f2

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import type { IRoom } from '@rocket.chat/core-typings';
2+
3+
import { Users } from './fixtures/userStates';
4+
import { HomeChannel } from './page-objects';
5+
import { createTargetChannelAndReturnFullRoom } from './utils';
6+
import { sendFillerMessages } from './utils/sendMessage';
7+
import type { BaseTest } from './utils/test';
8+
import { expect, test } from './utils/test';
9+
10+
test.use({ storageState: Users.admin.state });
11+
12+
test.describe.serial('Thread persistence on navigation', () => {
13+
let poHomeChannel: HomeChannel;
14+
let targetChannel: IRoom;
15+
let threadParentMessageId: string;
16+
17+
const setupChannelData = async (api: BaseTest['api']) => {
18+
const rid = targetChannel._id;
19+
20+
const { message: parentMessage } = await (await api.post('/chat.postMessage', { roomId: rid, text: 'Thread parent message' })).json();
21+
threadParentMessageId = parentMessage._id;
22+
23+
await api.post('/chat.postMessage', {
24+
roomId: rid,
25+
text: 'Thread reply that should persist after navigation',
26+
tmid: parentMessage._id,
27+
});
28+
29+
await sendFillerMessages(api, rid);
30+
};
31+
32+
test.beforeAll(async ({ api }) => {
33+
const { channel } = await createTargetChannelAndReturnFullRoom(api);
34+
targetChannel = channel;
35+
await setupChannelData(api);
36+
});
37+
38+
test.afterAll(({ api }) => api.post('/channels.delete', { roomId: targetChannel._id }));
39+
40+
test.beforeEach(async ({ page }) => {
41+
poHomeChannel = new HomeChannel(page);
42+
});
43+
44+
test('expect thread content to persist after clicking Jump to recent messages', async ({ page }) => {
45+
await page.goto(`/channel/${targetChannel.name}?msg=${threadParentMessageId}`);
46+
await poHomeChannel.content.waitForChannel();
47+
48+
await expect(page).toHaveURL(/.*thread/);
49+
await expect(poHomeChannel.content.threadMessageList).toBeVisible();
50+
const threadMessageCount = await poHomeChannel.content.threadMessageListItems.count();
51+
expect(threadMessageCount).toBeGreaterThan(0);
52+
53+
const jumpToRecentButton = page.getByRole('button', { name: 'Jump to recent messages' });
54+
await expect(jumpToRecentButton).toBeVisible();
55+
await jumpToRecentButton.click();
56+
57+
await expect(page).toHaveURL(/.*thread/);
58+
await expect(poHomeChannel.content.threadMessageList).toBeVisible();
59+
await expect(poHomeChannel.content.threadMessageListItems).toHaveCount(threadMessageCount);
60+
await expect(poHomeChannel.content.threadMessageList).toContainText('Thread reply that should persist after navigation');
61+
});
62+
});

apps/meteor/tests/e2e/utils/sendMessage.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { APIRequestContext } from 'playwright-core';
22

3+
import type { BaseTest } from './test';
34
import { BASE_API_URL } from '../config/constants';
45
import type { IUserState } from '../fixtures/userStates';
56

@@ -17,3 +18,10 @@ export const sendMessageFromUser = async (request: APIRequestContext, user: IUse
1718
})
1819
.then((response) => response.json());
1920
};
21+
22+
export const sendFillerMessages = async (api: BaseTest['api'], rid: string, count = 50, batchSize = 10) => {
23+
const messages = Array.from({ length: count }, (_, i) => `filler message ${i + 1}`);
24+
for (let i = 0; i < messages.length; i += batchSize) {
25+
await Promise.all(messages.slice(i, i + batchSize).map((text) => api.post('/chat.postMessage', { roomId: rid, text })));
26+
}
27+
};

0 commit comments

Comments
 (0)