discourse/test/javascripts/integration/header_test.js

194 lines
5.5 KiB
JavaScript
Raw Normal View History

integration("Header", {
setup: function() {
sinon.stub(I18n, "t", function(scope, options) {
if (options) {
2013-11-21 14:38:56 -05:00
if (options.count) {
return [scope, options.count].join(" ");
} else {
return [scope, options.username, options.link].join(" ").trim();
}
}
return scope;
});
2013-11-21 14:38:56 -05:00
2014-01-31 01:53:08 -05:00
sinon.stub(Ember.run, "debounce").callsArg(1);
2013-11-29 15:01:46 -05:00
var originalCategories = Discourse.Category.list();
sinon.stub(Discourse.Category, "list").returns(originalCategories);
2013-11-21 14:38:56 -05:00
var originalUser = Discourse.User.current();
sinon.stub(Discourse.User, "current").returns(originalUser);
},
teardown: function() {
I18n.t.restore();
2014-01-31 01:53:08 -05:00
Ember.run.debounce.restore();
2013-11-21 14:38:56 -05:00
Discourse.Category.list.restore();
Discourse.User.current.restore();
}
});
2013-10-31 12:27:28 -04:00
test("header", function() {
expect(1);
visit("/").then(function() {
2013-10-31 12:27:28 -04:00
ok(exists("header"), "is rendered");
});
});
2013-10-31 12:27:28 -04:00
test("logo", function() {
expect(2);
visit("/").then(function() {
2013-10-31 12:27:28 -04:00
ok(exists(".logo-big"), "is rendered");
Ember.run(function() {
2013-10-31 12:27:28 -04:00
controllerFor("header").set("showExtraInfo", true);
});
2013-10-31 12:27:28 -04:00
ok(exists(".logo-small"), "is properly wired to showExtraInfo property (when showExtraInfo value changes, logo size also changes)");
});
});
test("notifications dropdown", function() {
expect(4);
var itemSelector = "#notifications-dropdown li";
Ember.run(function() {
Discourse.URL_FIXTURES["/notifications"] = [
{
notification_type: 2, //replied
read: true,
post_number: 2,
topic_id: 1234,
slug: "a-slug",
data: {
topic_title: "some title",
display_username: "velesin"
}
}
];
});
visit("/")
.then(function() {
ok(!exists($(itemSelector)), "initially is empty");
})
.click("#user-notifications")
.then(function() {
var $items = $(itemSelector);
ok(exists($items), "is lazily populated after user opens it");
ok($items.first().hasClass("read"), "correctly binds items' 'read' class");
2014-05-23 01:08:27 -04:00
equal($items.first().find('span').html().trim(), 'notifications.replied velesin <a href="/t/a-slug/1234/2">some title</a>', "correctly generates items' content");
});
});
2013-11-21 14:38:56 -05:00
2013-11-29 15:01:46 -05:00
test("sitemap dropdown", function() {
expect(8);
2013-11-21 14:38:56 -05:00
Discourse.SiteSettings.faq_url = "faq-url";
Discourse.SiteSettings.enable_mobile_theme = true;
2014-06-05 07:16:27 -04:00
Discourse.User.current.returns(Ember.Object.create({
username: 'test',
2013-11-29 15:01:46 -05:00
staff: true,
site_flagged_posts_count: 1
2014-06-05 07:16:27 -04:00
}));
2013-11-21 14:38:56 -05:00
Discourse.Category.list.returns([
2013-11-29 15:01:46 -05:00
Discourse.Category.create({
newTopics: 20
})
2013-11-21 14:38:56 -05:00
]);
2013-11-29 15:01:46 -05:00
var siteMapDropdownSelector = "#site-map-dropdown";
2013-11-21 14:38:56 -05:00
visit("/")
.then(function() {
2013-11-29 15:01:46 -05:00
ok(!exists($(siteMapDropdownSelector)), "initially is not rendered");
})
.click("#site-map")
.then(function() {
var $siteMapDropdown = $(siteMapDropdownSelector);
2013-11-21 14:38:56 -05:00
2013-11-29 15:01:46 -05:00
ok(exists($siteMapDropdown), "is lazily rendered after user opens it");
2013-11-21 14:38:56 -05:00
2013-11-29 15:01:46 -05:00
ok(exists($siteMapDropdown.find(".admin-link")), "has showing / hiding admin links correctly bound");
ok(exists($siteMapDropdown.find(".flagged-posts.badge-notification")), "has displaying flagged posts badge correctly bound");
equal($siteMapDropdown.find(".faq-link").attr("href"), "faq-url", "is correctly bound to the FAQ url site config");
notEqual($siteMapDropdown.find(".mobile-toggle-link").text().indexOf("mobile_view"), -1, "has displaying mobile theme toggle link correctly bound");
2013-11-21 14:38:56 -05:00
2013-11-29 15:01:46 -05:00
ok(exists($siteMapDropdown.find(".category-links")), "has categories correctly bound");
ok(exists($siteMapDropdown.find(".new-posts")), "has displaying category badges correctly bound");
2013-11-21 14:38:56 -05:00
});
});
2014-01-31 01:53:08 -05:00
test("search dropdown", function() {
Discourse.SiteSettings.min_search_term_length = 2;
Ember.run(function() {
Discourse.URL_FIXTURES["/search"] = [
{
type: "topic",
more: true,
results: [
{
url: "some-url"
}
]
}
];
});
visit("/");
andThen(function() {
not(exists("#search-dropdown:visible"), "initially search box is closed");
});
click("#search-button");
andThen(function() {
ok(exists("#search-dropdown:visible"), "after clicking a button search box opens");
not(exists("#search-dropdown .heading"), "initially, immediately after opening, search box is empty");
});
fillIn("#search-term", "ab");
andThen(function() {
ok(exists("#search-dropdown .heading"), "when user completes a search, search box shows search results");
equal(find("#search-dropdown .selected a").attr("href"), "some-url", "the first search result is selected");
});
andThen(function() {
Discourse.URL_FIXTURES["/search"] = [
{
type: "topic",
more: true,
results: [
{
url: "another-url"
}
]
}
];
});
click("#search-dropdown .filter");
andThen(function() {
equal(find("#search-dropdown .selected a").attr("href"), "another-url", "after clicking 'more of type' link, results are reloaded");
});
});
2014-02-11 20:56:49 -05:00
test("user dropdown when logged in", function() {
expect(3);
var userDropdownSelector = "#user-dropdown";
visit("/")
.then(function() {
not(exists(userDropdownSelector + ":visible"), "initially user dropdown is closed");
})
.click("#current-user")
.then(function() {
var $userDropdown = $(userDropdownSelector);
ok(exists(userDropdownSelector + ":visible"), "is lazily rendered after user opens it");
ok(exists($userDropdown.find(".user-dropdown-links")), "has showing / hiding user-dropdown links correctly bound");
});
});