mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	We were using a dict to return a sorted list of formatted drafts, instead of building a list.
		
			
				
	
	
		
			327 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
set_global('$', global.make_zjquery());
 | 
						||
set_global('i18n', global.stub_i18n);
 | 
						||
 | 
						||
zrequire('localstorage');
 | 
						||
zrequire('drafts');
 | 
						||
zrequire('XDate', 'xdate');
 | 
						||
zrequire('timerender');
 | 
						||
zrequire('Handlebars', 'handlebars');
 | 
						||
zrequire('util');
 | 
						||
 | 
						||
var ls_container = {};
 | 
						||
var noop = function () { return; };
 | 
						||
 | 
						||
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', {});
 | 
						||
set_global('stream_data', {
 | 
						||
    get_color: function () {
 | 
						||
        return '#FFFFFF';
 | 
						||
    },
 | 
						||
});
 | 
						||
set_global('blueslip', {});
 | 
						||
set_global('people', {
 | 
						||
    // Mocking get_by_email function, here we are
 | 
						||
    // just returning string before `@` in email
 | 
						||
    get_by_email: function (email) {
 | 
						||
        return {
 | 
						||
            full_name: email.split('@')[0],
 | 
						||
        };
 | 
						||
    },
 | 
						||
});
 | 
						||
set_global('templates', {});
 | 
						||
set_global('markdown', {
 | 
						||
    apply_markdown: noop,
 | 
						||
});
 | 
						||
set_global('page_params', {
 | 
						||
    twenty_four_hour_time: false,
 | 
						||
});
 | 
						||
 | 
						||
function stub_timestamp(timestamp, func) {
 | 
						||
    var original_func = Date.prototype.getTime;
 | 
						||
    Date.prototype.getTime = function () {
 | 
						||
        return timestamp;
 | 
						||
    };
 | 
						||
    func();
 | 
						||
    Date.prototype.getTime = original_func;
 | 
						||
}
 | 
						||
 | 
						||
var legacy_draft = {
 | 
						||
    stream: "stream",
 | 
						||
    subject: "lunch",
 | 
						||
    type: "stream",
 | 
						||
    content: "whatever",
 | 
						||
};
 | 
						||
 | 
						||
var compose_args_for_legacy_draft = {
 | 
						||
    stream: "stream",
 | 
						||
    topic: "lunch",
 | 
						||
    type: "stream",
 | 
						||
    content: "whatever",
 | 
						||
};
 | 
						||
 | 
						||
var draft_1 = {
 | 
						||
    stream: "stream",
 | 
						||
    topic: "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",
 | 
						||
};
 | 
						||
var short_msg = {
 | 
						||
    stream: "stream",
 | 
						||
    subject: "topic",
 | 
						||
    type: "stream",
 | 
						||
    content: "a",
 | 
						||
};
 | 
						||
 | 
						||
run_test('legacy', () => {
 | 
						||
    assert.deepEqual(
 | 
						||
        drafts.restore_message(legacy_draft),
 | 
						||
        compose_args_for_legacy_draft
 | 
						||
    );
 | 
						||
});
 | 
						||
 | 
						||
run_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"), {});
 | 
						||
    }());
 | 
						||
});
 | 
						||
 | 
						||
run_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.topic = function () {
 | 
						||
            return draft.topic;
 | 
						||
        };
 | 
						||
    }
 | 
						||
 | 
						||
    stub_draft(draft_1);
 | 
						||
    assert.deepEqual(drafts.snapshot_message(), draft_1);
 | 
						||
 | 
						||
    stub_draft(draft_2);
 | 
						||
    assert.deepEqual(drafts.snapshot_message(), draft_2);
 | 
						||
 | 
						||
    stub_draft(short_msg);
 | 
						||
    assert.deepEqual(drafts.snapshot_message(), undefined);
 | 
						||
 | 
						||
    stub_draft({});
 | 
						||
    assert.equal(drafts.snapshot_message(), undefined);
 | 
						||
});
 | 
						||
 | 
						||
run_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();
 | 
						||
});
 | 
						||
 | 
						||
run_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});
 | 
						||
});
 | 
						||
 | 
						||
