Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import {expect, test} from '@mattermost/playwright-lib';

test('MM-65630-1 Search results should show popout button that opens results in a new window', async ({pw}) => {
const {adminClient, user, team} = await pw.initSetup();

const channel = await adminClient.createChannel(
pw.random.channel({
teamId: team.id,
displayName: 'Search Popout Channel',
name: 'search-popout-channel',
}),
);
await adminClient.addToChannel(user.id, channel.id);

const uniqueText = `popout-search-test-${await pw.random.id()}`;
await adminClient.createPost({
channel_id: channel.id,
message: uniqueText,
});

const {channelsPage} = await pw.testBrowser.login(user);
await channelsPage.goto(team.name, channel.name);
await channelsPage.toBeVisible();

const page = channelsPage.page;

await channelsPage.globalHeader.openSearch();
await channelsPage.searchBox.searchInput.fill(uniqueText);
await channelsPage.searchBox.searchInput.press('Enter');

await expect(page.locator('#searchContainer')).toBeVisible();
await expect(page.locator('#searchContainer').getByText(uniqueText)).toBeVisible();

const popoutButton = page.locator('.PopoutButton');
await expect(popoutButton).toBeVisible();

const [popoutPage] = await Promise.all([page.waitForEvent('popup'), popoutButton.click()]);

await popoutPage.waitForLoadState('domcontentloaded');
const popoutUrl = popoutPage.url();
expect(popoutUrl).toContain('/_popout/rhs/');
expect(popoutUrl).toContain('/search');
expect(popoutUrl).toContain(`q=${encodeURIComponent(uniqueText)}`);
expect(popoutUrl).toContain('mode=search');

await expect(popoutPage.locator('#searchContainer')).toBeVisible({timeout: 10000});
await expect(popoutPage.locator('#searchContainer').getByText(uniqueText)).toBeVisible({timeout: 10000});

await popoutPage.close();
});

test('MM-65630-2 Recent mentions popout should open with the right results', async ({pw}) => {
const {adminClient, user, team} = await pw.initSetup();

const channel = await adminClient.createChannel(
pw.random.channel({
teamId: team.id,
displayName: 'Mentions Popout Channel',
name: 'mentions-popout-channel',
}),
);
await adminClient.addToChannel(user.id, channel.id);

const mentionText = `hey @${user.username} check this mention-${await pw.random.id()}`;
await adminClient.createPost({
channel_id: channel.id,
message: mentionText,
});

const {channelsPage} = await pw.testBrowser.login(user);
await channelsPage.goto(team.name, channel.name);
await channelsPage.toBeVisible();

const page = channelsPage.page;

await channelsPage.globalHeader.openRecentMentions();

await expect(page.locator('#searchContainer')).toBeVisible();
await expect(page.locator('#searchContainer').getByRole('heading', {name: 'Recent Mentions'})).toBeVisible();
await expect(page.locator('#searchContainer').getByText(mentionText)).toBeVisible();

const popoutButton = page.locator('.PopoutButton');
await expect(popoutButton).toBeVisible();

const [popoutPage] = await Promise.all([page.waitForEvent('popup'), popoutButton.click()]);

await popoutPage.waitForLoadState('domcontentloaded');
const popoutUrl = popoutPage.url();
expect(popoutUrl).toContain('/_popout/rhs/');
expect(popoutUrl).toContain('/search');
expect(popoutUrl).toContain('mode=mention');

await expect(popoutPage.locator('#searchContainer')).toBeVisible({timeout: 10000});
await expect(popoutPage.locator('#searchContainer').getByText(mentionText)).toBeVisible({timeout: 10000});

await popoutPage.close();
});

