zulip/web/tests/emoji.test.js

134 lines
3.9 KiB
JavaScript
Raw Normal View History

"use strict";
const assert = require("node:assert/strict");
const events = require("./lib/events");
const {zrequire} = require("./lib/namespace");
const {run_test} = require("./lib/test");
const blueslip = require("./lib/zblueslip");
const emoji_codes = zrequire("../../static/generated/emoji/emoji_codes.json");
const emoji = zrequire("emoji");
const realm_emoji = events.test_realm_emojis;
run_test("sanity check", () => {
// Invalid emoji data
emoji_codes.names = [...emoji_codes.names, "invalid_emoji"];
blueslip.expect("error", "No codepoint for emoji name invalid_emoji");
emoji.initialize({realm_emoji, emoji_codes});
// Valid data
emoji_codes.names = emoji_codes.names.filter((name) => name !== "invalid_emoji");
emoji.initialize({realm_emoji, emoji_codes});
assert.equal(emoji.get_server_realm_emoji_data(), realm_emoji);
});
run_test("get_canonical_name", () => {
let canonical_name = emoji.get_canonical_name("green_tick");
assert.equal(canonical_name, "green_tick");
canonical_name = emoji.get_canonical_name("thumbs_up");
assert.equal(canonical_name, "+1");
canonical_name = emoji.get_canonical_name("+1");
assert.equal(canonical_name, "+1");
canonical_name = emoji.get_canonical_name("airplane");
assert.equal(canonical_name, "airplane");
canonical_name = emoji.get_canonical_name("non_existent");
assert.equal(canonical_name, undefined);
});
run_test("get_emoji_* API", () => {
assert.equal(emoji.get_emoji_name("1f384"), "holiday_tree");
assert.equal(emoji.get_emoji_name("1f951"), "avocado");
assert.equal(emoji.get_emoji_name("bogus"), undefined);
assert.equal(emoji.get_emoji_codepoint("avocado"), "1f951");
assert.equal(emoji.get_emoji_codepoint("holiday_tree"), "1f384");
assert.equal(emoji.get_emoji_codepoint("bogus"), undefined);
assert.equal(emoji.get_realm_emoji_url("spain"), "/some/path/to/spain.gif");
});
run_test("get_emoji_details_by_name", () => {
let emoji_name = "smile";
let result = emoji.get_emoji_details_by_name(emoji_name);
assert.deepEqual(result, {
emoji_name: "smile",
emoji_code: "1f642",
reaction_type: "unicode_emoji",
});
// Test adding an unicode_emoji.
emoji_name = "smile";
result = emoji.get_emoji_details_by_name(emoji_name);
assert.deepEqual(result, {
emoji_name: "smile",
reaction_type: "unicode_emoji",
emoji_code: "1f642",
});
// Test adding zulip emoji.
emoji_name = "zulip";
result = emoji.get_emoji_details_by_name(emoji_name);
assert.deepEqual(result, {
emoji_name: "zulip",
reaction_type: "zulip_extra_emoji",
emoji_code: "zulip",
url: "/static/generated/emoji/images/emoji/unicode/zulip.png",
still_url: null,
});
// Test adding realm emoji.
emoji_name = "spain";
emoji_name = emoji.get_emoji_details_by_name(emoji_name);
assert.deepEqual(emoji_name, {
emoji_name: "spain",
reaction_type: "realm_emoji",
emoji_code: "101",
url: "/some/path/to/spain.gif",
still_url: "/some/path/to/spain.png",
});
emoji_name = "green_tick";
emoji_name = emoji.get_emoji_details_by_name(emoji_name);
assert.deepEqual(emoji_name, {
emoji_name: "green_tick",
reaction_type: "realm_emoji",
emoji_code: "102",
url: "/some/path/to/emoji",
still_url: null,
});
// Test sending without emoji name.
assert.throws(
() => {
emoji.get_emoji_details_by_name();
},
{
name: "Error",
message: "Emoji name must be passed.",
},
);
// Test sending an unknown emoji.
emoji_name = "unknown-emoji";
assert.throws(
() => {
emoji.get_emoji_details_by_name(emoji_name);
},
{
name: "Error",
message: "Bad emoji name: unknown-emoji",
},
);
});