Replace CurrentUserMixin with an injected currentUser

This is a lot simpler and removes the need for stubbing singletons
in unit tests.
This commit is contained in:
Robin Ward
2015-02-26 12:25:25 -05:00
parent 1f716f5514
commit be9feeb918
17 changed files with 32 additions and 77 deletions

View File

@ -4,5 +4,4 @@ module("DiscourseController");
test("includes mixins", function() {
ok(Discourse.Presence.detect(DiscourseController.create()), "Discourse.Presence");
ok(Discourse.HasCurrentUser.detect(DiscourseController.create()), "Discourse.HasCurrentUser");
});

View File

@ -3,26 +3,23 @@ moduleFor("controller:header", "controller:header", {
});
test("showNotifications action", function() {
var resolveRequestWith;
var request = new Ember.RSVP.Promise(function(resolve) {
let resolveRequestWith;
const request = new Ember.RSVP.Promise(function(resolve) {
resolveRequestWith = resolve;
});
var controller = this.subject();
var viewSpy = {
showDropdownBySelector: sinon.spy()
};
const currentUser = Discourse.User.create({ unread_notifications: 1});
const controller = this.subject({ currentUser: currentUser });
const viewSpy = { showDropdownBySelector: sinon.spy() };
sandbox.stub(Discourse, "ajax").withArgs("/notifications").returns(request);
sandbox.stub(Discourse.User, "current").returns(Discourse.User.create({
unread_notifications: 1
}));
Ember.run(function() {
controller.send("showNotifications", viewSpy);
});
equal(controller.get("notifications"), null, "notifications are null before data has finished loading");
equal(Discourse.User.current().get("unread_notifications"), 1, "current user's unread notifications count is not zeroed before data has finished loading");
equal(currentUser.get("unread_notifications"), 1, "current user's unread notifications count is not zeroed before data has finished loading");
ok(viewSpy.showDropdownBySelector.calledWith("#user-notifications"), "dropdown with loading glyph is shown before data has finished loading");
Ember.run(function() {
@ -31,6 +28,6 @@ test("showNotifications action", function() {
// Can't use deepEquals because controller.get("notifications") is an ArrayProxy, not an Array
ok(controller.get("notifications").indexOf("notification") !== -1, "notification is in the controller");
equal(Discourse.User.current().get("unread_notifications"), 0, "current user's unread notifications count is zeroed after data has finished loading");
equal(currentUser.get("unread_notifications"), 0, "current user's unread notifications count is zeroed after data has finished loading");
ok(viewSpy.showDropdownBySelector.calledWith("#user-notifications"), "dropdown with notifications is shown after data has finished loading");
});

View File

@ -1,7 +0,0 @@
moduleFor('controller:notifications', 'controller:notifications', {
needs: ['controller:header']
});
test("mixes in HasCurrentUser", function() {
ok(Discourse.HasCurrentUser.detect(this.subject()));
});

View File

@ -13,26 +13,21 @@ moduleFor("controller:site-map", "controller:site-map", {
});
test("showAdminLinks", function() {
var currentUserStub = Ember.Object.create();
sandbox.stub(Discourse.User, "current").returns(currentUserStub);
currentUserStub.set("staff", true);
var controller = this.subject();
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");
currentUserStub.set("staff", false);
currentUser.set("staff", false);
equal(controller.get("showAdminLinks"), false, "is false when current user is not a staff member");
});
test("flaggedPostsCount", function() {
var currentUserStub = Ember.Object.create();
sandbox.stub(Discourse.User, "current").returns(currentUserStub);
const currentUser = Ember.Object.create({ site_flagged_posts_count: 5 });
const controller = this.subject({ currentUser });
currentUserStub.set("site_flagged_posts_count", 5);
var controller = this.subject();
equal(controller.get("flaggedPostsCount"), 5, "returns current user's flagged posts count");
currentUserStub.set("site_flagged_posts_count", 0);
currentUser.set("site_flagged_posts_count", 0);
equal(controller.get("flaggedPostsCount"), 0, "is bound (reacts to change of current user's flagged posts count)");
});

View File

@ -1,23 +1,19 @@
moduleFor("controller:user-dropdown");
test("logout action logs out the current user", function () {
var logout_mock = sinon.mock(Discourse, "logout");
logout_mock.expects("logout").once();
const logoutMock = sinon.mock(Discourse, "logout");
logoutMock.expects("logout").once();
var controller = this.subject();
controller.send("logout");
this.subject().send('logout');
logout_mock.verify();
logoutMock.verify();
});
test("showAdminLinks", function() {
var currentUserStub = Ember.Object.create();
sandbox.stub(Discourse.User, "current").returns(currentUserStub);
currentUserStub.set("staff", true);
var controller = this.subject();
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");
currentUserStub.set("staff", false);
currentUser.set("staff", false);
equal(controller.get("showAdminLinks"), false, "is false when current user is not a staff member");
});

View File

@ -1,12 +0,0 @@
module("Discourse.HasCurrentUser");
test("adds `currentUser` property to an object and ensures it is not cached", function() {
sandbox.stub(Discourse.User, "current");
var testObj = Ember.Object.createWithMixins(Discourse.HasCurrentUser, {});
Discourse.User.current.returns("first user");
equal(testObj.get("currentUser"), "first user", "on the first call property returns initial user");
Discourse.User.current.returns("second user");
equal(testObj.get("currentUser"), "second user", "if the user changes, on the second call property returns changed user");
});