Files
zulip/zerver/tests/frontend/node/message_list_view.js
Jason Michalski e60f76487f Rename message to message_container
Now that we are not directly using message in the message list view
rename the uses of message that are message_containers.

(imported from commit 5c355703a8934a74864f5de6ecb1e2fd851e5d41)
2014-03-18 15:05:39 -04:00

340 lines
12 KiB
JavaScript

var _ = require('third/underscore/underscore.js');
var MessageListView = require('js/message_list_view.js');
add_dependencies({
$: 'jquery',
XDate: 'third/xdate/xdate.dev.js',
util: 'js/util.js'
});
set_global('home_msg_list', null);
set_global('feature_flags', {twenty_four_hour_time: false});
set_global('ui', {small_avatar_url: function () { return ''; }});
set_global('notifications', {speaking_at_me: function () {}});
set_global('unread', {message_unread: function () {}});
(function test_merge_message_groups() {
// MessageListView has lots of DOM code, so we are going to test the mesage
// group mearging logic on its own.
function build_message_context(message, message_context) {
if (message_context === undefined) {
message_context = {};
}
if (message === undefined) {
message = {};
}
message_context = _.defaults(message_context, {
include_sender: true
});
message_context.msg = _.defaults(message, {
id: _.uniqueId('test_message_'),
status_message: false,
type: 'stream',
stream: 'Test Stream 1',
subject: 'Test Subject 1',
sender_email: 'test@example.com',
timestamp: _.uniqueId()
});
return message_context;
}
function build_message_group(messages) {
return {
message_containers: messages,
message_group_id: _.uniqueId('test_message_group_'),
show_date: true
};
}
function build_list(message_groups) {
var list = new MessageListView(undefined, undefined, true);
list._message_groups = message_groups;
list.list = {
unsubscribed_bookend_content: function () {},
subscribed_bookend_content: function () {}
};
return list;
}
function assert_message_list_equal(list1, list2) {
assert.deepEqual(
_.chain(list1).pluck('msg').pluck('id').value(),
_.chain(list2).pluck('msg').pluck('id').value()
);
}
function assert_message_groups_list_equal(list1, list2) {
function extract_message_ids(message_group) {
return _.chain(message_group.messages)
.pluck('msg')
.pluck('id')
.value();
}
assert.deepEqual(
_.map(list1, extract_message_ids),
_.map(list2, extract_message_ids)
);
}
(function test_empty_list_bottom() {
var list = build_list([]);
var message_group = build_message_group([
build_message_context()
]);
var result = list.merge_message_groups([message_group], 'bottom');
assert_message_groups_list_equal(list._message_groups, [message_group]);
assert_message_groups_list_equal(result.append_groups, [message_group]);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_append_message_same_subject() {
var message1 = build_message_context();
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context();
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'bottom');
assert_message_groups_list_equal(
list._message_groups,
[build_message_group([message1, message2])]
);
assert_message_groups_list_equal(result.append_groups, []);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, [message2]);
assert_message_list_equal(result.rerender_messages, [message1]);
}());
(function test_append_message_diffrent_subject() {
var message1 = build_message_context();
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({subject: 'Test subject 2'});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'bottom');
assert(!message_group2.show_date);
assert_message_groups_list_equal(
list._message_groups,
[message_group1, message_group2]
);
assert_message_groups_list_equal(result.append_groups, [message_group2]);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_append_message_diffrent_day() {
var message1 = build_message_context({timestamp: 1000});
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({timestamp: 900000});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'bottom');
assert(message_group2.show_date);
assert_message_groups_list_equal(
list._message_groups,
[message_group1, message_group2]
);
assert_message_groups_list_equal(result.append_groups, [message_group2]);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_append_message_historical() {
var message1 = build_message_context({historical: false});
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({historical: true});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'bottom');
assert(message_group1.bookend_bottom);
assert_message_groups_list_equal(
list._message_groups,
[message_group1, message_group2]
);
assert_message_groups_list_equal(result.append_groups, [message_group2]);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_append_message_same_subject_me_message() {
var message1 = build_message_context();
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({}, {is_me_message: true});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'bottom');
assert(message2.include_sender);
assert_message_groups_list_equal(
list._message_groups,
[build_message_group([message1, message2])]
);
assert_message_groups_list_equal(result.append_groups, []);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, [message2]);
assert_message_list_equal(result.rerender_messages, [message1]);
}());
(function test_prepend_message_same_subject() {
var message1 = build_message_context();
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context();
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'top');
assert_message_groups_list_equal(
list._message_groups,
[build_message_group([message2, message1])]
);
assert_message_groups_list_equal(result.append_groups, []);
assert_message_groups_list_equal(result.prepend_groups, []);
assert_message_groups_list_equal(result.rerender_groups,
[build_message_group([message2, message1])]
);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_prepend_message_diffrent_subject() {
var message1 = build_message_context();
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({subject: 'Test Subject 2'});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'top');
assert_message_groups_list_equal(
list._message_groups,
[message_group2, message_group1]
);
assert_message_groups_list_equal(result.append_groups, []);
assert_message_groups_list_equal(result.prepend_groups, [message_group2]);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_prepend_message_diffrent_day() {
var message1 = build_message_context({timestamp: 900000});
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({timestamp: 1000});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'top');
assert(message_group1.show_date);
assert_message_groups_list_equal(
list._message_groups,
[message_group2, message_group1]
);
assert_message_groups_list_equal(result.append_groups, []);
assert_message_groups_list_equal(result.prepend_groups, [message_group2]);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
(function test_prepend_message_historical() {
var message1 = build_message_context({historical: false});
var message_group1 = build_message_group([
message1
]);
var message2 = build_message_context({historical: true});
var message_group2 = build_message_group([
message2
]);
var list = build_list([message_group1]);
var result = list.merge_message_groups([message_group2], 'top');
assert(message_group2.bookend_bottom);
assert_message_groups_list_equal(
list._message_groups,
[message_group2, message_group1]
);
assert_message_groups_list_equal(result.append_groups, []);
assert_message_groups_list_equal(result.prepend_groups, [message_group2]);
assert_message_groups_list_equal(result.rerender_groups, []);
assert_message_list_equal(result.append_messages, []);
assert_message_list_equal(result.rerender_messages, []);
}());
}());