"use strict"; var common = require("../casper_lib/common.js"); // Test basic tab navigation. common.start_and_log_in(); casper.then(function () { casper.test.info("Testing navigation"); }); function wait_for_tab(tab) { casper.waitForSelector("#" + tab + ".tab-pane.active", function () { casper.test.assertExists("#" + tab + ".tab-pane.active", tab + " page is active"); }); } function then_navigate_to(click_target, tab) { casper.then(function () { casper.test.info("Visiting #" + click_target); casper.click("a[href='#" + click_target + "']"); wait_for_tab(tab); }); } function then_navigate_to_settings() { casper.then(function () { casper.test.info("Navigate to settings"); var menu_selector = "#settings-dropdown"; casper.waitUntilVisible(menu_selector, function () { casper.click(menu_selector); casper.waitUntilVisible('a[href^="#settings"]', function () { casper.click('a[href^="#settings"]'); casper.waitUntilVisible("#settings_page", function () { casper.test.assertExists("#settings_page", "Settings page is active"); casper.click("#settings_page .exit"); }); }); }); }); } function then_navigate_to_subscriptions() { casper.then(function () { casper.test.info("Navigate to subscriptions"); var menu_selector = "#settings-dropdown"; casper.waitUntilVisible(menu_selector, function () { casper.click(menu_selector); casper.click('a[href^="#streams"]'); casper.waitUntilVisible("#subscription_overlay", function () { casper.test.assertExists("#subscriptions_table", "#subscriptions page is active"); casper.click("#subscription_overlay .exit"); }); }); }); } // Take a navigation tour of the app. // Entries are (click target, tab that should be active after clicking). then_navigate_to_settings(); var verona_narrow; casper.then(function () { var verona_id = casper.evaluate(function () { return stream_data.get_stream_id("Verona"); }); verona_narrow = "narrow/stream/" + verona_id + "-Verona"; casper.test.info(verona_narrow); then_navigate_to(verona_narrow, "message_feed_container"); then_navigate_to("message_feed_container", "message_feed_container"); then_navigate_to_subscriptions(); then_navigate_to("", "message_feed_container"); then_navigate_to_settings(); then_navigate_to("narrow/is/private", "message_feed_container"); then_navigate_to_subscriptions(); then_navigate_to(verona_narrow, "message_feed_container"); }); var initial_page_load_time; var hash; var orig_hash; // Verify reload.js's server-initiated browser reload hash // save/restore logic works. casper.then(function () { initial_page_load_time = casper.evaluate(function () { return page_params.page_load_time; }); casper.test.info(initial_page_load_time); orig_hash = casper.evaluate(function () { return window.location.hash; }); casper.evaluate(function () { reload.initiate({immediate: true}); }); }); casper.then(function () { // Confirm that's we've actually reloaded using the page load timestamp. casper.waitFor( function () { return casper.evaluate(function (input) { return page_params.page_load_time > input; }, initial_page_load_time); }, function () { // Verify the hash was preserved hash = casper.evaluate(function () { return window.location.hash; }); } ); }); casper.then(function () { casper.waitUntilVisible("#zfilt", function () { // Verify that we're narrowed to the target stream casper.test.assertEquals(orig_hash, hash); casper.test.assertVisible("#zfilt"); casper.test.assertNotVisible("#zhome"); }); }); common.then_log_out(); // Run the above queued actions. casper.run(function () { casper.test.done(); });