mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	node tests: Move streams tests to dispatch_subs.
There is also some code cleanup here--in dispatch_subs, we don't stub stream_data, so it's easier to write deeper tests that actually validate the data changes.
This commit is contained in:
		
				
					committed by
					
						
						Steve Howell
					
				
			
			
				
	
			
			
			
						parent
						
							90ca1ded13
						
					
				
				
					commit
					fcf5a66aeb
				
			@@ -14,7 +14,6 @@ const events = require("./lib/events");
 | 
				
			|||||||
const event_fixtures = events.fixtures;
 | 
					const event_fixtures = events.fixtures;
 | 
				
			||||||
const test_message = events.test_message;
 | 
					const test_message = events.test_message;
 | 
				
			||||||
const test_user = events.test_user;
 | 
					const test_user = events.test_user;
 | 
				
			||||||
const test_streams = events.test_streams;
 | 
					 | 
				
			||||||
const typing_person1 = events.typing_person1;
 | 
					const typing_person1 = events.typing_person1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_global("$", make_zjquery());
 | 
					set_global("$", make_zjquery());
 | 
				
			||||||
@@ -36,10 +35,8 @@ const message_edit = set_global("message_edit", {});
 | 
				
			|||||||
const message_events = set_global("message_events", {});
 | 
					const message_events = set_global("message_events", {});
 | 
				
			||||||
const message_list = set_global("message_list", {});
 | 
					const message_list = set_global("message_list", {});
 | 
				
			||||||
const muting_ui = set_global("muting_ui", {});
 | 
					const muting_ui = set_global("muting_ui", {});
 | 
				
			||||||
const narrow_state = set_global("narrow_state", {});
 | 
					 | 
				
			||||||
const night_mode = set_global("night_mode", {});
 | 
					const night_mode = set_global("night_mode", {});
 | 
				
			||||||
const notifications = set_global("notifications", {});
 | 
					const notifications = set_global("notifications", {});
 | 
				
			||||||
const overlays = set_global("overlays", {});
 | 
					 | 
				
			||||||
const reactions = set_global("reactions", {});
 | 
					const reactions = set_global("reactions", {});
 | 
				
			||||||
const realm_icon = set_global("realm_icon", {});
 | 
					const realm_icon = set_global("realm_icon", {});
 | 
				
			||||||
const realm_logo = set_global("realm_logo", {});
 | 
					const realm_logo = set_global("realm_logo", {});
 | 
				
			||||||
@@ -84,7 +81,6 @@ const message_store = zrequire("message_store");
 | 
				
			|||||||
const people = zrequire("people");
 | 
					const people = zrequire("people");
 | 
				
			||||||
const starred_messages = zrequire("starred_messages");
 | 
					const starred_messages = zrequire("starred_messages");
 | 
				
			||||||
const user_status = zrequire("user_status");
 | 
					const user_status = zrequire("user_status");
 | 
				
			||||||
