2015-10-15 22:34:30 +02:00
|
|
|
set_global('page_params', {realm_emoji: {
|
|
|
|
burrito: {display_url: '/static/third/gemoji/images/emoji/burrito.png',
|
|
|
|
source_url: '/static/third/gemoji/images/emoji/burrito.png'}
|
|
|
|
}});
|
|
|
|
|
2013-11-27 22:05:33 +01:00
|
|
|
add_dependencies({
|
|
|
|
Handlebars: 'handlebars',
|
2016-05-13 12:44:03 +02:00
|
|
|
templates: 'js/templates',
|
2015-10-15 22:34:30 +02:00
|
|
|
emoji: 'js/emoji',
|
2016-05-13 12:44:03 +02:00
|
|
|
i18n: 'i18next'
|
|
|
|
});
|
|
|
|
|
|
|
|
var i18n = global.i18n;
|
|
|
|
i18n.init({
|
|
|
|
nsSeparator: false,
|
|
|
|
keySeparator: false,
|
|
|
|
interpolation: {
|
|
|
|
prefix: "__",
|
|
|
|
suffix: "__"
|
|
|
|
},
|
|
|
|
lng: 'en'
|
2013-11-27 22:05:33 +01:00
|
|
|
});
|
|
|
|
|
2016-08-24 21:49:53 +02:00
|
|
|
var jsdom = require("jsdom");
|
2016-10-05 02:03:00 +02:00
|
|
|
var fs = require("fs");
|
|
|
|
var path = require("path");
|
2016-08-24 21:49:53 +02:00
|
|
|
var window = jsdom.jsdom().defaultView;
|
|
|
|
global.$ = require('jquery')(window);
|
2013-12-11 18:53:05 +01:00
|
|
|
var _ = global._;
|
2013-11-27 22:05:33 +01:00
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
// When writing these tests, the following command might be helpful:
|
|
|
|
// ./tools/get-handlebar-vars static/templates/*.handlebars
|
|
|
|
|
|
|
|
function render(template_name, args) {
|
|
|
|
global.use_template(template_name);
|
|
|
|
return global.templates.render(template_name, args);
|
|
|
|
}
|
|
|
|
|
2016-10-05 02:03:00 +02:00
|
|
|
fs.readdirSync(path.join(__dirname, "../../static/templates/", "settings")).forEach(function (o) {
|
|
|
|
render(o.replace(/\.handlebars/, ""));
|
|
|
|
});
|
|
|
|
|
2014-01-10 16:36:01 +01:00
|
|
|
(function test_handlebars_bug () {
|
|
|
|
// There was a bug in 1.0.9 where identically structured
|
|
|
|
// blocks get confused, so when foo is false, it still
|
|
|
|
// renders the foo-is-true block.
|
|
|
|
var s = '';
|
|
|
|
s += '{{#if foo}}';
|
|
|
|
s += '{{#if bar}}';
|
|
|
|
s += 'a';
|
|
|
|
s += '{{else}}';
|
|
|
|
s += 'b';
|
|
|
|
s += '{{/if}}';
|
|
|
|
s += '{{else}}';
|
|
|
|
s += '{{#if bar}}';
|
|
|
|
s += 'c';
|
|
|
|
s += '{{else}}';
|
|
|
|
s += 'd';
|
|
|
|
s += '{{/if}}';
|
|
|
|
s += '{{/if}}';
|
|
|
|
var template = global.Handlebars.compile(s);
|
|
|
|
var output = template({});
|
|
|
|
|
|
|
|
assert.equal(output, 'd'); // the buggy version would return 'b'
|
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function actions_popover_content() {
|
|
|
|
var args = {
|
|
|
|
"message": {
|
|
|
|
is_stream: true,
|
|
|
|
id: "99",
|
|
|
|
stream: "devel",
|
|
|
|
subject: "testing",
|
|
|
|
sender_full_name: "King Lear"
|
|
|
|
},
|
|
|
|
"can_edit_message": true,
|
|
|
|
"can_mute_topic": true,
|
2014-02-18 16:57:28 +01:00
|
|
|
"narrowed": true
|
2013-12-11 18:53:05 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
var html = '<div style="height: 250px">';
|
|
|
|
html += render('actions_popover_content', args);
|
|
|
|
html += "</div>";
|
2014-02-18 16:57:28 +01:00
|
|
|
var link = $(html).find("a.respond_button");
|
|
|
|
assert.equal(link.text().trim(), 'Reply');
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("actions_popover_content", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
2016-05-20 22:08:42 +02:00
|
|
|
(function admin_default_streams_list() {
|
|
|
|
var html = '<table>';
|
|
|
|
var streams = ['devel', 'trac', 'zulip'];
|
|
|
|
_.each(streams, function (stream) {
|
|
|
|
var args = {stream: {name: stream, invite_only: false}};
|
|
|
|
html += render('admin_default_streams_list', args);
|
|
|
|
});
|
|
|
|
html += "</table>";
|
|
|
|
var span = $(html).find(".default_stream_name:first");
|
|
|
|
assert.equal(span.text(), "devel");
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("admin_default_streams_list", html);
|
2016-05-20 22:08:42 +02:00
|
|
|
}());
|
|
|
|
|
2016-07-30 04:52:29 +02:00
|
|
|
(function admin_emoji_list() {
|
|
|
|
global.use_template('admin_emoji_list');
|
|
|
|
var args = {
|
|
|
|
emoji: {
|
|
|
|
"name": "MouseFace",
|
|
|
|
"display_url": "http://emojipedia-us.s3.amazonaws.com/cache/46/7f/467fe69069c408e07517621f263ea9b5.png",
|
|
|
|
"source_url": "http://emojipedia-us.s3.amazonaws.com/cache/46/7f/467fe69069c408e07517621f263ea9b5.png"
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = '';
|
|
|
|
html += '<tbody id="admin_emoji_table">';
|
|
|
|
html += render('admin_emoji_list', args);
|
|
|
|
html += '</tbody>';
|
|
|
|
|
|
|
|
global.write_handlebars_output('admin_emoji_list', html);
|
|
|
|
|
|
|
|
var emoji_name = $(html).find('tr.emoji_row:first span.emoji_name');
|
|
|
|
var emoji_url = $(html).find('tr.emoji_row:first span.emoji_image img');
|
|
|
|
|
|
|
|
assert.equal(emoji_name.text(), 'MouseFace');
|
|
|
|
assert.equal(emoji_url.attr('src'), 'http://emojipedia-us.s3.amazonaws.com/cache/46/7f/467fe69069c408e07517621f263ea9b5.png');
|
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function admin_streams_list() {
|
|
|
|
var html = '<table>';
|
|
|
|
var streams = ['devel', 'trac', 'zulip'];
|
|
|
|
_.each(streams, function (stream) {
|
2014-01-24 19:47:18 +01:00
|
|
|
var args = {stream: {name: stream, invite_only: false}};
|
2013-12-11 18:53:05 +01:00
|
|
|
html += render('admin_streams_list', args);
|
|
|
|
});
|
|
|
|
html += "</table>";
|
|
|
|
var span = $(html).find(".stream_name:first");
|
|
|
|
assert.equal(span.text(), "devel");
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("admin_streams_list", html);
|
2016-07-30 06:06:51 +02:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function admin_tab() {
|
|
|
|
var args = {
|
|
|
|
realm_name: 'Zulip'
|
|
|
|
};
|
|
|
|
var html = render('admin_tab', args);
|
|
|
|
var admin_features = ["admin_users_table", "admin_bots_table",
|
|
|
|
"admin_streams_table", "admin_deactivated_users_table"];
|
|
|
|
_.each(admin_features, function (admin_feature) {
|
|
|
|
assert.notEqual($(html).find("#" + admin_feature).length, 0);
|
|
|
|
});
|
|
|
|
assert.equal($(html).find("input.admin-realm-name").val(), 'Zulip');
|
|
|
|
global.write_handlebars_output("admin_tab", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function admin_user_list() {
|
|
|
|
var html = '<table>';
|
|
|
|
var users = ['alice', 'bob', 'carl'];
|
|
|
|
_.each(users, function (user) {
|
|
|
|
var args = {
|
|
|
|
"user": {
|
|
|
|
"is_active": true,
|
2014-01-16 03:59:05 +01:00
|
|
|
"is_active_human": true,
|
2013-12-11 18:53:05 +01:00
|
|
|
"email": user + '@zulip.com',
|
|
|
|
"full_name": user
|
|
|
|
}
|
|
|
|
};
|
|
|
|
html += render('admin_user_list', args);
|
|
|
|
});
|
|
|
|
html += "</table>";
|
2014-01-16 03:59:05 +01:00
|
|
|
|
2016-09-27 14:25:52 +02:00
|
|
|
var buttons = $(html).find('.button');
|
2014-01-16 03:59:05 +01:00
|
|
|
|
2016-09-27 14:25:52 +02:00
|
|
|
assert.equal($(buttons[0]).text().trim(), "Deactivate");
|
|
|
|
assert($(buttons[0]).hasClass("deactivate"));
|
|
|
|
|
|
|
|
assert.equal($(buttons[1]).text().trim(), "Make admin");
|
|
|
|
assert($(buttons[1]).hasClass("make-admin"));
|
|
|
|
|
|
|
|
assert.equal($(buttons[2]).attr('title').trim(), "Edit User");
|
|
|
|
assert($(buttons[2]).hasClass("open-user-form"));
|
2014-01-16 03:59:05 +01:00
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("admin_user_list", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function alert_word_settings_item() {
|
2016-06-24 01:53:49 +02:00
|
|
|
var html = '<ul id="alert-words">';
|
2013-12-11 18:53:05 +01:00
|
|
|
var words = ['lunch', 'support'];
|
|
|
|
_.each(words, function (word) {
|
|
|
|
var args = {
|
|
|
|
word: word
|
|
|
|
};
|
|
|
|
html += render('alert_word_settings_item', args);
|
|
|
|
});
|
|
|
|
html += "</ul>";
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("alert_word_settings_item", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
var li = $(html).find("li.alert-word-item:first");
|
|
|
|
assert.equal(li.attr('data-word'),'lunch');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function announce_stream_docs() {
|
|
|
|
var html = render('announce_stream_docs');
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("announce_stream_docs", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function bankruptcy_modal() {
|
|
|
|
var args = {
|
|
|
|
unread_count: 99
|
|
|
|
};
|
|
|
|
var html = render('bankruptcy_modal', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("bankruptcy_modal", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
var count = $(html).find("p b");
|
|
|
|
assert.equal(count.text(), 99);
|
|
|
|
}());
|
|
|
|
|
2016-07-30 05:42:39 +02:00
|
|
|
(function bookend() {
|
|
|
|
// Do subscribed/unsubscribed cases here.
|
|
|
|
var args = {
|
|
|
|
bookend_content: "subscribed to stream",
|
|
|
|
trailing: true,
|
|
|
|
subscribed: true
|
|
|
|
};
|
|
|
|
var html;
|
|
|
|
var all_html = '';
|
|
|
|
|
|
|
|
html = render('bookend', args);
|
|
|
|
|
|
|
|
assert.equal($(html).text().trim(), "subscribed to stream\n \n \n \n Unsubscribe");
|
|
|
|
|
|
|
|
all_html += html;
|
|
|
|
|
|
|
|
args = {
|
|
|
|
bookend_content: "Not subscribed to stream",
|
|
|
|
trailing: true,
|
|
|
|
subscribed: false
|
|
|
|
};
|
|
|
|
|
|
|
|
html = render('bookend', args);
|
|
|
|
assert.equal($(html).text().trim(), 'Not subscribed to stream\n \n \n \n Subscribe');
|
|
|
|
|
|
|
|
all_html += '<hr />';
|
|
|
|
all_html += html;
|
|
|
|
|
|
|
|
global.write_handlebars_output("bookend", all_html);
|
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function bot_avatar_row() {
|
|
|
|
var html = '';
|
|
|
|
html += '<div id="settings">';
|
|
|
|
html += '<div id="bot-settings" class="settings-section">';
|
|
|
|
html += '<div class="bot-settings-form">';
|
|
|
|
html += '<ol id="bots_list" style="display: block">';
|
|
|
|
var args = {
|
|
|
|
"email": "hamlet@zulip.com",
|
|
|
|
"api_key": "123456ABCD",
|
|
|
|
"name": "Hamlet",
|
|
|
|
"avatar_url": "/hamlet/avatar/url"
|
|
|
|
};
|
|
|
|
html += render('bot_avatar_row', args);
|
|
|
|
html += '</ol>';
|
|
|
|
html += '</div>';
|
|
|
|
html += '</div>';
|
|
|
|
html += '</div>';
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("bot_avatar_row", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
var img = $(html).find("img");
|
|
|
|
assert.equal(img.attr('src'), '/hamlet/avatar/url');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function compose_invite_users() {
|
|
|
|
var args = {
|
|
|
|
email: 'hamlet@zulip.com',
|
|
|
|
name: 'Hamlet'
|
|
|
|
};
|
|
|
|
var html = render('compose-invite-users', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("compose-invite-users", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
var button = $(html).find("button:first");
|
|
|
|
assert.equal(button.text(), "Subscribe");
|
|
|
|
}());
|
|
|
|
|
2016-06-04 04:31:35 +02:00
|
|
|
(function compose_all_everyone() {
|
|
|
|
var args = {
|
|
|
|
count: '101',
|
|
|
|
name: 'all'
|
|
|
|
};
|
|
|
|
var html = render('compose_all_everyone', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("compose_all_everyone", html);
|
2016-06-04 04:31:35 +02:00
|
|
|
var button = $(html).find("button:first");
|
|
|
|
assert.equal(button.text(), "YES");
|
|
|
|
var error_msg = $(html).find('span.compose-all-everyone-msg').text().trim();
|
|
|
|
assert.equal(error_msg, "Are you sure you want to message all 101 people in this stream?");
|
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function compose_notification() {
|
|
|
|
var args = {
|
|
|
|
"note": "You sent a message to a muted topic.",
|
|
|
|
"link_text": "Narrow to here",
|
|
|
|
"link_msg_id": "99",
|
|
|
|
"link_class": "compose_notification_narrow_by_subject"
|
|
|
|
};
|
|
|
|
var html = '<div id="out-of-view-notification" class="notification-alert">';
|
|
|
|
html += render('compose_notification', args);
|
|
|
|
html += '</div>';
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("compose_notification", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
var a = $(html).find("a.compose_notification_narrow_by_subject");
|
|
|
|
assert.equal(a.text(), "Narrow to here");
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function email_address_hint() {
|
|
|
|
var html = render('email_address_hint');
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("email_address_hint", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
var li = $(html).find("li:first");
|
|
|
|
assert.equal(li.text(), 'The email will be forwarded to this stream');
|
|
|
|
}());
|
|
|
|
|
2015-10-15 22:34:30 +02:00
|
|
|
(function emoji_popover_content() {
|
|
|
|
var args = {
|
|
|
|
emoji_list: global.emoji.emojis_name_to_css_class
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = '<div style="height: 250px">';
|
|
|
|
html += render('emoji_popover_content', args);
|
|
|
|
html += "</div>";
|
|
|
|
// test to make sure the first emoji is present in the popover
|
|
|
|
var emoji_key = $(html).find(".emoji-100").attr('title');
|
|
|
|
assert.equal(emoji_key, ':100:');
|
|
|
|
global.write_handlebars_output("emoji_popover_content", html);
|
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function group_pms() {
|
|
|
|
var args = {
|
|
|
|
"group_pms": [
|
|
|
|
{
|
|
|
|
"fraction_present": 0.1,
|
|
|
|
"emails": "alice@zulip.com,bob@zulip.com",
|
|
|
|
"short_name": "Alice and Bob",
|
|
|
|
"name": "Alice and Bob"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
var html = render('group_pms', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("group_pms", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var a = $(html).find("a:first");
|
|
|
|
assert.equal(a.text(), 'Alice and Bob');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function invite_subscription() {
|
|
|
|
var args = {
|
|
|
|
streams: [
|
|
|
|
{
|
|
|
|
name: "devel"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "social"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
var html = render('invite_subscription', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("invite_subscription", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var input = $(html).find("label:first");
|
|
|
|
assert.equal(input.text().trim(), "devel");
|
|
|
|
}());
|
|
|
|
|
2014-02-18 16:37:13 +01:00
|
|
|
(function single_message() {
|
|
|
|
var message = {
|
2014-03-14 16:28:54 +01:00
|
|
|
msg: {
|
2013-11-27 22:05:33 +01:00
|
|
|
include_recipient: true,
|
|
|
|
display_recipient: 'devel',
|
|
|
|
subject: 'testing',
|
|
|
|
is_stream: true,
|
|
|
|
content: 'This is message one.',
|
|
|
|
last_edit_timestr: '11:00',
|
|
|
|
starred: true
|
2014-03-14 16:28:54 +01:00
|
|
|
}
|
2013-11-27 22:05:33 +01:00
|
|
|
};
|
2014-02-18 16:37:13 +01:00
|
|
|
|
|
|
|
var html = render('single_message', message);
|
2013-12-09 20:15:33 +01:00
|
|
|
html = '<div class="message_table focused_table" id="zfilt">' + html + '</div>';
|
2013-11-27 22:05:33 +01:00
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("message", html);
|
2013-11-27 22:05:33 +01:00
|
|
|
|
2013-12-09 20:15:33 +01:00
|
|
|
var first_message = $(html).find("div.messagebox:first");
|
2013-11-27 22:05:33 +01:00
|
|
|
|
|
|
|
var first_message_text = first_message.find(".message_content").text().trim();
|
|
|
|
assert.equal(first_message_text, "This is message one.");
|
|
|
|
|
|
|
|
var starred_title = first_message.find(".star span").attr("title");
|
|
|
|
assert.equal(starred_title, "Unstar this message");
|
|
|
|
}());
|
2013-12-11 18:53:05 +01:00
|
|
|
|
2016-07-30 06:07:53 +02:00
|
|
|
(function message_edit_form() {
|
|
|
|
var args = {
|
|
|
|
"topic": "lunch",
|
|
|
|
"content": "Let's go to lunch!",
|
|
|
|
"is_stream": true
|
|
|
|
};
|
|
|
|
var html = render('message_edit_form', args);
|
|
|
|
global.write_handlebars_output("message_edit_form", html);
|
|
|
|
|
|
|
|
var textarea = $(html).find("textarea.message_edit_content");
|
|
|
|
assert.equal(textarea.text(), "Let's go to lunch!");
|
|
|
|
}());
|
|
|
|
|
2014-02-18 16:37:13 +01:00
|
|
|
(function message_group() {
|
|
|
|
var messages = [
|
|
|
|
{
|
2014-03-18 23:24:23 +01:00
|
|
|
msg: {
|
|
|
|
id: 1,
|
|
|
|
match_content: 'This is message one.',
|
|
|
|
starred: true,
|
|
|
|
is_stream: true,
|
|
|
|
content: 'This is message one.'
|
|
|
|
},
|
2014-02-18 16:37:13 +01:00
|
|
|
include_recipient: true,
|
|
|
|
display_recipient: 'devel',
|
2014-03-18 23:24:23 +01:00
|
|
|
last_edit_timestr: '11:00'
|
2014-02-18 16:37:13 +01:00
|
|
|
},
|
|
|
|
{
|
2014-03-18 23:24:23 +01:00
|
|
|
msg: {
|
|
|
|
content: 'This is message two.',
|
|
|
|
match_content: 'This is message <span class="highlight">two</span>.',
|
|
|
|
is_stream: true,
|
|
|
|
unread: true,
|
|
|
|
id: 2
|
|
|
|
}
|
2014-02-18 16:37:13 +01:00
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
var groups = [
|
|
|
|
{
|
|
|
|
display_recipient: "support",
|
|
|
|
is_stream: true,
|
|
|
|
message_ids: [1, 2],
|
2014-03-17 19:38:35 +01:00
|
|
|
message_containers: messages,
|
2014-02-18 16:37:13 +01:00
|
|
|
show_date: '"<span id="timerender82">Jan 07</span>"',
|
2014-02-27 19:28:47 +01:00
|
|
|
subject: 'two messages',
|
|
|
|
match_subject: '<span class="highlight">two</span> messages'
|
2014-02-18 16:37:13 +01:00
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
global.use_template('single_message'); // partial
|
2014-03-03 21:59:29 +01:00
|
|
|
global.use_template('recipient_row'); // partial
|
2014-02-18 16:37:13 +01:00
|
|
|
global.use_template('bookend'); // partial
|
|
|
|
|
2014-02-27 19:28:47 +01:00
|
|
|
var html = render('message_group', {message_groups: groups, use_match_properties: true});
|
2014-02-18 16:37:13 +01:00
|
|
|
|
|
|
|
var first_message_text = $(html).next('.recipient_row').find('div.messagebox:first .message_content').text().trim();
|
|
|
|
assert.equal(first_message_text, "This is message one.");
|
|
|
|
|
2014-02-27 19:28:47 +01:00
|
|
|
var last_message_html = $(html).next('.recipient_row').find('div.messagebox:last .message_content').html().trim();
|
|
|
|
assert.equal(last_message_html, 'This is message <span class="highlight">two</span>.');
|
|
|
|
|
|
|
|
var highlighted_subject_word = $(html).find('a.narrows_by_subject .highlight').text();
|
|
|
|
assert.equal(highlighted_subject_word, 'two');
|
2014-02-18 16:37:13 +01:00
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("message_group", html);
|
2014-02-18 16:37:13 +01:00
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function message_info_popover_content() {
|
|
|
|
var args = {
|
|
|
|
message: {
|
|
|
|
full_date_str: 'Monday',
|
|
|
|
full_time_str: '12:00',
|
|
|
|
sender_full_name: 'Alice Smith',
|
|
|
|
sender_email: 'alice@zulip.com'
|
|
|
|
},
|
|
|
|
sent_by_uri: '/sent_by/uri',
|
|
|
|
pm_with_uri: '/pm_with/uri'
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('message_info_popover_content', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("message_info_popover_content", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var a = $(html).find("a.respond_personal_button");
|
|
|
|
assert.equal(a.text().trim(), 'Send Alice Smith a private message');
|
|
|
|
}());
|
|
|
|
|
|
|
|
|
|
|
|
(function message_info_popover_title() {
|
|
|
|
var args = {
|
|
|
|
message: {
|
|
|
|
is_stream: true,
|
|
|
|
stream: 'devel'
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('message_info_popover_title', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("message_info_popover_title", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
2016-08-24 21:49:53 +02:00
|
|
|
html = '<div>' + html + '</div>';
|
2013-12-11 18:53:05 +01:00
|
|
|
assert($(html).text().trim(), "Message to stream devel");
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function new_stream_users() {
|
|
|
|
var args = {
|
|
|
|
users: [
|
|
|
|
{
|
|
|
|
email: 'lear@zulip.com',
|
|
|
|
full_name: 'King Lear'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
email: 'othello@zulip.com',
|
|
|
|
full_name: 'Othello the Moor'
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('new_stream_users', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("new_stream_users", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var label = $(html).find("label:first");
|
|
|
|
assert.equal(label.text().trim(), 'King Lear (lear@zulip.com)');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function notification() {
|
|
|
|
var args = {
|
|
|
|
"content": "Hello",
|
|
|
|
"gravatar_url": "/gravatar/url",
|
|
|
|
"title": "You have a notification"
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('notification', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("notification", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var title = $(html).find(".title");
|
|
|
|
assert.equal(title.text().trim(), 'You have a notification');
|
|
|
|
}());
|
|
|
|
|
2016-07-30 06:09:32 +02:00
|
|
|
(function propagate_notification_change() {
|
|
|
|
var html = render('propagate_notification_change');
|
|
|
|
global.write_handlebars_output("propagate_notification_change", html);
|
|
|
|
|
|
|
|
var button_area = $(html).find(".propagate-notifications-controls");
|
|
|
|
assert.equal(button_area.find(".yes_propagate_notifications").text().trim(), 'Yes');
|
|
|
|
assert.equal(button_area.find(".no_propagate_notifications").text().trim(), 'No');
|
|
|
|
}());
|
|
|
|
|
2016-07-30 06:10:30 +02:00
|
|
|
(function settings_tab() {
|
|
|
|
var page_param_checkbox_options = {
|
|
|
|
stream_desktop_notifications_enabled: true,
|
|
|
|
stream_sounds_enabled: true, desktop_notifications_enabled: true,
|
|
|
|
sounds_enabled: true, enable_offline_email_notifications: true,
|
2016-09-19 22:55:18 +02:00
|
|
|
enable_offline_push_notifications: true, enable_online_push_notifications: true,
|
|
|
|
enable_digest_emails: true,
|
2016-07-30 06:10:30 +02:00
|
|
|
autoscroll_forever: true, default_desktop_notifications: true
|
|
|
|
};
|
|
|
|
var page_params = $.extend(page_param_checkbox_options, {
|
|
|
|
fullname: "Alyssa P. Hacker", password_auth_enabled: true,
|
|
|
|
avatar_url: "https://google.com",
|
|
|
|
domain: "zulip.com"
|
|
|
|
});
|
|
|
|
|
|
|
|
var checkbox_ids = ["enable_stream_desktop_notifications",
|
|
|
|
"enable_stream_sounds", "enable_desktop_notifications",
|
|
|
|
"enable_sounds", "enable_offline_push_notifications",
|
2016-09-19 22:55:18 +02:00
|
|
|
"enable_online_push_notifications",
|
2016-07-30 06:10:30 +02:00
|
|
|
"enable_digest_emails", "autoscroll_forever",
|
|
|
|
"default_desktop_notifications"];
|
|
|
|
|
|
|
|
// Render with all booleans set to true.
|
|
|
|
var html = render('settings_tab', {page_params: page_params});
|
|
|
|
global.write_handlebars_output("settings_tab", html);
|
|
|
|
|
|
|
|
// All checkboxes should be checked.
|
|
|
|
_.each(checkbox_ids, function (checkbox) {
|
|
|
|
assert.equal($(html).find("#" + checkbox).is(":checked"), true);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Re-render with checkbox booleans set to false.
|
|
|
|
_.each(page_param_checkbox_options, function (value, option) {
|
|
|
|
page_params[option] = false;
|
|
|
|
});
|
|
|
|
|
|
|
|
html = render('settings_tab', {page_params: page_params});
|
|
|
|
|
|
|
|
// All checkboxes should be unchecked.
|
|
|
|
_.each(checkbox_ids, function (checkbox) {
|
|
|
|
assert.equal($(html).find("#" + checkbox).is(":checked"), false);
|
|
|
|
});
|
|
|
|
|
|
|
|
}());
|
|
|
|
|
2016-08-25 03:57:29 +02:00
|
|
|
(function sidebar_private_message_list() {
|
|
|
|
var args = {
|
|
|
|
want_show_more_messages_links: true,
|
|
|
|
messages: [
|
|
|
|
{
|
|
|
|
recipients: "alice,bob"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = '';
|
|
|
|
html += render('sidebar_private_message_list', args);
|
|
|
|
|
|
|
|
global.write_handlebars_output("sidebar_private_message_list", html);
|
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function sidebar_subject_list() {
|
|
|
|
var args = {
|
|
|
|
want_show_more_topics_links: true,
|
|
|
|
subjects: [
|
|
|
|
{
|
|
|
|
is_muted: false,
|
|
|
|
topic_name: 'lunch',
|
|
|
|
url: '/lunch/url',
|
|
|
|
unread: 5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
is_muted: true,
|
|
|
|
topic_name: 'dinner',
|
|
|
|
url: '/dinner/url',
|
|
|
|
is_zero: true
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = '';
|
|
|
|
html += '<ul class="filters">';
|
|
|
|
html += '<li>';
|
|
|
|
html += '<ul class="expanded_subjects">';
|
|
|
|
html += render('sidebar_subject_list', args);
|
|
|
|
html += '</ul>';
|
|
|
|
html += '</li>';
|
|
|
|
html += '</ul>';
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("sidebar_subject_list", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var li = $(html).find("li.expanded_subject:first");
|
|
|
|
assert.equal(li.attr('data-name'), 'lunch');
|
|
|
|
}());
|
|
|
|
|
2014-02-01 17:12:28 +01:00
|
|
|
(function stream_member_list_entry() {
|
|
|
|
var everyone_items = ["subscriber-name", "subscriber-email"];
|
|
|
|
var admin_items = ["remove-subscriber-button"];
|
|
|
|
|
|
|
|
// First, as non-admin.
|
|
|
|
var html = render('stream_member_list_entry',
|
|
|
|
{name: "King Hamlet", email: "hamlet@zulip.com"});
|
|
|
|
_.each(everyone_items, function (item) {
|
|
|
|
assert.equal($(html).find("." + item).length, 1);
|
|
|
|
});
|
|
|
|
_.each(admin_items, function (item) {
|
|
|
|
assert.equal($(html).find("." + item).length, 0);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Now, as admin.
|
|
|
|
html = render('stream_member_list_entry',
|
|
|
|
{name: "King Hamlet", email: "hamlet@zulip.com",
|
|
|
|
displaying_for_admin: true});
|
|
|
|
_.each(everyone_items, function (item) {
|
|
|
|
assert.equal($(html).find("." + item).length, 1);
|
|
|
|
});
|
|
|
|
_.each(admin_items, function (item) {
|
|
|
|
assert.equal($(html).find("." + item).length, 1);
|
|
|
|
});
|
2014-02-01 17:17:31 +01:00
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("stream_member_list_entry", html);
|
2014-02-01 17:12:28 +01:00
|
|
|
}());
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
(function stream_sidebar_actions() {
|
|
|
|
var args = {
|
|
|
|
stream: {
|
|
|
|
color: 'red',
|
|
|
|
name: 'devel',
|
|
|
|
in_home_view: true,
|
|
|
|
id: 55
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('stream_sidebar_actions', args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("stream_sidebar_actions", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var li = $(html).find("li:first");
|
2016-08-23 02:46:12 +02:00
|
|
|
assert.equal(li.text().trim(), 'Stream settings');
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function stream_sidebar_row() {
|
2016-08-25 03:58:13 +02:00
|
|
|
global.use_template('stream_privacy'); // partial
|
|
|
|
|
2013-12-11 18:53:05 +01:00
|
|
|
var args = {
|
|
|
|
name: "devel",
|
|
|
|
color: "red",
|
|
|
|
dark_background: "maroon",
|
|
|
|
uri: "/devel/uri",
|
|
|
|
id: 999
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = '<ul id="stream_filters">';
|
|
|
|
html += render('stream_sidebar_row', args);
|
|
|
|
html += '</ul>';
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("stream_sidebar_row", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var swatch = $(html).find(".streamlist_swatch");
|
|
|
|
assert.equal(swatch.attr('id'), 'stream_sidebar_swatch_999');
|
|
|
|
}());
|
|
|
|
|
|
|
|
|
|
|
|
(function subscription_table_body() {
|
|
|
|
var args = {
|
|
|
|
subscriptions: [
|
|
|
|
{
|
|
|
|
name: 'devel',
|
|
|
|
subscribed: true,
|
|
|
|
notifications: true,
|
2014-01-03 15:31:19 +01:00
|
|
|
is_admin: true,
|
2013-12-11 18:53:05 +01:00
|
|
|
render_subscribers: true,
|
|
|
|
color: 'purple',
|
|
|
|
invite_only: true,
|
2014-01-03 20:35:52 +01:00
|
|
|
can_make_public: true,
|
|
|
|
can_make_private: true, /* not logical, but that's ok */
|
2013-12-11 18:53:05 +01:00
|
|
|
email_address: 'xxxxxxxxxxxxxxx@zulip.com',
|
|
|
|
id: 888,
|
|
|
|
in_home_view: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'social',
|
|
|
|
color: 'green',
|
|
|
|
id: 999
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
global.use_template('subscription'); // partial
|
2016-10-28 06:52:17 +02:00
|
|
|
global.use_template('subscription_settings'); // partial
|
2014-01-03 18:06:55 +01:00
|
|
|
global.use_template('subscription_type'); // partial
|
2014-01-03 23:11:11 +01:00
|
|
|
global.use_template('subscription_setting_icon'); // partial
|
2014-01-03 20:35:52 +01:00
|
|
|
global.use_template('change_stream_privacy'); // partial
|
2013-12-11 18:53:05 +01:00
|
|
|
var html = '';
|
|
|
|
html += '<div id="subscriptions_table">';
|
|
|
|
html += render('subscription_table_body', args);
|
|
|
|
html += '</div>';
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("subscription_table_body", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var span = $(html).find(".subscription_name:first");
|
|
|
|
assert.equal(span.text(), 'devel');
|
2014-01-03 15:31:19 +01:00
|
|
|
|
2014-01-24 20:25:53 +01:00
|
|
|
span = $(html).find(".admin-settings .sub_settings_title");
|
2014-01-03 15:31:19 +01:00
|
|
|
assert.equal(span.text(), 'Administrator settings');
|
2014-01-03 17:57:17 +01:00
|
|
|
|
|
|
|
var div = $(html).find(".subscription-type");
|
|
|
|
assert(div.text().indexOf('invite-only stream') > 0);
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
|
|
|
|
|
|
|
(function tab_bar() {
|
|
|
|
var args = {
|
|
|
|
tabs: [
|
|
|
|
{
|
|
|
|
cls: 'root',
|
|
|
|
title: 'Home',
|
|
|
|
hash: '#',
|
|
|
|
data: 'home'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cls: 'stream',
|
|
|
|
title: 'Devel',
|
|
|
|
hash: '/stream/uri',
|
|
|
|
data: 'devel'
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('tab_bar', args);
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("tab_bar", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var a = $(html).find("li:first");
|
|
|
|
assert.equal(a.text().trim(), 'Home');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function topic_edit_form() {
|
|
|
|
var html = render('topic_edit_form');
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("topic_edit_form", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var button = $(html).find("button:first");
|
2014-02-07 21:27:36 +01:00
|
|
|
assert.equal(button.find("i").attr("class"), 'icon-vector-ok');
|
2013-12-11 18:53:05 +01:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function topic_sidebar_actions() {
|
|
|
|
var args = {
|
|
|
|
stream_name: 'social',
|
|
|
|
topic_name: 'lunch',
|
|
|
|
can_mute_topic: true
|
|
|
|
};
|
|
|
|
var html = render('topic_sidebar_actions', args);
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("topic_sidebar_actions", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var a = $(html).find("a.narrow_to_topic");
|
|
|
|
assert.equal(a.text().trim(), 'Narrow to topic lunch');
|
|
|
|
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function tutorial() {
|
|
|
|
var tutorials = [
|
|
|
|
'tutorial_home',
|
|
|
|
'tutorial_message',
|
|
|
|
'tutorial_reply',
|
|
|
|
'tutorial_stream',
|
|
|
|
'tutorial_subject',
|
2014-01-14 17:42:46 +01:00
|
|
|
'tutorial_title'
|
2013-12-11 18:53:05 +01:00
|
|
|
];
|
|
|
|
var html = '';
|
|
|
|
_.each(tutorials, function (tutorial) {
|
|
|
|
var args = {
|
|
|
|
placement: 'left',
|
|
|
|
title: 'Title'
|
|
|
|
};
|
|
|
|
html = render(tutorial, args);
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output(tutorial, html);
|
2013-12-11 18:53:05 +01:00
|
|
|
});
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function user_presence_rows() {
|
2016-01-19 21:03:56 +01:00
|
|
|
global.use_template('user_presence_row'); // partial
|
2013-12-11 18:53:05 +01:00
|
|
|
var args = {
|
|
|
|
users: [
|
|
|
|
{
|
|
|
|
"my_fullname": true,
|
|
|
|
"type_desc": "Active",
|
|
|
|
"type": "active",
|
2013-12-16 19:53:21 +01:00
|
|
|
"num_unread": 0,
|
2013-12-11 18:53:05 +01:00
|
|
|
"email": "lear@zulip.com",
|
|
|
|
"name": "King Lear"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type_desc": "Away",
|
|
|
|
"type": "away",
|
2013-12-16 19:53:21 +01:00
|
|
|
"num_unread": 5,
|
2013-12-11 18:53:05 +01:00
|
|
|
"email": "othello@zulip.com",
|
|
|
|
"name": "Othello"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = '';
|
|
|
|
html += '<ul class="filters">';
|
|
|
|
html += render('user_presence_rows', args);
|
|
|
|
html += '</ul>';
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("user_presence_rows", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var a = $(html).find("a.my_fullname:first");
|
|
|
|
assert.equal(a.text(), 'King Lear');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function user_sidebar_actions() {
|
|
|
|
var args = {
|
|
|
|
email: 'hamlet@zulip.com',
|
|
|
|
name: 'Hamlet'
|
|
|
|
};
|
|
|
|
|
|
|
|
var html = render('user_sidebar_actions', args);
|
|
|
|
|
2016-07-30 04:02:09 +02:00
|
|
|
global.write_handlebars_output("user_sidebar_actions", html);
|
2013-12-11 18:53:05 +01:00
|
|
|
|
|
|
|
var a = $(html).find("a.narrow_to_private_messages");
|
|
|
|
assert.equal(a.text().trim(), 'Narrow to private messages with Hamlet');
|
|
|
|
}());
|
|
|
|
|
2014-01-17 20:13:25 +01:00
|
|
|
// By the end of this test, we should have compiled all our templates. Ideally,
|
|
|
|
// we will also have exercised them to some degree, but that's a little trickier
|
|
|
|
// to enforce.
|
|
|
|
global.make_sure_all_templates_have_been_compiled();
|