zulip/frontend_tests/node_tests/drafts.js

174 lines
4.6 KiB
JavaScript
Raw Normal View History

2017-11-08 17:12:12 +01:00
zrequire('localstorage');
zrequire('drafts');
set_global('$', global.make_zjquery());
set_global('window', {});
var ls_container = {};
set_global('localStorage', {
getItem: function (key) {
return ls_container[key];
},
setItem: function (key, val) {
ls_container[key] = val;
},
removeItem: function (key) {
delete ls_container[key];
},
clear: function () {
ls_container = {};
},
});
set_global('compose', {});
set_global('compose_state', {});
function stub_timestamp(timestamp, func) {
var original_func = Date.prototype.getTime;
Date.prototype.getTime = function () {
return timestamp;
};
func();
Date.prototype.getTime = original_func;
}
var draft_1 = {
stream: "stream",
subject: "topic",
type: "stream",
content: "Test Stream Message",
};
var draft_2 = {
private_message_recipient: "aaron@zulip.com",
reply_to: "aaron@zulip.com",
type: "private",
content: "Test Private Message",
};
(function test_draft_model() {
var draft_model = drafts.draft_model;
var ls = localstorage();
localStorage.clear();
(function test_get() {
var expected = { id1: draft_1, id2: draft_2 };
ls.set("drafts", expected);
assert.deepEqual(draft_model.get(), expected);
}());
localStorage.clear();
(function test_get() {
ls.set("drafts", { id1: draft_1 });
assert.deepEqual(draft_model.getDraft("id1"), draft_1);
assert.equal(draft_model.getDraft("id2"), false);
}());
localStorage.clear();
(function test_addDraft() {
stub_timestamp(1, function () {
var expected = _.clone(draft_1);
expected.updatedAt = 1;
var id = draft_model.addDraft(_.clone(draft_1));
assert.deepEqual(ls.get("drafts")[id], expected);
});
}());
localStorage.clear();
(function test_editDraft() {
stub_timestamp(2, function () {
ls.set("drafts", { id1: draft_1 });
var expected = _.clone(draft_2);
expected.updatedAt = 2;
draft_model.editDraft("id1", _.clone(draft_2));
assert.deepEqual(ls.get("drafts").id1, expected);
});
}());
localStorage.clear();
(function test_deleteDraft() {
ls.set("drafts", { id1: draft_1 });
draft_model.deleteDraft("id1");
assert.deepEqual(ls.get("drafts"), {});
}());
}());
(function test_snapshot_message() {
function stub_draft(draft) {
global.compose_state.get_message_type = function () {
return draft.type;
};
global.compose_state.composing = function () {
return !!draft.type;
};
global.compose_state.message_content = function () {
return draft.content;
};
global.compose_state.recipient = function () {
return draft.private_message_recipient;
};
global.compose_state.stream_name = function () {
return draft.stream;
};
global.compose_state.subject = function () {
return draft.subject;
};
}
stub_draft(draft_1);
assert.deepEqual(drafts.snapshot_message(), draft_1);
stub_draft(draft_2);
assert.deepEqual(drafts.snapshot_message(), draft_2);
stub_draft({});
assert.equal(drafts.snapshot_message(), undefined);
}());
(function test_initialize() {
var message_content = $("#compose-textarea");
message_content.focusout = function (f) {
assert.equal(f, drafts.update_draft);
f();
};
global.window.addEventListener = function (event_name, f) {
assert.equal(event_name, "beforeunload");
var called = false;
drafts.update_draft = function () { called = true; };
f();
assert(called);
};
drafts.initialize();
}());
(function test_remove_old_drafts() {
var draft_3 = {
stream: "stream",
subject: "topic",
type: "stream",
content: "Test Stream Message",
updatedAt: Date.now(),
};
var draft_4 = {
private_message_recipient: "aaron@zulip.com",
reply_to: "aaron@zulip.com",
type: "private",
content: "Test Private Message",
updatedAt: new Date().setDate(-30),
};
var draft_model = drafts.draft_model;
var ls = localstorage();
localStorage.clear();
var data = {id3: draft_3, id4: draft_4};
ls.set("drafts", data);
assert.deepEqual(draft_model.get(), data);
drafts.remove_old_drafts();
assert.deepEqual(draft_model.get(), {id3: draft_3});
}());