diff --git a/spec/unit/room-state.spec.js b/spec/unit/room-state.spec.js index 3c1b0e97d..1608fd4aa 100644 --- a/spec/unit/room-state.spec.js +++ b/spec/unit/room-state.spec.js @@ -529,13 +529,53 @@ describe("RoomState", function() { }); }); + describe("getJoinedMemberCount", function() { + beforeEach(() => { + state = new RoomState(roomId); + }); + + it("should update after adding joined member", function() { + state.setStateEvents([ + utils.mkMembership({event: true, mship: "join", + user: userA, room: roomId}), + ]); + expect(state.getJoinedMemberCount()).toEqual(1); + state.setStateEvents([ + utils.mkMembership({event: true, mship: "join", + user: userC, room: roomId}), + ]); + expect(state.getJoinedMemberCount()).toEqual(2); + }); + }); + + describe("getInvitedMemberCount", function() { + beforeEach(() => { + state = new RoomState(roomId); + }); + + it("should update after adding invited member", function() { + state.setStateEvents([ + utils.mkMembership({event: true, mship: "invite", + user: userA, room: roomId}), + ]); + expect(state.getInvitedMemberCount()).toEqual(1); + state.setStateEvents([ + utils.mkMembership({event: true, mship: "invite", + user: userC, room: roomId}), + ]); + expect(state.getInvitedMemberCount()).toEqual(2); + }); + }); + describe("setJoinedMemberCount", function() { + beforeEach(() => { + state = new RoomState(roomId); + }); + it("should, once used, override counting members from state", function() { state.setStateEvents([ utils.mkMembership({event: true, mship: "join", user: userA, room: roomId}), - utils.mkMembership({event: true, mship: "invite", - user: userB, room: roomId}), ]); expect(state.getJoinedMemberCount()).toEqual(1); state.setJoinedMemberCount(100); @@ -552,8 +592,6 @@ describe("RoomState", function() { state.setStateEvents([ utils.mkMembership({event: true, mship: "join", user: userA, room: roomId}), - utils.mkMembership({event: true, mship: "invite", - user: userB, room: roomId}), ]); state.setJoinedMemberCount(100); const copy = state.clone(); @@ -565,6 +603,42 @@ describe("RoomState", function() { }); }); + describe("setInvitedMemberCount", function() { + beforeEach(() => { + state = new RoomState(roomId); + }); + + it("should, once used, override counting members from state", function() { + state.setStateEvents([ + utils.mkMembership({event: true, mship: "invite", + user: userB, room: roomId}), + ]); + expect(state.getInvitedMemberCount()).toEqual(1); + state.setInvitedMemberCount(100); + expect(state.getInvitedMemberCount()).toEqual(100); + state.setStateEvents([ + utils.mkMembership({event: true, mship: "invite", + user: userC, room: roomId}), + ]); + expect(state.getInvitedMemberCount()).toEqual(100); + }); + + it("should, once used, override counting members from state, " + + "also after clone", function() { + state.setStateEvents([ + utils.mkMembership({event: true, mship: "invite", + user: userB, room: roomId}), + ]); + state.setInvitedMemberCount(100); + const copy = state.clone(); + copy.setStateEvents([ + utils.mkMembership({event: true, mship: "invite", + user: userC, room: roomId}), + ]); + expect(state.getInvitedMemberCount()).toEqual(100); + }); + }); + describe("maySendEvent", function() { it("should say non-joined members may not send events", function() { diff --git a/src/models/room-state.js b/src/models/room-state.js index 65a6784c8..1cbf93a5d 100644 --- a/src/models/room-state.js +++ b/src/models/room-state.js @@ -376,6 +376,7 @@ RoomState.prototype._updateMember = function(member) { this.members[member.userId] = member; this._joinedMemberCount = null; + this._invitedMemberCount = null; }; /**