Files
2026-07-13 13:39:12 +08:00

80 lines
2.6 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
maskEmail,
maskEmailLikeValue,
pickDisplayValue,
pickMaskedDisplayValue,
} from "../../src/shared/utils/maskEmail.ts";
describe("maskEmail", () => {
it("masks standard email correctly", () => {
assert.equal(maskEmail("diego.souza@gmail.com"), "die********@******com");
});
it("masks email with short username (exactly visibleChars)", () => {
// username "ab" has length 2 = visibleChars, so returns as-is
assert.equal(maskEmail("ab@gmail.com"), "ab@gmail.com");
});
it("masks email with longer username", () => {
const result = maskEmail("hello@example.com");
assert.equal(result, "hel**@********com");
});
it("returns empty string for null", () => {
assert.equal(maskEmail(null), "");
});
it("returns empty string for undefined", () => {
assert.equal(maskEmail(undefined), "");
});
it("returns empty string for empty string", () => {
assert.equal(maskEmail(""), "");
});
it("returns original if no @ symbol", () => {
assert.equal(maskEmail("notanemail"), "notanemail");
});
it("handles multi-part TLDs correctly", () => {
assert.equal(maskEmail("diego.souza@outlook.com.br"), "die********@***********.br");
assert.equal(maskEmail("evelyn@outlook.com.br"), "eve***@***********.br");
});
it("handles single-char domain name", () => {
assert.equal(maskEmail("user@x.com"), "use*@**com");
});
it("allows customizing visibleChars", () => {
const result = maskEmail("hello@example.com", 3);
assert.ok(result.startsWith("hel"), `Expected to start with 'hel', got: ${result}`);
});
it("masks email-like values stored in generic labels", () => {
assert.equal(maskEmailLikeValue("person@example.com"), "per***@********com");
assert.equal(maskEmailLikeValue("Work Account"), "Work Account");
});
it("picks the first non-empty masked display value", () => {
assert.equal(
pickMaskedDisplayValue(["", "person@example.com", "fallback"], "fallback"),
"per***@********com"
);
assert.equal(pickMaskedDisplayValue([null, "Workspace"], "fallback"), "Workspace");
});
it("respects the global visibility toggle when picking display values", () => {
assert.equal(
pickDisplayValue(["person@example.com", "Workspace"], false, "fallback"),
"per***@********com"
);
assert.equal(
pickDisplayValue(["person@example.com", "Workspace"], true, "fallback"),
"person@example.com"
);
assert.equal(pickDisplayValue([null, "Workspace"], false, "fallback"), "Workspace");
});
});