Files
zulip/web/e2e-tests/navigation.test.ts
Akshat 7a448010e2 message_view_header: Fix bad rendering of stream links in description.
This bad rendering was the result of unwanted css applied
in the stream description. In message view header, the stream
link (title) we have defined has css defined but the markdown
rendered stream link in stream description had the same class
resulting in unwanted css applied to it.

Fixes: #25961.

Signed-off-by: Akshat <akshat25iiit@gmail.com>
(cherry picked from commit d302ac4a18)
2023-07-19 18:02:27 -04:00

116 lines
4.3 KiB
TypeScript

import {strict as assert} from "assert";
import type {Page} from "puppeteer";
import * as common from "./lib/common";
async function navigate_using_left_sidebar(page: Page, click_target: string): Promise<void> {
console.log("Visiting #" + click_target);
await page.click(`#left-sidebar a[href='#${CSS.escape(click_target)}']`);
await page.waitForSelector(`#message_feed_container`, {visible: true});
}
async function open_menu(page: Page): Promise<void> {
const menu_selector = "#settings-dropdown";
await page.waitForSelector(menu_selector, {visible: true});
await page.click(menu_selector);
}
async function navigate_to_settings(page: Page): Promise<void> {
console.log("Navigating to settings");
await open_menu(page);
const settings_selector = ".dropdown-menu a[href^='#settings']";
await page.waitForSelector(settings_selector, {visible: true});
await page.click(settings_selector);
const profile_section_tab_selector = "li[data-section='profile']";
await page.waitForSelector(profile_section_tab_selector, {visible: true});
await page.click(profile_section_tab_selector);
await page.waitForFunction(
() => document.activeElement?.getAttribute("data-section") === "profile",
);
await page.click("#settings_page .content-wrapper .exit");
// Wait until the overlay is completely closed.
await page.waitForSelector("#settings_overlay_container", {hidden: true});
}
async function navigate_to_subscriptions(page: Page): Promise<void> {
console.log("Navigate to subscriptions");
await open_menu(page);
const manage_streams_selector = '.dropdown-menu a[href^="#streams"]';
await page.waitForSelector(manage_streams_selector, {visible: true});
await page.click(manage_streams_selector);
await page.waitForSelector("#subscription_overlay", {visible: true});
await page.click("#subscription_overlay .exit");
// Wait until the overlay is completely closed.
await page.waitForSelector("#subscription_overlay", {hidden: true});
}
async function navigate_to_private_messages(page: Page): Promise<void> {
console.log("Navigate to private messages");
const all_private_messages_icon = "#show_all_private_messages";
await page.waitForSelector(all_private_messages_icon, {visible: true});
await page.click(all_private_messages_icon);
await page.waitForSelector("#message_view_header .fa-envelope", {visible: true});
}
async function test_reload_hash(page: Page): Promise<void> {
const initial_page_load_time = await page.evaluate(
(): number => zulip_test.page_params.page_load_time,
);
console.log(`initial load time: ${initial_page_load_time}`);
const initial_hash = await page.evaluate(() => window.location.hash);
await page.evaluate(() => zulip_test.initiate_reload({immediate: true}));
await page.waitForNavigation();
await page.waitForSelector("#zfilt", {visible: true});
const page_load_time = await page.evaluate(() => zulip_test.page_params.page_load_time);
assert.ok(page_load_time > initial_page_load_time, "Page not reloaded.");
const hash = await page.evaluate(() => window.location.hash);
assert.strictEqual(hash, initial_hash, "Hash not preserved.");
}
async function navigation_tests(page: Page): Promise<void> {
await common.log_in(page);
await navigate_to_settings(page);
const verona_id = await page.evaluate((): number => zulip_test.get_stream_id("Verona"));
const verona_narrow = `narrow/stream/${verona_id}-Verona`;
await navigate_using_left_sidebar(page, verona_narrow);
await page.click(".home-link");
await page.waitForSelector("#message_feed_container", {visible: true});
await navigate_to_subscriptions(page);
await navigate_using_left_sidebar(page, "all_messages");
await navigate_to_settings(page);
await navigate_to_private_messages(page);
await navigate_to_subscriptions(page);
await navigate_using_left_sidebar(page, verona_narrow);
await test_reload_hash(page);
// Verify that we're narrowed to the target stream
await page.waitForSelector(
`xpath///*[@id="message_view_header"]//*[${common.has_class_x(
"message-header-stream-settings-button",
)} and normalize-space()="Verona"]`,
);
}
common.run_test(navigation_tests);