const subs = zrequire("subs");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const emoji = zrequire("emoji", "shared/js/emoji");
 | 
					const emoji = zrequire("emoji", "shared/js/emoji");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -544,74 +540,6 @@ run_test("restart", (override) => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run_test("stream", (override) => {
 | 
					 | 
				
			||||||
    let event = event_fixtures.stream__update;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    with_stub((stub) => {
 | 
					 | 
				
			||||||
        override(stream_events, "update_property", stub.f);
 | 
					 | 
				
			||||||
        override(settings_streams, "update_default_streams_table", noop);
 | 
					 | 
				
			||||||
        dispatch(event);
 | 
					 | 
				
			||||||
        const args = stub.get_args("stream_id", "property", "value");
 | 
					 | 
				
			||||||
        assert_same(args.stream_id, event.stream_id);
 | 
					 | 
				
			||||||
        assert_same(args.property, event.property);
 | 
					 | 
				
			||||||
        assert_same(args.value, event.value);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // stream create
 | 
					 | 
				
			||||||
    event = event_fixtures.stream__create;
 | 
					 | 
				
			||||||
    with_stub((stub) => {
 | 
					 | 
				
			||||||
        override(stream_data, "create_streams", stub.f);
 | 
					 | 
				
			||||||
        override(stream_data, "get_sub_by_id", noop);
 | 
					 | 
				
			||||||
        override(stream_data, "update_calculated_fields", noop);
 | 
					 | 
				
			||||||
        override(subs, "add_sub_to_table", noop);
 | 
					 | 
				
			||||||
        override(overlays, "streams_open", () => true);
 | 
					 | 
				
			||||||
        dispatch(event);
 | 
					 | 
				
			||||||
        const args = stub.get_args("streams");
 | 
					 | 
				
			||||||
        assert_same(
 | 
					 | 
				
			||||||
            args.streams.map((stream) => stream.stream_id),
 | 
					 | 
				
			||||||
            [101, 102],
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // stream delete
 | 
					 | 
				
			||||||
    event = event_fixtures.stream__delete;
 | 
					 | 
				
			||||||
    with_stub((stub) => {
 | 
					 | 
				
			||||||
        override(subs, "remove_stream", noop);
 | 
					 | 
				
			||||||
        override(stream_data, "delete_sub", noop);
 | 
					 | 
				
			||||||
        override(settings_streams, "update_default_streams_table", noop);
 | 
					 | 
				
			||||||
        override(stream_data, "remove_default_stream", noop);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const devel_id = test_streams.devel.stream_id;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        override(stream_data, "get_sub_by_id", (id) =>
 | 
					 | 
				
			||||||
            id === devel_id ? {subscribed: true} : {subscribed: false},
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        narrow_state.is_for_stream_id = () => true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let updated = false;
 | 
					 | 
				
			||||||
        override(current_msg_list, "update_trailing_bookend", () => {
 | 
					 | 
				
			||||||
            updated = true;
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        override(stream_list, "remove_sidebar_row", stub.f);
 | 
					 | 
				
			||||||
        dispatch(event);
 | 
					 | 
				
			||||||
        const args = stub.get_args("stream_id");
 | 
					 | 
				
			||||||
        assert_same(args.stream_id, devel_id);
 | 
					 | 
				
			||||||
        assert_same(updated, true);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        override(settings_org, "sync_realm_settings", noop);
 | 
					 | 
				
			||||||
        override(stream_list, "remove_sidebar_row", noop);
 | 
					 | 
				
			||||||
        page_params.realm_notifications_stream_id = devel_id;
 | 
					 | 
				
			||||||
        dispatch(event);
 | 
					 | 
				
			||||||
        assert_same(page_params.realm_notifications_stream_id, -1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        page_params.realm_signup_notifications_stream_id = devel_id;
 | 
					 | 
				
			||||||
        dispatch(event);
 | 
					 | 
				
			||||||
        assert_same(page_params.realm_signup_notifications_stream_id, -1);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
run_test("submessage", (override) => {
 | 
					run_test("submessage", (override) => {
 | 
				
			||||||
    const event = event_fixtures.submessage;
 | 
					    const event = event_fixtures.submessage;
 | 
				
			||||||
    with_stub((stub) => {
 | 
					    with_stub((stub) => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,12 +17,30 @@ const subs = set_global("subs", {});
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const peer_data = zrequire("peer_data");
 | 
					const peer_data = zrequire("peer_data");
 | 
				
			||||||
const people = zrequire("people");
 | 
					const people = zrequire("people");
 | 
				
			||||||
 | 
					 | 
				
			||||||
const stream_data = zrequire("stream_data");
 | 
					const stream_data = zrequire("stream_data");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set_global("current_msg_list", {});
 | 
				
			||||||
 | 
					const narrow_state = set_global("narrow_state", {});
 | 
				
			||||||
 | 
					const page_params = set_global("page_params", {});
 | 
				
			||||||
 | 
					const overlays = set_global("overlays", {});
 | 
				
			||||||
 | 
					const settings_org = set_global("settings_org", {});
 | 
				
			||||||
 | 
					const settings_streams = set_global("settings_streams", {});
 | 
				
			||||||
 | 
					const stream_list = set_global("stream_list", {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const server_events_dispatch = zrequire("server_events_dispatch");
 | 
					const server_events_dispatch = zrequire("server_events_dispatch");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const noop = function () {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
people.add_active_user(test_user);
 | 
					people.add_active_user(test_user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const me = {
 | 
				
			||||||
 | 
					    email: "me@zulip.com",
 | 
				
			||||||
 | 
					    full_name: "Me Myself",
 | 
				
			||||||
 | 
					    user_id: 101,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					people.add_active_user(me);
 | 
				
			||||||
 | 
					people.initialize_current_user(me.user_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const dispatch = server_events_dispatch.dispatch_normal_event;
 | 
					const dispatch = server_events_dispatch.dispatch_normal_event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function test(label, f) {
 | 
					function test(label, f) {
 | 
				
			||||||
@@ -149,3 +167,99 @@ test("peer event error handling (bad stream_ids/user_ids)", (override) => {
 | 
				
			|||||||
    blueslip.expect("warn", "We have untracked user_ids: 3333,4444");
 | 
					    blueslip.expect("warn", "We have untracked user_ids: 3333,4444");
 | 
				
			||||||
    dispatch(remove_event);
 | 
					    dispatch(remove_event);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("stream update", (override) => {
 | 
				
			||||||
 | 
					    const event = event_fixtures.stream__update;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with_stub((stub) => {
 | 
				
			||||||
 | 
					        override(stream_events, "update_property", stub.f);
 | 
				
			||||||
 | 
					        override(settings_streams, "update_default_streams_table", noop);
 | 
				
			||||||
 | 
					        dispatch(event);
 | 
				
			||||||
 | 
					        const args = stub.get_args("stream_id", "property", "value");
 | 
				
			||||||
 | 
					        assert.equal(args.stream_id, event.stream_id);
 | 
				
			||||||
 | 
					        assert.equal(args.property, event.property);
 | 
				
			||||||
 | 
					        assert.equal(args.value, event.value);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("stream create", (override) => {
 | 
				
			||||||
 | 
					    const event = event_fixtures.stream__create;
 | 
				
			||||||
 | 
					    with_stub((stub) => {
 | 
				
			||||||
 | 
					        override(stream_data, "create_streams", stub.f);
 | 
				
			||||||
 | 
					        override(stream_data, "get_sub_by_id", noop);
 | 
				
			||||||
 | 
					        override(stream_data, "update_calculated_fields", noop);
 | 
				
			||||||
 | 
					        override(subs, "add_sub_to_table", noop);
 | 
				
			||||||
 | 
					        override(overlays, "streams_open", () => true);
 | 
				
			||||||
 | 
					        dispatch(event);
 | 
				
			||||||
 | 
					        const args = stub.get_args("streams");
 | 
				
			||||||
 | 
					        assert.deepEqual(
 | 
				
			||||||
 | 
					            args.streams.map((stream) => stream.stream_id),
 | 
				
			||||||
 | 
					            [101, 102],
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("stream delete (normal)", (override) => {
 | 
				
			||||||
 | 
					    const event = event_fixtures.stream__delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const stream of event.streams) {
 | 
				
			||||||
 | 
					        stream_data.add_sub(stream);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    stream_data.subscribe_myself(event.streams[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override(stream_data, "delete_sub", noop);
 | 
				
			||||||
 | 
					    override(settings_streams, "update_default_streams_table", noop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    narrow_state.is_for_stream_id = () => true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let bookend_updates = 0;
 | 
				
			||||||
 | 
					    override(current_msg_list, "update_trailing_bookend", () => {
 | 
				
			||||||
 | 
					        bookend_updates += 1;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const removed_stream_ids = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override(subs, "remove_stream", (stream_id) => {
 | 
				
			||||||
 | 
					        removed_stream_ids.push(stream_id);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let removed_sidebar_rows = 0;
 | 
				
			||||||
 | 
					    override(stream_list, "remove_sidebar_row", () => {
 | 
				
			||||||
 | 
					        removed_sidebar_rows += 1;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dispatch(event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert.deepEqual(removed_stream_ids, [event.streams[0].stream_id, event.streams[1].stream_id]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // We should possibly be able to make a single call to
 | 
				
			||||||
 | 
					    // update_trailing_bookend, but we currently do it for each stream.
 | 
				
			||||||
 | 
					    assert.equal(bookend_updates, 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert.equal(removed_sidebar_rows, 1);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test("stream delete (special streams)", (override) => {
 | 
				
			||||||
 | 
					    const event = event_fixtures.stream__delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const stream of event.streams) {
 | 
				
			||||||
 | 
					        stream_data.add_sub(stream);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // sanity check data
 | 
				
			||||||
 | 
					    assert.equal(event.streams.length, 2);
 | 
				
			||||||
 | 
					    page_params.realm_notifications_stream_id = event.streams[0].stream_id;
 | 
				
			||||||
 | 
					    page_params.realm_signup_notifications_stream_id = event.streams[1].stream_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override(subs, "remove_stream", noop);
 | 
				
			||||||
 | 
					    override(settings_org, "sync_realm_settings", noop);
 | 
				
			||||||
 | 
					    override(settings_streams, "update_default_streams_table", noop);
 | 
				
			||||||
 | 
					    override(current_msg_list, "update_trailing_bookend", noop);
 | 
				
			||||||
 | 
					    override(stream_list, "remove_sidebar_row", noop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dispatch(event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert.equal(page_params.realm_notifications_stream_id, -1);
 | 
				
			||||||
 | 
					    assert.equal(page_params.realm_signup_notifications_stream_id, -1);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user