diff --git a/syweb/webclient/test/unit/filters.spec.js b/syweb/webclient/test/unit/filters.spec.js
index 4377c33147..c6253aad96 100644
--- a/syweb/webclient/test/unit/filters.spec.js
+++ b/syweb/webclient/test/unit/filters.spec.js
@@ -492,3 +492,144 @@ describe('orderMembersList filter', function() {
]);
});
});
+describe('mUserDisplayName filter', function() {
+ var filter, mUserDisplayName;
+
+ var roomId = "!weufhewifu:matrix.org";
+
+ // test state values (f.e. test)
+ var testUser_displayname, testUser_user_id;
+ var testSelf_displayname, testSelf_user_id;
+ var testRoomState;
+
+ // mocked services which return the test values above.
+ var matrixService = {
+ config: function() {
+ return {
+ user_id: testSelf_user_id
+ };
+ }
+ };
+
+ var modelService = {
+ getRoom: function(room_id) {
+ return {
+ current_room_state: testRoomState
+ };
+ },
+
+ getUser: function(user_id) {
+ return {
+ event: {
+ content: {
+ displayname: testUser_displayname
+ },
+ event_id: "wfiuhwf@matrix.org",
+ user_id: testUser_user_id
+ }
+ };
+ },
+
+ getMember: function(room_id, user_id) {
+ return testRoomState.members[user_id];
+ }
+ };
+
+ beforeEach(function() {
+ // inject mocked dependencies
+ module(function ($provide) {
+ $provide.value('matrixService', matrixService);
+ $provide.value('modelService', modelService);
+ });
+
+ module('matrixFilter');
+ });
+
+
+ beforeEach(inject(function($filter) {
+ filter = $filter;
+ mUserDisplayName = filter("mUserDisplayName");
+
+ // purge the previous test values
+ testSelf_displayname = "Me";
+ testSelf_user_id = "@me:matrix.org";
+ testUser_displayname = undefined;
+ testUser_user_id = undefined;
+
+ // mock up a stub room state
+ testRoomState = {
+ s:{}, // internal; stores the state events
+ state: function(type, key) {
+ // accessor used by filter
+ return key ? this.s[type+key] : this.s[type];
+ },
+ members: {}, // struct used by filter
+
+ // test helper methods
+ setMember: function(user_id, displayname, membership, inviter_user_id) {
+ if (!inviter_user_id) {
+ inviter_user_id = user_id;
+ }
+ if (!membership) {
+ membership = "join";
+ }
+ this.s["m.room.member" + user_id] = {
+ event: {
+ content: {
+ displayname: displayname,
+ membership: membership
+ },
+ state_key: user_id,
+ user_id: inviter_user_id
+ }
+ };
+ this.members[user_id] = this.s["m.room.member" + user_id];
+ }
+ };
+ }));
+
+ it("should show the display name of a user in a room if they have set one.", function() {
+ testUser_displayname = "Tom Scott";
+ testUser_user_id = "@tymnhk:matrix.org";
+ testRoomState.setMember(testUser_user_id, testUser_displayname);
+ testRoomState.setMember(testSelf_user_id, testSelf_displayname);
+ var output = mUserDisplayName(testUser_user_id, roomId);
+ expect(output).toEqual(testUser_displayname);
+ });
+
+ it("should show the user_id of a user in a room if they have no display name.", function() {
+ testUser_user_id = "@mike:matrix.org";
+ testRoomState.setMember(testUser_user_id, testUser_displayname);
+ testRoomState.setMember(testSelf_user_id, testSelf_displayname);
+ var output = mUserDisplayName(testUser_user_id, roomId);
+ expect(output).toEqual(testUser_user_id);
+ });
+
+ it("should still show the displayname of a user in a room if they are not a member of the room but there exists a User entry for them.", function() {
+ testUser_user_id = "@alice:matrix.org";
+ testUser_displayname = "Alice M";
+ testRoomState.setMember(testSelf_user_id, testSelf_displayname);
+ var output = mUserDisplayName(testUser_user_id, roomId);
+ expect(output).toEqual(testUser_displayname);
+ });
+
+ it("should disambiguate users with the same displayname with their user id.", function() {
+ testUser_displayname = "Reimu";
+ testSelf_displayname = "Reimu";
+ testUser_user_id = "@reimu:matrix.org";
+ testSelf_user_id = "@xreimux:matrix.org";
+ testRoomState.setMember(testUser_user_id, testUser_displayname);
+ testRoomState.setMember(testSelf_user_id, testSelf_displayname);
+ var output = mUserDisplayName(testUser_user_id, roomId);
+ expect(output).toEqual(testUser_displayname + " (" + testUser_user_id + ")");
+ });
+
+ it("should wrap user IDs after the : if the wrap flag is set.", function() {
+ testUser_user_id = "@mike:matrix.org";
+ testRoomState.setMember(testUser_user_id, testUser_displayname);
+ testRoomState.setMember(testSelf_user_id, testSelf_displayname);
+ var output = mUserDisplayName(testUser_user_id, roomId, true);
+ expect(output).toEqual("@mike :matrix.org");
+ });
+});
+
|