var common = require('../casper_lib/common.js'); function stream_checkbox(stream_name) { const stream_id = common.get_stream_id(stream_name); return '#stream-checkboxes [data-stream-id="' + stream_id + '"]'; } function stream_span(stream_name) { return stream_checkbox(stream_name) + ' input ~ span'; } function user_checkbox(email) { var user_id = common.get_user_id(email); return '#user-checkboxes [data-user-id="' + user_id + '"]'; } function user_span(email) { return user_checkbox(email) + ' input ~ span'; } function is_checked(email) { var sel = user_checkbox(email); return casper.evaluate(function (sel) { return $(sel).find('input')[0].checked; }, { sel: sel, }); } common.start_and_log_in(); casper.then(function () { var menu_selector = '#settings-dropdown'; casper.test.info('Streams page'); casper.waitUntilVisible(menu_selector, function () { casper.click(menu_selector); casper.then(function () { casper.click('a[href^="#streams"]'); casper.test.assertUrlMatch( /^http:\/\/[^/]+\/#streams/, 'URL suggests we are on streams page'); casper.waitUntilVisible('#subscription_overlay.new-style', function () { casper.test.assertExists('#subscription_overlay.new-style', 'Streams page is active'); }); }); }); }); casper.waitUntilVisible('.sub_unsub_button.checked', function () { casper.test.assertExists('.sub_unsub_button.checked', 'Initial subscriptions loaded'); casper.click('#add_new_subscription .create_stream_button'); }); casper.then(function () { casper.test.assertExists(user_checkbox('cordelia@zulip.com'), 'Original user list contains Cordelia'); casper.test.assertExists(user_checkbox('othello@zulip.com'), 'Original user list contains Othello'); }); casper.waitUntilVisible("#copy-from-stream-expand-collapse", function () { casper.click('#copy-from-stream-expand-collapse'); }); casper.waitUntilVisible("#stream-checkboxes", function () { casper.test.assertExists(stream_checkbox('Scotland'), 'Original stream list contains Scotland'); casper.test.assertExists(stream_checkbox('Rome'), 'Original stream list contains Rome'); }); casper.waitUntilVisible("form#stream_creation_form", function () { casper.test.info("Filtering with keyword 'ot'"); casper.fill('form#stream_creation_form', {user_list_filter: 'ot'}); }); casper.waitUntilVisible("#user-checkboxes", function () { casper.test.assertEquals(casper.visible(user_checkbox('cordelia@zulip.com')), false, "Cordelia is not visible"); casper.test.assertEquals(casper.visible(user_checkbox('othello@zulip.com')), true, "Othello is visible"); /* The filter should not impact streams */ casper.test.assertEquals(casper.visible(stream_checkbox('Scotland')), true, "Scotland is visible"); casper.test.assertEquals(casper.visible(stream_checkbox('Rome')), true, "Rome is visible"); }); casper.then(function () { casper.test.info("Check Uncheck only visible users for new stream"); casper.click('.subs_set_all_users'); casper.wait(100, function () { casper.test.assert( !is_checked('cordelia@zulip.com'), "Cordelia is unchecked"); casper.test.assert( is_checked('othello@zulip.com'), "Othello is checked"); }); }); casper.then(function () { casper.test.info("Check Uncheck only visible users for new stream"); casper.click('.subs_unset_all_users'); casper.wait(100, function () { casper.test.assert( !is_checked('othello@zulip.com'), "Othello is unchecked"); }); }); casper.then(function () { casper.test.info("Clearing user filter search box"); casper.fill('form#stream_creation_form', {user_list_filter: ''}); }); casper.then(function () { casper.test.assertEquals(casper.visible(user_checkbox('cordelia@zulip.com')), true, "Cordelia is visible again"); casper.test.assertEquals(casper.visible(user_checkbox('othello@zulip.com')), true, "Othello is visible again"); casper.test.assertEquals(casper.visible(stream_checkbox('Scotland')), true, "Scotland is visible again"); casper.test.assertEquals(casper.visible(stream_checkbox('Rome')), true, "Rome is visible again"); }); casper.then(function () { casper.waitUntilVisible('#stream_creation_form', function () { casper.test.assertTextExists('Create stream', 'New stream creation panel'); casper.fill('form#stream_creation_form', {stream_name: 'Waseemio', stream_description: 'Oimeesaw'}); casper.click(stream_span('Scotland')); casper.click(user_span('cordelia@zulip.com')); casper.click(user_span('othello@zulip.com')); casper.click('form#stream_creation_form button.button.sea-green'); }); }); casper.then(function () { casper.waitFor(function () { return casper.evaluate(function () { return $('.stream-name').is(':contains("Waseemio")'); }); }); }); casper.then(function () { casper.test.info("User should be subscribed to stream Waseemio"); casper.test.assertSelectorHasText('.stream-name', 'Waseemio'); casper.test.assertSelectorHasText('.description', 'Oimeesaw'); // Based on the selected checkboxes while creating stream, // 4 users from Scotland are added. // 1 user, Cordelia, is added. Othello (subscribed to Scotland) is removed. // FIXME: This assertion may pick up the count from a random other stream. casper.test.assertSelectorHasText('.subscriber-count-text', '4'); casper.fill('form#stream_creation_form', {stream_name: ' '}); casper.click('form#stream_creation_form button.button.sea-green'); }); casper.then(function () { common.wait_for_text('#stream_name_error', 'A stream needs to have a name', function () { casper.test.assertTextExists('A stream needs to have a name', "Can't create a stream with an empty name"); casper.click('form#stream_creation_form button.button.white'); casper.fill('form#stream_creation_form', {stream_name: 'Waseemio'}); casper.click('form#stream_creation_form button.button.sea-green'); }); }); casper.then(function () { common.wait_for_text('#stream_name_error', 'A stream with this name already exists', function () { casper.test.assertTextExists('A stream with this name already exists', "Can't create a stream with a duplicate name"); casper.test.info('Streams should be filtered when typing in the create box'); casper.click('form#stream_creation_form button.button.white'); }); }); casper.then(function () { common.wait_for_text('#search_stream_name', '', function () { casper.test.assertSelectorHasText('.stream-row[data-stream-name="Verona"] .stream-name', 'Verona', 'Verona stream exists before filtering'); casper.test.assertSelectorDoesntHaveText('.stream-row.notdisplayed .stream-name', 'Verona', 'Verona stream shown before filtering'); }); }); casper.then(function () { casper.evaluate(function () { $('#stream_filter input[type="text"]') .expectOne() .val('waseem') .trigger($.Event('input')); }); }); casper.waitForSelectorTextChange('.streams-list', function () { casper.test.assertSelectorHasText('.stream-row .stream-name', 'Waseemio', 'Waseemio stream exists after filtering'); casper.test.assertSelectorHasText('.stream-row.notdisplayed .stream-name', 'Verona', 'Verona stream not shown after filtering'); casper.test.assertSelectorDoesntHaveText('.stream-row.notdisplayed .stream-name', 'Waseemio', 'Waseemio stream shown after filtering'); }); common.then_log_out(); casper.run(function () { casper.test.done(); });