zulip/web/tests/i18n.test.js

175 lines
5.9 KiB
JavaScript

"use strict";
const {strict: assert} = require("assert");
const _ = require("lodash");
const {unmock_module, zrequire} = require("./lib/namespace");
const {run_test} = require("./lib/test");
const {page_params} = require("./lib/zpage_params");
// We download our translations in `page_params` (which
// are for the user's chosen language), so we simulate
// that here for the tests.
page_params.request_language = "en";
page_params.translation_data = {
"Quote and reply": "Citer et répondre",
"Notification triggers": "Déclencheurs de notification",
"You subscribed to stream {stream}": "Vous n'êtes pas abonnés au canal {stream}",
"<p>The stream <b>{stream_name}</b> does not exist.</p><p>Manage your subscriptions <z-link>on your Streams page</z-link>.</p>":
"<p>Le canal <b>{stream_name}</b> n'existe pas.</p><p>Gérez vos abonnements <z-link>sur votre page canaux</z-link>.</p>",
};
// Re-register Zulip extensions so extensions registered previously with
// mocked i18n.ts do not interfere with following tests.
require("../src/templates");
// All of our other tests stub out i18n activity;
// here we do a quick sanity check on the engine itself.
// `i18n.ts` initializes FormatJS and is imported by
// `templates.js`.
unmock_module("../src/i18n");
const {$t, $t_html, get_language_name, get_language_list_columns, initialize} = zrequire("i18n");
run_test("$t", () => {
// Normally the id would be provided by babel-plugin-formatjs, but
// this test file is not processed by Babel.
assert.equal(
$t({id: "Quote and reply", defaultMessage: "Quote and reply"}),
"Citer et répondre",
);
assert.equal(
$t(
{
id: "You subscribed to stream {stream}",
defaultMessage: "You subscribed to stream {stream}",
},
{stream: "l'abonnement"},
),
"Vous n'êtes pas abonnés au canal l'abonnement",
);
});
run_test("$tr", () => {
assert.equal(
$t_html(
{
id: "<p>The stream <b>{stream_name}</b> does not exist.</p><p>Manage your subscriptions <z-link>on your Streams page</z-link>.</p>",
defaultMessage:
"<p>The stream <b>{stream_name}</b> does not exist.</p><p>Manage your subscriptions <z-link>on your Streams page</z-link>.</p>",
},
{
stream_name: "l'abonnement",
"z-link": (content_html) => `<a href='#streams/all'>${content_html.join("")}</a>`,
},
),
"<p>Le canal <b>l&#39;abonnement</b> n'existe pas.</p><p>Gérez vos abonnements <a href='#streams/all'>sur votre page canaux</a>.</p>",
);
});
run_test("t_tag", ({mock_template}) => {
const args = {
message_id: "99",
should_display_quote_and_reply: true,
editability_menu_item: true,
should_display_hide_option: true,
conversation_time_url:
"http://zulip.zulipdev.com/#narrow/stream/101-devel/topic/testing/near/99",
};
mock_template("actions_popover_content.hbs", true, (data, html) => {
assert.equal(data, args);
assert.ok(html.indexOf("Citer et répondre") > 0);
});
require("../templates/actions_popover_content.hbs")(args);
});
run_test("tr_tag", ({mock_template}) => {
const args = {
botserverrc: "botserverrc",
date_joined_text: "Mar 21, 2022",
display_settings: {
settings: {},
},
notification_settings: {},
page_params: {
full_name: "John Doe",
delivery_email: "john@zulip.com",
},
settings_object: {},
settings_label: {
desktop_icon_count_display:
"Unread count badge (appears in desktop sidebar and browser tab)",
realm_name_in_email_notifications_policy:
"Include organization name in subject of message notification emails",
twenty_four_hour_time: "Time format",
},
show_push_notifications_tooltip: false,
user_role_text: "Member",
};
mock_template("settings_tab.hbs", true, (data, html) => {
assert.equal(data, args);
assert.ok(html.indexOf("Déclencheurs de notification") > 0);
});
require("../templates/settings_tab.hbs")(args);
});
run_test("language_list", () => {
const language_list = [
{
code: "en",
locale: "en",
name: "English",
},
{
code: "en-gb",
locale: "en_GB",
name: "British English",
percent_translated: 99,
},
{
code: "id",
locale: "id",
name: "Bahasa Indonesia",
percent_translated: 32,
},
];
initialize({language_list});
assert.equal(get_language_name("en"), "English");
const successful_formatted_list = [
{
name: "English",
code: "en",
name_with_percent: "English",
selected: true,
},
{
name: "British English",
code: "en-gb",
name_with_percent: "British English (99%)",
selected: false,
},
{
name: "Bahasa Indonesia",
code: "id",
name_with_percent: "Bahasa Indonesia (32%)",
selected: false,
},
];
const formatted_list = get_language_list_columns("en");
for (const element of _.range(0, formatted_list.length)) {
assert.equal(formatted_list[element].name, successful_formatted_list[element].name);
assert.equal(formatted_list[element].code, successful_formatted_list[element].code);
assert.equal(
formatted_list[element].name_with_percent,
successful_formatted_list[element].name_with_percent,
);
assert.equal(formatted_list[element].selected, successful_formatted_list[element].selected);
}
});