2021-02-20 05:52:06 +01:00
|
|
|
import {strict as assert} from "assert";
|
2020-08-14 20:20:53 +02:00
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
import type {Page} from "puppeteer";
|
2020-08-14 20:20:53 +02:00
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
import common from "../puppeteer_lib/common";
|
2020-08-14 20:20:53 +02:00
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function navigate_to_user_list(page: Page): Promise<void> {
|
2020-08-14 20:20:53 +02:00
|
|
|
const menu_selector = "#settings-dropdown";
|
|
|
|
await page.waitForSelector(menu_selector, {visible: true});
|
|
|
|
await page.click(menu_selector);
|
2021-03-31 08:57:11 +02:00
|
|
|
await page.click('.dropdown-menu a[href="#organization"]');
|
2020-08-14 20:20:53 +02:00
|
|
|
await page.waitForSelector("#settings_overlay_container.show", {visible: true});
|
|
|
|
await page.click("li[data-section='user-list-admin']");
|
|
|
|
}
|
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function user_row(page: Page, name: string): Promise<string> {
|
2020-08-14 20:20:53 +02:00
|
|
|
const user_id = await common.get_user_id_from_name(page, name);
|
2021-02-20 05:52:06 +01:00
|
|
|
return `.user_row[data-user-id="${CSS.escape(user_id.toString())}"]`;
|
2020-08-14 20:20:53 +02:00
|
|
|
}
|
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function test_deactivate_user(page: Page): Promise<void> {
|
2020-08-14 20:20:53 +02:00
|
|
|
const cordelia_user_row = await user_row(page, "cordelia");
|
|
|
|
await page.waitForSelector(cordelia_user_row, {visible: true});
|
|
|
|
await page.waitForSelector(cordelia_user_row + " .fa-user-times");
|
|
|
|
await page.click(cordelia_user_row + " .deactivate");
|
2021-07-05 12:41:37 +02:00
|
|
|
await page.waitForSelector("#dialog_widget_modal", {visible: true});
|
2020-08-14 20:20:53 +02:00
|
|
|
|
|
|
|
assert.strictEqual(
|
2021-07-05 12:41:37 +02:00
|
|
|
await common.get_text_from_selector(page, ".dialog_heading"),
|
2020-08-14 20:20:53 +02:00
|
|
|
"Deactivate " + (await common.get_internal_email_from_name(page, "cordelia")),
|
|
|
|
"Deactivate modal has wrong user.",
|
|
|
|
);
|
|
|
|
assert.strictEqual(
|
2021-07-05 12:41:37 +02:00
|
|
|
await common.get_text_from_selector(page, "#dialog_widget_modal .dialog_submit_button"),
|
2021-04-04 14:37:25 +02:00
|
|
|
"Confirm",
|
2020-08-14 20:20:53 +02:00
|
|
|
"Deactivate button has incorrect text.",
|
|
|
|
);
|
2021-07-05 12:41:37 +02:00
|
|
|
await page.click("#dialog_widget_modal .dialog_submit_button");
|
2020-08-14 20:20:53 +02:00
|
|
|
await page.waitForSelector("#user-field-status", {hidden: true});
|
|
|
|
}
|
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function test_reactivate_user(page: Page): Promise<void> {
|
2020-08-14 20:20:53 +02:00
|
|
|
let cordelia_user_row = await user_row(page, "cordelia");
|
|
|
|
await page.waitForSelector(cordelia_user_row + ".deactivated_user");
|
|
|
|
await page.waitForSelector(cordelia_user_row + " .fa-user-plus");
|
|
|
|
await page.click(cordelia_user_row + " .reactivate");
|
|
|
|
|
|
|
|
await page.waitForSelector(cordelia_user_row + ":not(.deactivated_user)", {visible: true});
|
|
|
|
cordelia_user_row = await user_row(page, "cordelia");
|
|
|
|
await page.waitForSelector(cordelia_user_row + " .fa-user-times");
|
|
|
|
await page.waitForSelector("#user-field-status", {hidden: true});
|
|
|
|
}
|
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function test_deactivated_users_section(page: Page): Promise<void> {
|
2020-08-14 20:20:53 +02:00
|
|
|
const cordelia_user_row = await user_row(page, "cordelia");
|
|
|
|
await test_deactivate_user(page);
|
|
|
|
|
|
|
|
// "Deactivated users" section doesn't render just deactivated users until reloaded.
|
|
|
|
await page.reload();
|
|
|
|
const deactivated_users_section = "li[data-section='deactivated-users-admin']";
|
|
|
|
await page.waitForSelector(deactivated_users_section, {visible: true});
|
|
|
|
await page.click(deactivated_users_section);
|
|
|
|
|
|
|
|
await page.waitForSelector(
|
|
|
|
"#admin_deactivated_users_table " + cordelia_user_row + " .reactivate",
|
|
|
|
{visible: true},
|
|
|
|
);
|
|
|
|
await page.click("#admin_deactivated_users_table " + cordelia_user_row + " .reactivate");
|
|
|
|
await page.waitForSelector(
|
|
|
|
"#admin_deactivated_users_table " + cordelia_user_row + " button:not(.reactivate)",
|
|
|
|
{visible: true},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function test_bot_deactivation_and_reactivation(page: Page): Promise<void> {
|
2020-08-14 20:20:53 +02:00
|
|
|
await page.click("li[data-section='bot-list-admin']");
|
|
|
|
|
|
|
|
const default_bot_user_row = await user_row(page, "Zulip Default Bot");
|
|
|
|
|
|
|
|
await page.click(default_bot_user_row + " .deactivate");
|
|
|
|
await page.waitForSelector(default_bot_user_row + ".deactivated_user", {visible: true});
|
|
|
|
await page.waitForSelector(default_bot_user_row + " .fa-user-plus");
|
|
|
|
await page.waitForSelector("#bot-field-status", {hidden: true});
|
|
|
|
|
|
|
|
await page.click(default_bot_user_row + " .reactivate");
|
|
|
|
await page.waitForSelector(default_bot_user_row + ":not(.deactivated_user)", {visible: true});
|
|
|
|
await page.waitForSelector(default_bot_user_row + " .fa-user-times");
|
|
|
|
}
|
|
|
|
|
2021-02-20 05:52:06 +01:00
|
|
|
async function user_deactivation_test(page: Page): Promise<void> {
|
2020-08-14 20:20:53 +02:00
|
|
|
await common.log_in(page);
|
|
|
|
await navigate_to_user_list(page);
|
|
|
|
await test_deactivate_user(page);
|
|
|
|
await test_reactivate_user(page);
|
|
|
|
await test_deactivated_users_section(page);
|
|
|
|
await test_bot_deactivation_and_reactivation(page);
|
|
|
|
}
|
|
|
|
|
|
|
|
common.run_test(user_deactivation_test);
|