mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 12:33:40 +00:00
If a user was active within the last 90 days, show number of days (23 Days ago). If the user was active more than 90 days ago and in the same year, then show MMM DD (Mar 15). In any other case show MMM DD YYYY (Nov 10 2018), Change timerender.js test to accomodate changes.
294 lines
10 KiB
JavaScript
294 lines
10 KiB
JavaScript
set_global('$', global.make_zjquery());
|
||
set_global('i18n', global.stub_i18n);
|
||
set_global('page_params', {
|
||
twenty_four_hour_time: true,
|
||
});
|
||
zrequire('XDate', 'xdate');
|
||
zrequire('timerender');
|
||
|
||
run_test('render_now_returns_today', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var expected = {
|
||
time_str: i18n.t('Today'),
|
||
formal_time_str: 'Friday, April 12, 2019',
|
||
needs_update: true,
|
||
};
|
||
var actual = timerender.render_now(today, today);
|
||
assert.equal(expected.time_str, actual.time_str);
|
||
assert.equal(expected.formal_time_str, actual.formal_time_str);
|
||
assert.equal(expected.needs_update, actual.needs_update);
|
||
});
|
||
|
||
run_test('render_now_returns_yesterday', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var yesterday = today.clone().addDays(-1);
|
||
var expected = {
|
||
time_str: i18n.t('Yesterday'),
|
||
formal_time_str: 'Thursday, April 11, 2019',
|
||
needs_update: true,
|
||
};
|
||
var actual = timerender.render_now(yesterday, today);
|
||
assert.equal(expected.time_str, actual.time_str);
|
||
assert.equal(expected.formal_time_str, actual.formal_time_str);
|
||
assert.equal(expected.needs_update, actual.needs_update);
|
||
});
|
||
|
||
run_test('render_now_returns_year', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var year_ago = today.clone().addYears(-1);
|
||
var expected = {
|
||
time_str: 'Apr 12, 2018',
|
||
formal_time_str: 'Thursday, April 12, 2018',
|
||
needs_update: false,
|
||
};
|
||
var actual = timerender.render_now(year_ago, today);
|
||
assert.equal(expected.time_str, actual.time_str);
|
||
assert.equal(expected.formal_time_str, actual.formal_time_str);
|
||
assert.equal(expected.needs_update, actual.needs_update);
|
||
});
|
||
|
||
run_test('render_now_returns_month_and_day', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var three_months_ago = today.clone().addMonths(-3, true);
|
||
var expected = {
|
||
time_str: 'Jan 12',
|
||
formal_time_str: 'Saturday, January 12, 2019',
|
||
needs_update: false,
|
||
};
|
||
var actual = timerender.render_now(three_months_ago, today);
|
||
assert.equal(expected.time_str, actual.time_str);
|
||
assert.equal(expected.formal_time_str, actual.formal_time_str);
|
||
assert.equal(expected.needs_update, actual.needs_update);
|
||
});
|
||
|
||
run_test('render_now_returns_year_with_year_boundary', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var three_months_ago = today.clone().addMonths(-6, true);
|
||
var expected = {
|
||
time_str: 'Oct 12, 2018',
|
||
formal_time_str: 'Friday, October 12, 2018',
|
||
needs_update: false,
|
||
};
|
||
var actual = timerender.render_now(three_months_ago, today);
|
||
assert.equal(expected.time_str, actual.time_str);
|
||
assert.equal(expected.formal_time_str, actual.formal_time_str);
|
||
assert.equal(expected.needs_update, actual.needs_update);
|
||
});
|
||
|
||
run_test('render_date_renders_time_html', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var message_time = today.clone();
|
||
var expected_html = i18n.t('Today');
|
||
|
||
var attrs = new Dict();
|
||
var span_stub = $('<span />');
|
||
|
||
span_stub.attr = function (name, val) {
|
||
attrs.set(name, val);
|
||
return span_stub;
|
||
};
|
||
|
||
span_stub.append = function (str) {
|
||
span_stub.html(str);
|
||
return span_stub;
|
||
};
|
||
|
||
var actual = timerender.render_date(message_time, undefined, today);
|
||
assert.equal(expected_html, actual.html());
|
||
assert.equal(attrs.get('title'), 'Friday, April 12, 2019');
|
||
assert.equal(attrs.get('class'), 'timerender0');
|
||
});
|
||
|
||
run_test('render_date_renders_time_above_html', () => {
|
||
var today = new XDate(1555091573000); // Friday 4/12/2019 5:52:53 PM (UTC+0)
|
||
var message_time = today.clone();
|
||
var message_time_above = today.clone().addDays(-1);
|
||
|
||
var span_stub = $('<span />');
|
||
|
||
var appended_val;
|
||
span_stub.append = function (val) {
|
||
appended_val = val;
|
||
return span_stub;
|
||
};
|
||
|
||
var expected = [
|
||
'<i class="date-direction fa fa-caret-up"></i>',
|
||
i18n.t('Yesterday'),
|
||
'<hr class="date-line">',
|
||
'<i class="date-direction fa fa-caret-down"></i>',
|
||
i18n.t('Today'),
|
||
];
|
||
|
||
timerender.render_date(message_time, message_time_above, today);
|
||
assert.deepEqual(appended_val, expected);
|
||
});
|
||
|
||
run_test('get_full_time', () => {
|
||
var timestamp = 1495091573; // 5/18/2017 7:12:53 AM (UTC+0)
|
||
var expected = '2017-05-18T07:12:53Z'; // ISO 8601 date format
|
||
var actual = timerender.get_full_time(timestamp);
|
||
assert.equal(expected, actual);
|
||
});
|
||
|
||
run_test('absolute_time_12_hour', () => {
|
||
set_global('page_params', {
|
||
twenty_four_hour_time: false,
|
||
});
|
||
|
||
// timestamp with hour > 12, same year
|
||
var timestamp = 1555091573000; // 4/12/2019 5:52:53 PM (UTC+0)
|
||
var today = new Date(timestamp);
|
||
var expected = 'Apr 12 05:52 PM';
|
||
var actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
|
||
// timestamp with hour > 12, different year
|
||
today.setFullYear(today.getFullYear() + 1);
|
||
expected = 'Apr 12, 2019 05:52 PM';
|
||
actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
|
||
// timestamp with hour < 12, same year
|
||
timestamp = 1495091573000; // 5/18/2017 7:12:53 AM (UTC+0)
|
||
today = new Date(timestamp);
|
||
expected = 'May 18 07:12 AM';
|
||
actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
|
||
// timestamp with hour < 12, different year
|
||
today.setFullYear(today.getFullYear() + 1);
|
||
expected = 'May 18, 2017 07:12 AM';
|
||
actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
});
|
||
|
||
run_test('absolute_time_24_hour', () => {
|
||
set_global('page_params', {
|
||
twenty_four_hour_time: true,
|
||
});
|
||
|
||
// timestamp with hour > 12, same year
|
||
var timestamp = 1555091573000; // 4/12/2019 5:52:53 PM (UTC+0)
|
||
var today = new Date(timestamp);
|
||
var expected = 'Apr 12 17:52';
|
||
var actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
|
||
// timestamp with hour > 12, different year
|
||
today.setFullYear(today.getFullYear() + 1);
|
||
expected = 'Apr 12, 2019 17:52';
|
||
actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
|
||
// timestamp with hour < 12, same year
|
||
timestamp = 1495091573000; // 5/18/2017 7:12:53 AM (UTC+0)
|
||
today = new Date(timestamp);
|
||
expected = 'May 18 07:12';
|
||
actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
|
||
// timestamp with hour < 12, different year
|
||
today.setFullYear(today.getFullYear() + 1);
|
||
expected = 'May 18, 2017 07:12';
|
||
actual = timerender.absolute_time(timestamp, today);
|
||
assert.equal(expected, actual);
|
||
});
|
||
|
||
run_test('set_full_datetime', () => {
|
||
var message = {
|
||
timestamp: 1495091573, // 2017/5/18 7:12:53 AM (UTC+0)
|
||
};
|
||
var time_element = $('<span/>');
|
||
var attrs = new Dict();
|
||
|
||
time_element.attr = function (name, val) {
|
||
attrs.set(name, val);
|
||
return time_element;
|
||
};
|
||
|
||
// The formatting of the string time.toLocale(Date|Time)String() on Node
|
||
// might differ from the browser.
|
||
var time = new Date(message.timestamp * 1000);
|
||
var expected = `${time.toLocaleDateString()} 7:12:53 AM (UTC+0)`;
|
||
timerender.set_full_datetime(message, time_element);
|
||
var actual = attrs.get('title');
|
||
assert.equal(expected, actual);
|
||
});
|
||
|
||
run_test('last_seen_status_from_date', () => {
|
||
// Set base_dateto to March 1 2016 12.30 AM (months are zero based)
|
||
var base_date = new XDate(2016, 2, 1, 0, 30);
|
||
|
||
function assert_same(modifier, expected_status) {
|
||
var past_date = base_date.clone();
|
||
past_date = modifier(past_date);
|
||
var actual_status = timerender.last_seen_status_from_date(past_date, base_date);
|
||
assert.equal(actual_status, expected_status);
|
||
}
|
||
|
||
assert_same(function (d) { return d.addSeconds(-20); },
|
||
i18n.t("Just now"));
|
||
|
||
assert_same(function (d) { return d.addMinutes(-1); },
|
||
i18n.t("Just now"));
|
||
|
||
assert_same(function (d) { return d.addMinutes(-2); },
|
||
i18n.t("Just now"));
|
||
|
||
assert_same(function (d) { return d.addMinutes(-30); },
|
||
i18n.t("30 minutes ago"));
|
||
|
||
assert_same(function (d) { return d.addHours(-1); },
|
||
i18n.t("An hour ago"));
|
||
|
||
assert_same(function (d) { return d.addHours(-2); },
|
||
i18n.t("2 hours ago"));
|
||
|
||
assert_same(function (d) { return d.addHours(-20); },
|
||
i18n.t("20 hours ago"));
|
||
|
||
assert_same(function (d) { return d.addDays(-1); },
|
||
i18n.t("Yesterday"));
|
||
|
||
assert_same(function (d) { return d.addDays(-2); },
|
||
i18n.t("2 days ago"));
|
||
|
||
assert_same(function (d) { return d.addDays(-61); },
|
||
i18n.t("61 days ago"));
|
||
|
||
assert_same(function (d) { return d.addDays(-300); },
|
||
i18n.t("May 06,\xa02015"));
|
||
|
||
assert_same(function (d) { return d.addDays(-366); },
|
||
i18n.t("Mar 01,\xa02015"));
|
||
|
||
assert_same(function (d) { return d.addYears(-3); },
|
||
i18n.t("Mar 01,\xa02013"));
|
||
|
||
// Set base_dateto to May 1 2016 12.30 AM (months are zero based)
|
||
base_date = new XDate(2016, 4, 1, 0, 30);
|
||
|
||
assert_same(function (d) { return d.addDays(-91); },
|
||
i18n.t("Jan\xa031"));
|
||
|
||
});
|
||
|
||
run_test('set_full_datetime', () => {
|
||
var time = new XDate(1549958107000); // Tuesday 2/12/2019 07:55:07 AM (UTC+0)
|
||
var time_str = timerender.stringify_time(time);
|
||
var expected = '07:55';
|
||
assert.equal(expected, time_str);
|
||
|
||
page_params.twenty_four_hour_time = false;
|
||
time_str = timerender.stringify_time(time);
|
||
expected = '7:55 AM';
|
||
assert.equal(expected, time_str);
|
||
|
||
time = new XDate(1549979707000); // Tuesday 2/12/2019 13:55:07 PM (UTC+0)
|
||
page_params.twenty_four_hour_time = false;
|
||
time_str = timerender.stringify_time(time);
|
||
expected = '1:55 PM';
|
||
assert.equal(expected, time_str);
|
||
});
|