2013-11-09 04:06:27 +08:00
|
|
|
var controller, view;
|
|
|
|
|
|
|
|
var appendView = function() {
|
|
|
|
Ember.run(function() {
|
|
|
|
view.appendTo(fixture());
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
var noItemsMessageSelector = "div.none";
|
|
|
|
var itemListSelector = "ul";
|
|
|
|
var itemSelector = "li";
|
|
|
|
|
|
|
|
module("Discourse.NotificationsController", {
|
|
|
|
setup: function() {
|
|
|
|
sinon.stub(I18n, "t", function (scope, options) {
|
|
|
|
options = options || {};
|
|
|
|
return [scope, options.username, options.link].join(" ").trim();
|
|
|
|
});
|
|
|
|
|
2014-05-10 00:01:36 +08:00
|
|
|
controller = Discourse.NotificationsController.create();
|
2013-11-09 04:06:27 +08:00
|
|
|
|
|
|
|
view = Ember.View.create({
|
2013-11-13 04:52:07 +08:00
|
|
|
container: Discourse.__container__,
|
2013-11-09 04:06:27 +08:00
|
|
|
controller: controller,
|
|
|
|
templateName: "notifications"
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
teardown: function() {
|
|
|
|
I18n.t.restore();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
test("mixes in HasCurrentUser", function() {
|
|
|
|
ok(Discourse.HasCurrentUser.detect(controller));
|
|
|
|
});
|
|
|
|
|
|
|
|
test("by default uses NotificationController as its item controller", function() {
|
|
|
|
equal(controller.get("itemController"), "notification");
|
|
|
|
});
|
|
|
|
|
|
|
|
test("shows proper info when there are no notifications", function() {
|
|
|
|
controller.set("content", null);
|
|
|
|
|
|
|
|
appendView();
|
|
|
|
|
|
|
|
ok(exists(fixture(noItemsMessageSelector)), "special 'no notifications' message is displayed");
|
|
|
|
equal(fixture(noItemsMessageSelector).text(), "notifications.none", "'no notifications' message contains proper internationalized text");
|
|
|
|
equal(count(fixture(itemListSelector)), 0, "a list of notifications is not displayed");
|
|
|
|
});
|
|
|
|
|
|
|
|
test("displays a list of notifications and a 'more' link when there are notifications", function() {
|
|
|
|
controller.set("itemController", null);
|
|
|
|
controller.set("content", [
|
|
|
|
{
|
|
|
|
read: false,
|
|
|
|
scope: "scope_1",
|
|
|
|
username: "username_1",
|
|
|
|
link: "link_1"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
read: true,
|
|
|
|
scope: "scope_2",
|
|
|
|
username: "username_2",
|
|
|
|
link: "link_2"
|
|
|
|
}
|
|
|
|
]);
|
|
|
|
|
|
|
|
appendView();
|
|
|
|
|
|
|
|
var items = fixture(itemSelector);
|
|
|
|
equal(count(items), 3, "number of list items is correct");
|
|
|
|
|
|
|
|
equal(items.eq(0).attr("class"), "", "first (unread) item has proper class");
|
|
|
|
equal(items.eq(0).text(), "scope_1 username_1 link_1", "first item has correct content");
|
|
|
|
|
|
|
|
equal(items.eq(1).attr("class"), "read", "second (read) item has proper class");
|
|
|
|
equal(items.eq(1).text(), "scope_2 username_2 link_2", "second item has correct content");
|
|
|
|
|
|
|
|
var moreLink = items.eq(2).find("> a");
|
|
|
|
equal(moreLink.attr("href"), Discourse.User.current().get("path"), "'more' link points to a correct URL");
|
|
|
|
equal(moreLink.text(), "notifications.more …", "'more' link has correct text");
|
|
|
|
});
|