diff --git a/frontend_tests/node_tests/narrow.js b/frontend_tests/node_tests/narrow.js index 6f88052726..bf60c2661a 100644 --- a/frontend_tests/node_tests/narrow.js +++ b/frontend_tests/node_tests/narrow.js @@ -22,76 +22,6 @@ function set_filter(operators) { narrow_state.set_current_filter(new Filter(operators)); } -(function test_stream() { - var test_stream = {name: 'Test', stream_id: 15}; - stream_data.add_sub('Test', test_stream); - - assert(!narrow_state.is_for_stream_id(test_stream.stream_id)); - - set_filter([['stream', 'Test'], ['topic', 'Bar'], ['search', 'yo']]); - - assert.equal(narrow_state.stream(), 'Test'); - assert.equal(narrow_state.topic(), 'Bar'); - assert(narrow_state.is_for_stream_id(test_stream.stream_id)); -}()); - - -(function test_narrowed() { - narrow_state.reset_current_filter(); // not narrowed, basically - assert(!narrow_state.narrowed_to_pms()); - assert(!narrow_state.narrowed_by_reply()); - assert(!narrow_state.narrowed_by_pm_reply()); - assert(!narrow_state.narrowed_by_topic_reply()); - assert(!narrow_state.narrowed_to_search()); - assert(!narrow_state.narrowed_to_topic()); - - set_filter([['stream', 'Foo']]); - assert(!narrow_state.narrowed_to_pms()); - assert(!narrow_state.narrowed_by_reply()); - assert(!narrow_state.narrowed_by_pm_reply()); - assert(!narrow_state.narrowed_by_topic_reply()); - assert(!narrow_state.narrowed_to_search()); - assert(!narrow_state.narrowed_to_topic()); - - set_filter([['pm-with', 'steve@zulip.com']]); - assert(narrow_state.narrowed_to_pms()); - assert(narrow_state.narrowed_by_reply()); - assert(narrow_state.narrowed_by_pm_reply()); - assert(!narrow_state.narrowed_by_topic_reply()); - assert(!narrow_state.narrowed_to_search()); - assert(!narrow_state.narrowed_to_topic()); - - set_filter([['stream', 'Foo'], ['topic', 'bar']]); - assert(!narrow_state.narrowed_to_pms()); - assert(narrow_state.narrowed_by_reply()); - assert(!narrow_state.narrowed_by_pm_reply()); - assert(narrow_state.narrowed_by_topic_reply()); - assert(!narrow_state.narrowed_to_search()); - assert(narrow_state.narrowed_to_topic()); - - set_filter([['search', 'grail']]); - assert(!narrow_state.narrowed_to_pms()); - assert(!narrow_state.narrowed_by_reply()); - assert(!narrow_state.narrowed_by_pm_reply()); - assert(!narrow_state.narrowed_by_topic_reply()); - assert(narrow_state.narrowed_to_search()); - assert(!narrow_state.narrowed_to_topic()); -}()); - -(function test_operators() { - set_filter([['stream', 'Foo'], ['topic', 'Bar'], ['search', 'Yo']]); - var result = narrow_state.operators(); - assert.equal(result.length, 3); - assert.equal(result[0].operator, 'stream'); - assert.equal(result[0].operand, 'Foo'); - - assert.equal(result[1].operator, 'topic'); - assert.equal(result[1].operand, 'Bar'); - - assert.equal(result[2].operator, 'search'); - assert.equal(result[2].operand, 'yo'); -}()); - (function test_stream_topic() { set_filter([['stream', 'Foo'], ['topic', 'Bar'], ['search', 'Yo']]); @@ -123,40 +53,6 @@ function set_filter(operators) { }()); -(function test_muting_enabled() { - set_filter([['stream', 'devel']]); - assert(narrow_state.muting_enabled()); - - narrow_state.reset_current_filter(); // not narrowed, basically - assert(narrow_state.muting_enabled()); - - set_filter([['stream', 'devel'], ['topic', 'mac']]); - assert(!narrow_state.muting_enabled()); - - set_filter([['search', 'whatever']]); - assert(!narrow_state.muting_enabled()); - - set_filter([['is', 'private']]); - assert(!narrow_state.muting_enabled()); - -}()); - -(function test_set_compose_defaults() { - set_filter([['stream', 'Foo'], ['topic', 'Bar']]); - - var opts = {}; - narrow_state.set_compose_defaults(opts); - assert.equal(opts.stream, 'Foo'); - assert.equal(opts.subject, 'Bar'); - - stream_data.add_sub('ROME', {name: 'ROME', stream_id: 99}); - set_filter([['stream', 'rome']]); - - opts = {}; - narrow_state.set_compose_defaults(opts); - assert.equal(opts.stream, 'ROME'); -}()); - (function test_uris() { var ray = { email: 'ray@example.com', @@ -205,6 +101,7 @@ function set_filter(operators) { assert.equal(show_id, '#nonsubbed_private_nonexistent_stream_narrow_message'); // for non sub public stream + stream_data.add_sub('ROME', {name: 'ROME', stream_id: 99}); set_filter([['stream', 'Rome']]); narrow.show_empty_narrow_message(); assert.equal(hide_id,'.empty_feed_notice'); @@ -250,23 +147,3 @@ function set_filter(operators) { assert.equal(hide_id,'.empty_feed_notice'); assert.equal(show_id, '#empty_search_narrow_message'); }()); - -(function test_update_email() { - var steve = { - email: 'steve@foo.com', - user_id: 43, - full_name: 'Steve', - }; - - people.add(steve); - set_filter([ - ['pm-with', 'steve@foo.com'], - ['sender', 'steve@foo.com'], - ['stream', 'steve@foo.com'], // try to be tricky - ]); - narrow_state.update_email(steve.user_id, 'showell@foo.com'); - var filter = narrow_state.filter(); - assert.deepEqual(filter.operands('pm-with'), ['showell@foo.com']); - assert.deepEqual(filter.operands('sender'), ['showell@foo.com']); - assert.deepEqual(filter.operands('stream'), ['steve@foo.com']); -}()); diff --git a/frontend_tests/node_tests/narrow_state.js b/frontend_tests/node_tests/narrow_state.js new file mode 100644 index 0000000000..6891650b24 --- /dev/null +++ b/frontend_tests/node_tests/narrow_state.js @@ -0,0 +1,142 @@ +add_dependencies({ + people: 'js/people.js', + stream_data: 'js/stream_data.js', + Filter: 'js/filter.js', +}); + +var narrow_state = require('js/narrow_state.js'); + +var Filter = global.Filter; +var stream_data = global.stream_data; +var _ = global._; + +function set_filter(operators) { + operators = _.map(operators, function (op) { + return {operator: op[0], operand: op[1]}; + }); + narrow_state.set_current_filter(new Filter(operators)); +} + +(function test_stream() { + var test_stream = {name: 'Test', stream_id: 15}; + stream_data.add_sub('Test', test_stream); + + assert(!narrow_state.is_for_stream_id(test_stream.stream_id)); + + set_filter([['stream', 'Test'], ['topic', 'Bar'], ['search', 'yo']]); + + assert.equal(narrow_state.stream(), 'Test'); + assert.equal(narrow_state.topic(), 'Bar'); + assert(narrow_state.is_for_stream_id(test_stream.stream_id)); +}()); + + +(function test_narrowed() { + narrow_state.reset_current_filter(); // not narrowed, basically + assert(!narrow_state.narrowed_to_pms()); + assert(!narrow_state.narrowed_by_reply()); + assert(!narrow_state.narrowed_by_pm_reply()); + assert(!narrow_state.narrowed_by_topic_reply()); + assert(!narrow_state.narrowed_to_search()); + assert(!narrow_state.narrowed_to_topic()); + + set_filter([['stream', 'Foo']]); + assert(!narrow_state.narrowed_to_pms()); + assert(!narrow_state.narrowed_by_reply()); + assert(!narrow_state.narrowed_by_pm_reply()); + assert(!narrow_state.narrowed_by_topic_reply()); + assert(!narrow_state.narrowed_to_search()); + assert(!narrow_state.narrowed_to_topic()); + + set_filter([['pm-with', 'steve@zulip.com']]); + assert(narrow_state.narrowed_to_pms()); + assert(narrow_state.narrowed_by_reply()); + assert(narrow_state.narrowed_by_pm_reply()); + assert(!narrow_state.narrowed_by_topic_reply()); + assert(!narrow_state.narrowed_to_search()); + assert(!narrow_state.narrowed_to_topic()); + + set_filter([['stream', 'Foo'], ['topic', 'bar']]); + assert(!narrow_state.narrowed_to_pms()); + assert(narrow_state.narrowed_by_reply()); + assert(!narrow_state.narrowed_by_pm_reply()); + assert(narrow_state.narrowed_by_topic_reply()); + assert(!narrow_state.narrowed_to_search()); + assert(narrow_state.narrowed_to_topic()); + + set_filter([['search', 'grail']]); + assert(!narrow_state.narrowed_to_pms()); + assert(!narrow_state.narrowed_by_reply()); + assert(!narrow_state.narrowed_by_pm_reply()); + assert(!narrow_state.narrowed_by_topic_reply()); + assert(narrow_state.narrowed_to_search()); + assert(!narrow_state.narrowed_to_topic()); +}()); + +(function test_operators() { + set_filter([['stream', 'Foo'], ['topic', 'Bar'], ['search', 'Yo']]); + var result = narrow_state.operators(); + assert.equal(result.length, 3); + assert.equal(result[0].operator, 'stream'); + assert.equal(result[0].operand, 'Foo'); + + assert.equal(result[1].operator, 'topic'); + assert.equal(result[1].operand, 'Bar'); + + assert.equal(result[2].operator, 'search'); + assert.equal(result[2].operand, 'yo'); +}()); + +(function test_muting_enabled() { + set_filter([['stream', 'devel']]); + assert(narrow_state.muting_enabled()); + + narrow_state.reset_current_filter(); // not narrowed, basically + assert(narrow_state.muting_enabled()); + + set_filter([['stream', 'devel'], ['topic', 'mac']]); + assert(!narrow_state.muting_enabled()); + + set_filter([['search', 'whatever']]); + assert(!narrow_state.muting_enabled()); + + set_filter([['is', 'private']]); + assert(!narrow_state.muting_enabled()); + +}()); + +(function test_set_compose_defaults() { + set_filter([['stream', 'Foo'], ['topic', 'Bar']]); + + var opts = {}; + narrow_state.set_compose_defaults(opts); + assert.equal(opts.stream, 'Foo'); + assert.equal(opts.subject, 'Bar'); + + stream_data.add_sub('ROME', {name: 'ROME', stream_id: 99}); + set_filter([['stream', 'rome']]); + + opts = {}; + narrow_state.set_compose_defaults(opts); + assert.equal(opts.stream, 'ROME'); +}()); + +(function test_update_email() { + var steve = { + email: 'steve@foo.com', + user_id: 43, + full_name: 'Steve', + }; + + people.add(steve); + set_filter([ + ['pm-with', 'steve@foo.com'], + ['sender', 'steve@foo.com'], + ['stream', 'steve@foo.com'], // try to be tricky + ]); + narrow_state.update_email(steve.user_id, 'showell@foo.com'); + var filter = narrow_state.filter(); + assert.deepEqual(filter.operands('pm-with'), ['showell@foo.com']); + assert.deepEqual(filter.operands('sender'), ['showell@foo.com']); + assert.deepEqual(filter.operands('stream'), ['steve@foo.com']); +}());