test('MM-65630-3 Saved messages popout should open with the right results', async ({pw}) => {
const {adminClient, user, userClient, team} = await pw.initSetup();

const channel = await adminClient.createChannel(
pw.random.channel({
teamId: team.id,
displayName: 'Saved Popout Channel',
name: 'saved-popout-channel',
}),
);
await adminClient.addToChannel(user.id, channel.id);

const savedText = `saved-message-test-${await pw.random.id()}`;
const post = await adminClient.createPost({
channel_id: channel.id,
message: savedText,
});

await userClient.savePreferences(user.id, [
{
user_id: user.id,
category: 'flagged_post',
name: post.id,
value: 'true',
},
]);

const {channelsPage} = await pw.testBrowser.login(user);
await channelsPage.goto(team.name, channel.name);
await channelsPage.toBeVisible();

const page = channelsPage.page;

await channelsPage.globalHeader.savedMessagesButton.click();

await expect(page.locator('#searchContainer')).toBeVisible();
await expect(page.locator('#searchContainer').getByRole('heading', {name: 'Saved messages'})).toBeVisible();
await expect(page.locator('#searchContainer').getByText(savedText)).toBeVisible();

const popoutButton = page.locator('.PopoutButton');
await expect(popoutButton).toBeVisible();

const [popoutPage] = await Promise.all([page.waitForEvent('popup'), popoutButton.click()]);

await popoutPage.waitForLoadState('domcontentloaded');
const popoutUrl = popoutPage.url();
expect(popoutUrl).toContain('/_popout/rhs/');
expect(popoutUrl).toContain('/search');
expect(popoutUrl).toContain('mode=flag');

await expect(popoutPage.locator('#searchContainer')).toBeVisible({timeout: 10000});
await expect(popoutPage.locator('#searchContainer').getByText(savedText)).toBeVisible({timeout: 10000});

await popoutPage.close();
});

test('MM-65630-4 Search popout should not show popout button in the popout window itself', async ({pw}) => {
const {adminClient, user, team} = await pw.initSetup();

const channel = await adminClient.createChannel(
pw.random.channel({
teamId: team.id,
displayName: 'Popout No Button Channel',
name: 'popout-no-button-channel',
}),
);
await adminClient.addToChannel(user.id, channel.id);

const uniqueText = `no-button-test-${await pw.random.id()}`;
await adminClient.createPost({
channel_id: channel.id,
message: uniqueText,
});

const {channelsPage} = await pw.testBrowser.login(user);
await channelsPage.goto(team.name, channel.name);
await channelsPage.toBeVisible();

const page = channelsPage.page;

await channelsPage.globalHeader.openSearch();
await channelsPage.searchBox.searchInput.fill(uniqueText);
await channelsPage.searchBox.searchInput.press('Enter');

await expect(page.locator('#searchContainer')).toBeVisible();

const [popoutPage] = await Promise.all([page.waitForEvent('popup'), page.locator('.PopoutButton').click()]);

await popoutPage.waitForLoadState('domcontentloaded');
await expect(popoutPage.locator('#searchContainer')).toBeVisible({timeout: 10000});

await expect(popoutPage.locator('.PopoutButton')).not.toBeVisible();

await expect(popoutPage.locator('#searchResultsCloseButton')).not.toBeVisible();

await popoutPage.close();
});

test('MM-65630-5 Search popout should preserve search type (files) in the URL', async ({pw}) => {
const {adminClient, user, team} = await pw.initSetup();

const channel = await adminClient.createChannel(
pw.random.channel({
teamId: team.id,
displayName: 'Files Search Channel',
name: 'files-search-channel',
}),
);
await adminClient.addToChannel(user.id, channel.id);

const {channelsPage} = await pw.testBrowser.login(user);
await channelsPage.goto(team.name, channel.name);
await channelsPage.toBeVisible();

const page = channelsPage.page;

await channelsPage.globalHeader.openSearch();
await channelsPage.searchBox.searchInput.fill('test');
await channelsPage.searchBox.searchInput.press('Enter');

await expect(page.locator('#searchContainer')).toBeVisible();

const filesTab = page.locator('#searchContainer').getByRole('tab', {name: /Files/});
await filesTab.click();

const popoutButton = page.locator('.PopoutButton');
await expect(popoutButton).toBeVisible();

const [popoutPage] = await Promise.all([page.waitForEvent('popup'), popoutButton.click()]);

await popoutPage.waitForLoadState('domcontentloaded');
const popoutUrl = popoutPage.url();
expect(popoutUrl).toContain('type=files');

await popoutPage.close();
});
2 changes: 1 addition & 1 deletion server/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ PLUGIN_PACKAGES += mattermost-plugin-agents-v1.7.2
PLUGIN_PACKAGES += mattermost-plugin-boards-v9.2.2
PLUGIN_PACKAGES += mattermost-plugin-user-survey-v1.1.1
PLUGIN_PACKAGES += mattermost-plugin-mscalendar-v1.6.0
PLUGIN_PACKAGES += mattermost-plugin-msteams-meetings-v2.4.0
PLUGIN_PACKAGES += mattermost-plugin-msteams-meetings-v2.4.1
PLUGIN_PACKAGES += mattermost-plugin-metrics-v0.7.0
PLUGIN_PACKAGES += mattermost-plugin-channel-export-v1.3.0

Expand Down
Loading
Loading