Files
zulip/frontend_tests/node_tests/common.js
Gaurav Pandey fa235e60ff login: Add show password feature to login page.
The show password feature is a functionality to
toggle the visibility of the password fields in forms
so that one can check if they have entered the correct
password or not. We implement this using an eye icon
toggling which converts input field type from password
to text and vice-versa.
Fixes part of #17301.
2021-04-23 15:01:37 -07:00

161 lines
4.4 KiB
JavaScript

"use strict";
const {strict: assert} = require("assert");
const {mock_cjs, set_global, zrequire} = require("../zjsunit/namespace");
const {run_test} = require("../zjsunit/test");
const $ = require("../zjsunit/zjquery");
mock_cjs("jquery", $);
const noop = () => {};
set_global("document", {});
const common = zrequire("common");
run_test("basics", () => {
common.autofocus("#home");
$.get_initialize_function()();
assert($("#home").is_focused());
$.clear_initialize_function();
});
run_test("phrase_match", () => {
assert(common.phrase_match("tes", "test"));
assert(common.phrase_match("Tes", "test"));
assert(common.phrase_match("Tes", "Test"));
assert(common.phrase_match("tes", "Stream Test"));
assert(!common.phrase_match("tests", "test"));
assert(!common.phrase_match("tes", "hostess"));
});
run_test("copy_data_attribute_value", (override) => {
const admin_emails_val = "iago@zulip.com";
const input = $.create("input");
let removed;
input.remove = () => {
removed = true;
};
override(document, "createElement", () => input);
override(document, "execCommand", noop);
$("body").append = noop;
$(input).val = (arg) => {
assert.equal(arg, admin_emails_val);
return {
trigger: noop,
};
};
const elem = {};
let faded_in = false;
let faded_out = false;
elem.data = (key) => {
assert.equal(key, "admin-emails");
return admin_emails_val;
};
elem.fadeOut = (val) => {
assert.equal(val, 250);
faded_out = true;
};
elem.fadeIn = (val) => {
assert.equal(val, 1000);
faded_in = true;
};
common.copy_data_attribute_value(elem, "admin-emails");
assert(removed);
assert(faded_in);
assert(faded_out);
});
run_test("adjust_mac_shortcuts non-mac", (override) => {
override(common, "has_mac_keyboard", () => false);
// The adjust_mac_shortcuts has a really simple guard
// at the top, and we just test the early-return behavior
// by trying to pass it garbage.
common.adjust_mac_shortcuts("selector-that-does-not-exist");
});
run_test("adjust_mac_shortcuts mac", (override) => {
const keys_to_test_mac = new Map([
["Backspace", "Delete"],
["Enter", "Return"],
["Home", "Fn + ←"],
["End", "Fn + →"],
["PgUp", "Fn + ↑"],
["PgDn", "Fn + ↓"],
["X + Shift", "X + Shift"],
["⌘ + Return", "⌘ + Return"],
["Enter or Backspace", "Return or Delete"],
["Ctrl", "⌘"],
["Ctrl + Shift", "⌘ + Shift"],
["Ctrl + Backspace + End", "⌘ + Delete + Fn + →"],
]);
override(common, "has_mac_keyboard", () => true);
const test_items = [];
let key_no = 1;
for (const [old_key, mac_key] of keys_to_test_mac) {
const test_item = {};
const stub = $.create("hotkey_" + key_no);
stub.text(old_key);
assert.equal(stub.hasClass("mac-cmd-key"), false);
test_item.stub = stub;
test_item.mac_key = mac_key;
test_item.is_cmd_key = old_key.includes("Ctrl");
test_items.push(test_item);
key_no += 1;
}
const children = test_items.map((test_item) => ({to_$: () => test_item.stub}));
$.create(".markdown_content", {children});
const require_cmd = true;
common.adjust_mac_shortcuts(".markdown_content", require_cmd);
for (const test_item of test_items) {
assert.equal(test_item.stub.hasClass("mac-cmd-key"), test_item.is_cmd_key);
assert.equal(test_item.stub.text(), test_item.mac_key);
}
});
run_test("show password", () => {
const password_selector = ".password_visibility_toggle";
function set_attribute(type) {
$("#id_password").attr("type", type);
}
function check_assertion(type, present_class, absent_class) {
assert.equal($("#id_password").attr("type"), type);
assert($(password_selector).hasClass(present_class));
assert(!$(password_selector).hasClass(absent_class));
}
const ev = {
preventDefault: () => {},
stopPropagation: () => {},
};
set_attribute("password");
common.setup_password_visibility_toggle("#id_password", password_selector);
const handler = $(password_selector).get_on_handler("click");
handler(ev);
check_assertion("text", "fa-eye", "fa-eye-slash");
handler(ev);
check_assertion("password", "fa-eye-slash", "fa-eye");
});