1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2026-01-03 23:22:30 +03:00

Make room name generation slightly more sane and add unit tests fir invite naming.

This commit is contained in:
David Baker
2016-02-29 13:51:55 +00:00
parent 45a3bf63b2
commit 76f1d24c7b
2 changed files with 51 additions and 12 deletions

View File

@@ -1136,13 +1136,15 @@ function calculateRoomName(room, userId, ignoreRoomNameEvent) {
// TODO: Localisation
if (myMemberEvent && myMemberEvent.content.membership == "invite") {
if (otherMembers.length && otherMembers[0].events.member) {
if (room.currentState.getMember(myMemberEvent.sender)) {
// extract who invited us to the room
return "Invite from " + otherMembers[0].name;
return "Invite from " + room.currentState.getMember(
myMemberEvent.sender
).name;
} else if (allMembers[0].events.member) {
// use the sender field from the invite event, although this only
// gets us the mxid
return "Invite from " + allMembers[0].events.member.getSender();
return "Invite from " + myMemberEvent.sender;
} else {
return "Room Invite";
}

View File

@@ -498,11 +498,15 @@ describe("Room", function() {
}, event: true
});
};
var addMember = function(userId, state) {
var addMember = function(userId, state, opts) {
if (!state) { state = "join"; }
stateLookup["m.room.member$" + userId] = utils.mkMembership({
room: roomId, mship: state, user: userId, skey: userId, event: true
});
opts = opts || {};
opts.room = roomId;
opts.mship = state;
opts.user = opts.user || userId;
opts.skey = userId;
opts.event = true;
stateLookup["m.room.member$" + userId] = utils.mkMembership(opts);
};
beforeEach(function() {
@@ -528,14 +532,27 @@ describe("Room", function() {
var members = [];
for (var i = 0; i < memberEvents.length; i++) {
members.push({
// not interested in user ID vs display name semantics.
// That should be tested in RoomMember UTs.
name: memberEvents[i].getSender(),
userId: memberEvents[i].getSender()
name: memberEvents[i].event.content &&
memberEvents[i].event.content.displayname ?
memberEvents[i].event.content.displayname :
memberEvents[i].getStateKey(),
userId: memberEvents[i].getStateKey(),
events: { member: memberEvents[i] }
});
}
return members;
});
room.currentState.getMember.andCallFake(function(userId) {
var memberEvent = room.currentState.getStateEvents("m.room.member", userId);
return {
name: memberEvent.event.content &&
memberEvent.event.content.displayname ?
memberEvent.event.content.displayname :
memberEvent.getStateKey(),
userId: memberEvent.getStateKey(),
events: { member: memberEvent }
};
});
});
describe("Room.recalculate => Stripped State Events", function() {
@@ -655,7 +672,7 @@ describe("Room", function() {
it("should show the other user's name for private" +
" (invite join_rules) rooms if you are invited to it.", function() {
setJoinRule("invite");
addMember(userA, "invite");
addMember(userA, "invite", {user: userB});
addMember(userB);
room.recalculate(userA);
var name = room.name;
@@ -728,6 +745,26 @@ describe("Room", function() {
expect(name).toEqual("Empty room");
});
it("should return 'Invite from [inviter display name] if state event available",
function() {
setJoinRule("invite");
addMember(userA, 'join', {name: "Alice"});
addMember(userB, "invite", {user: userA});
room.recalculate(userB);
var name = room.name;
expect(name).toEqual("Invite from Alice");
});
it("should return inviter mxid if display name not available",
function() {
setJoinRule("invite");
addMember(userA);
addMember(userB, "invite", {user: userA});
room.recalculate(userB);
var name = room.name;
expect(name).toEqual("Invite from " + userA);
});
});
});