run_test('format_drafts', () => {
 | 
						||
    draft_1.updatedAt = new Date(1549958107000).getTime();      // 2/12/2019 07:55:07 AM (UTC+0)
 | 
						||
    draft_2.updatedAt = new Date(1549958107000).setDate(-1);
 | 
						||
    var draft_3 = {
 | 
						||
        stream: "stream 2",
 | 
						||
        subject: "topic",
 | 
						||
        type: "stream",
 | 
						||
        content: "Test Stream Message 2",
 | 
						||
        updatedAt: new Date(1549958107000).setDate(-10),
 | 
						||
    };
 | 
						||
    var draft_4 = {
 | 
						||
        private_message_recipient: "aaron@zulip.com",
 | 
						||
        reply_to: "iago@zulip.com",
 | 
						||
        type: "private",
 | 
						||
        content: "Test Private Message 2",
 | 
						||
        updatedAt: new Date(1549958107000).setDate(-5),
 | 
						||
    };
 | 
						||
    var draft_5 = {
 | 
						||
        private_message_recipient: "aaron@zulip.com",
 | 
						||
        reply_to: "zoe@zulip.com",
 | 
						||
        type: "private",
 | 
						||
        content: "Test Private Message 3",
 | 
						||
        updatedAt: new Date(1549958107000).setDate(-2),
 | 
						||
    };
 | 
						||
 | 
						||
    var expected = [
 | 
						||
        {
 | 
						||
            draft_id: 'id3',
 | 
						||
            is_stream: true,
 | 
						||
            stream: 'stream 2',
 | 
						||
            stream_color: '#FFFFFF',
 | 
						||
            topic: 'topic',
 | 
						||
            raw_content: 'Test Stream Message 2',
 | 
						||
            time_stamp: 'Jan 21',
 | 
						||
        },
 | 
						||
        {
 | 
						||
            draft_id: 'id4',
 | 
						||
            is_stream: false,
 | 
						||
            recipients: 'aaron',
 | 
						||
            raw_content: 'Test Private Message 2',
 | 
						||
            time_stamp: 'Jan 26',
 | 
						||
        },
 | 
						||
        {
 | 
						||
            draft_id: 'id5',
 | 
						||
            is_stream: false,
 | 
						||
            recipients: 'aaron',
 | 
						||
            raw_content: 'Test Private Message 3',
 | 
						||
            time_stamp: 'Jan 29',
 | 
						||
        },
 | 
						||
        {
 | 
						||
            draft_id: 'id2',
 | 
						||
            is_stream: false,
 | 
						||
            recipients: 'aaron',
 | 
						||
            raw_content: 'Test Private Message',
 | 
						||
            time_stamp: 'Jan 30',
 | 
						||
        },
 | 
						||
        {
 | 
						||
            draft_id: 'id1',
 | 
						||
            is_stream: true,
 | 
						||
            stream: 'stream',
 | 
						||
            stream_color: '#FFFFFF',
 | 
						||
            topic: 'topic',
 | 
						||
            raw_content: 'Test Stream Message',
 | 
						||
            time_stamp: '7:55 AM',
 | 
						||
        },
 | 
						||
    ];
 | 
						||
 | 
						||
    blueslip.error = noop;
 | 
						||
    $('#drafts_table').append = noop;
 | 
						||
 | 
						||
    var draft_model = drafts.draft_model;
 | 
						||
    var ls = localstorage();
 | 
						||
    localStorage.clear();
 | 
						||
    var data = { id1: draft_1, id2: draft_2, id3: draft_3, id4: draft_4, id5: draft_5 };
 | 
						||
    ls.set("drafts", data);
 | 
						||
    assert.deepEqual(draft_model.get(), data);
 | 
						||
 | 
						||
    var stub_render_now = timerender.render_now;
 | 
						||
    timerender.render_now = function (time) {
 | 
						||
        return stub_render_now(time, new XDate(1549958107000));
 | 
						||
    };
 | 
						||
 | 
						||
    global.templates.render = function (template_name, data) {
 | 
						||
        assert.equal(template_name, 'draft_table_body');
 | 
						||
        // Tests formatting and sorting of drafts
 | 
						||
        assert.deepEqual(data.drafts, expected);
 | 
						||
        return '<draft table stub>';
 | 
						||
    };
 | 
						||
 | 
						||
    drafts.open_modal = noop;
 | 
						||
    drafts.set_initial_element = noop;
 | 
						||
    drafts.launch();
 | 
						||
    timerender.render_now = stub_render_now;
 | 
						||
});
 |