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:
Steve Howell
2021-02-11 15:36:42 +00:00
committed by Steve Howell
parent 90ca1ded13
commit fcf5a66aeb
2 changed files with 115 additions and 73 deletions

View File

@@ -14,7 +14,6 @@ const events = require("./lib/events");
const event_fixtures = events.fixtures;
const test_message = events.test_message;
const test_user = events.test_user;
const test_streams = events.test_streams;
const typing_person1 = events.typing_person1;
set_global("$", make_zjquery());
@@ -36,10 +35,8 @@ const message_edit = set_global("message_edit", {});
const message_events = set_global("message_events", {});
const message_list = set_global("message_list", {});
const muting_ui = set_global("muting_ui", {});
const narrow_state = set_global("narrow_state", {});
const night_mode = set_global("night_mode", {});
const notifications = set_global("notifications", {});
const overlays = set_global("overlays", {});
const reactions = set_global("reactions", {});
const realm_icon = set_global("realm_icon", {});
const realm_logo = set_global("realm_logo", {});
@@ -84,7 +81,6 @@ const message_store = zrequire("message_store");
const people = zrequire("people");
const starred_messages = zrequire("starred_messages");
const user_status = zrequire("user_status");
const subs = zrequire("subs");
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) => {
const event = event_fixtures.submessage;
with_stub((stub) => {

View File

@@ -17,12 +17,30 @@ const subs = set_global("subs", {});
const peer_data = zrequire("peer_data");
const people = zrequire("people");
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 noop = function () {};
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;
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");
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);
});