FEATURE: Full height hamburger menu

- Rename `site-map` to `hamburger-menu`
- Includes acceptance tests
This commit is contained in:
Robin Ward
2015-08-25 12:50:19 -04:00
parent 3faeeca5c8
commit c5460b7d3f
57 changed files with 399 additions and 322 deletions
@@ -0,0 +1,13 @@
import { acceptance } from "helpers/qunit-helpers";
acceptance("Hamburger Menu - Staff", { loggedIn: true });
test("Menu Items", (assert) => {
visit("/");
click("#toggle-hamburger-menu");
andThen(() => {
assert.ok(exists("#hamburger-menu .admin-link"));
assert.ok(exists("#hamburger-menu .flagged-posts-link"));
assert.ok(exists("#hamburger-menu .flagged-posts.badge-notification"), "it displays flag notifications");
});
});
@@ -0,0 +1,39 @@
import { acceptance } from "helpers/qunit-helpers";
acceptance("Hamburger Menu");
test("Toggle Menu", (assert) => {
visit("/");
andThen(() => {
assert.ok(exists("#hamburger-menu.slideright"), "hidden by default");
});
click("#toggle-hamburger-menu");
andThen(() => {
assert.ok(!exists("#hamburger-menu.slideright"), "a click makes it appear");
});
click(".close-hamburger");
andThen(() => {
assert.ok(exists("#hamburger-menu.slideright"), "clicking the X hides it");
});
});
test("Menu Items", (assert) => {
visit("/");
click("#toggle-hamburger-menu");
andThen(() => {
assert.ok(!exists("#hamburger-menu .admin-link"));
assert.ok(!exists("#hamburger-menu .flagged-posts-link"));
assert.ok(exists("#hamburger-menu .latest-topics-link"));
assert.ok(exists("#hamburger-menu .badge-link"));
assert.ok(exists("#hamburger-menu .user-directory-link"));
assert.ok(exists("#hamburger-menu .keyboard-shortcuts-link"));
assert.ok(exists("#hamburger-menu .faq-link"));
assert.ok(exists("#hamburger-menu .about-link"));
assert.ok(exists("#hamburger-menu .categories-link"));
assert.ok(exists('#hamburger-menu .category-link'));
});
});
@@ -7,7 +7,6 @@ test("header", () => {
ok(exists("header"), "is rendered");
ok(exists(".logo-big"), "it renders the large logo by default");
not(exists("#notifications-dropdown li"), "no notifications at first");
not(exists('#site-map-dropdown'), "no site map by default");
not(exists("#user-dropdown:visible"), "initially user dropdown is closed");
not(exists("#search-dropdown:visible"), "initially search box is closed");
});
@@ -21,14 +20,6 @@ test("header", () => {
ok(exists(".logo-small"), "it shows the small logo when `showExtraInfo` is enabled");
});
// Site Map
click("#site-map");
andThen(() => {
ok(exists('#site-map-dropdown'), "is rendered after user opens it");
ok(exists("#site-map-dropdown .faq-link"), "it shows the faq link");
ok(exists("#site-map-dropdown .category-links"), "has categories correctly bound");
});
// Search
click("#search-button");
andThen(() => {
@@ -13,13 +13,6 @@ test("header", () => {
ok($items.first().hasClass("read"), "correctly binds items' 'read' class");
});
// Site Map
click("#site-map");
andThen(() => {
ok(exists("#site-map-dropdown .admin-link"), "it has the admin link");
ok(exists("#site-map-dropdown .flagged-posts.badge-notification"), "it displays flag notifications");
});
// User dropdown
click("#current-user");
andThen(() => {
@@ -37,7 +37,7 @@ test("redirect", () => {
ok(invisible('.login-modal'), "it closes the login modal");
});
click('#site-map');
click('#toggle-hamburger-menu');
andThen(() => {
ok(exists('.login-modal'), "site map opens the login modal");
});
@@ -55,7 +55,7 @@ module("lib:keyboard-shortcuts", {
"<div class='alert alert-info clickable'></div>",
"<button id='create-topic'></button>",
"<div id='user-notifications'></div>",
"<div id='site-map'></div>",
"<div id='toggle-hamburger-menu'></div>",
"<div id='search-button'></div>",
"<div id='current-user'></div>",
"<div id='keyboard-help'></div>"
@@ -1,26 +0,0 @@
moduleFor("controller:site-map-category", 'controller:site-map-category', {
needs: ['controller:site-map']
});
test("showTopicCount anonymous", function() {
var controller = this.subject();
ok(controller.get("showTopicCount"), 'true when anonymous');
});
test("showTopicCount logged in", function() {
var controller = this.subject({ currentUser: Discourse.User.create() });
ok(!controller.get("showTopicCount"), 'false when logged in');
});
test("unreadTotal default", function() {
var controller = this.subject({ currentUser: Discourse.User.create() });
ok(!controller.get('unreadTotal'), "empty by default");
});
test("unreadTotal with values", function() {
var controller = this.subject({
currentUser: Discourse.User.create(),
model: { unreadTopics: 1, newTopics: 3 }
});
equal(controller.get('unreadTotal'), 4);
});
@@ -1,77 +0,0 @@
var oldMobileView;
moduleFor("controller:site-map", "controller:site-map", {
needs: ['controller:application', 'controller:header'],
setup: function() {
oldMobileView = Discourse.Mobile.mobileView;
},
teardown: function() {
Discourse.Mobile.mobileView = oldMobileView;
}
});
test("showAdminLinks", function() {
const currentUser = Ember.Object.create({ staff: true });
const controller = this.subject({ currentUser });
equal(controller.get("showAdminLinks"), true, "is true when current user is a staff member");
currentUser.set("staff", false);
equal(controller.get("showAdminLinks"), false, "is false when current user is not a staff member");
});
test("faqUrl returns faq url configured in site settings if it is set", function() {
Discourse.SiteSettings.faq_url = "faq-url";
var controller = this.subject();
equal(controller.get("faqUrl"), "faq-url");
});
test("faqUrl returns default '/faq' url when there is no corresponding site setting set", function() {
Discourse.SiteSettings.faq_url = null;
var controller = this.subject();
equal(controller.get("faqUrl"), "/faq");
});
test("showMoblieToggle returns true when mobile theme is enabled in site settings", function() {
Discourse.SiteSettings.enable_mobile_theme = true;
Discourse.Mobile.isMobileDevice = true;
var controller = this.subject();
controller.capabilities = { touch: true };
equal(controller.get("showMobileToggle"), true);
});
test("showMoblieToggle returns false when mobile theme is disabled in site settings", function() {
Discourse.SiteSettings.enable_mobile_theme = false;
Discourse.Mobile.isMobileDevice = true;
var controller = this.subject();
equal(controller.get("showMobileToggle"), false);
});
test("mobileViewLinkTextKey returns translation key for a desktop view if the current view is mobile view", function() {
Discourse.Mobile.mobileView = true;
var controller = this.subject();
equal(controller.get("mobileViewLinkTextKey"), "desktop_view");
});
test("mobileViewLinkTextKey returns translation key for a mobile view if the current view is desktop view", function() {
Discourse.Mobile.mobileView = false;
var controller = this.subject();
equal(controller.get("mobileViewLinkTextKey"), "mobile_view");
});
test("categories", function() {
var categoryListStub = ["category1", "category2"];
sandbox.stub(Discourse.Category, "list").returns(categoryListStub);
var controller = this.subject({ siteSettings: Discourse.SiteSettings });
deepEqual(controller.get("categories"), categoryListStub, "returns the list of categories");
});
test("toggleMobleView", function() {
sandbox.stub(Discourse.Mobile, "toggleMobileView");
var controller = this.subject();
controller.send("toggleMobileView");
ok(Discourse.Mobile.toggleMobileView.calledOnce, "switches between desktop and mobile views");
});
@@ -1,7 +1,7 @@
/* global asyncTest, fixtures */
import sessionFixtures from 'fixtures/session-fixtures';
import siteFixtures from 'fixtures/site_fixtures';
import siteFixtures from 'fixtures/site-fixtures';
import HeaderView from 'discourse/views/header';
function currentUser() {
@@ -74,6 +74,7 @@ Discourse.SiteSettingsOriginal = {
"polling_interval":3000,
"anon_polling_interval":30000,
"flush_timings_secs":5,
"enable_user_directory":true,
"tos_url":"",
"privacy_policy_url":"",
"tos_accept_required":false,
+1 -1
View File
@@ -75,7 +75,7 @@ if (window.Logster) {
var origDebounce = Ember.run.debounce,
createPretendServer = require('helpers/create-pretender', null, null, false).default,
fixtures = require('fixtures/site_fixtures', null, null, false).default,
fixtures = require('fixtures/site-fixtures', null, null, false).default,
flushMap = require('discourse/models/store', null, null, false).flushMap,
ScrollingDOMMethods = require('discourse/mixins/scrolling', null, null, false).ScrollingDOMMethods,
_DiscourseURL = require('discourse/lib/url', null, null, false).default,