summary refs log tree commit diff
path: root/syweb
diff options
context:
space:
mode:
Diffstat (limited to 'syweb')
-rw-r--r--syweb/webclient/components/matrix/matrix-service.js11
-rw-r--r--syweb/webclient/test/unit/matrix-service.spec.js288
2 files changed, 234 insertions, 65 deletions
diff --git a/syweb/webclient/components/matrix/matrix-service.js b/syweb/webclient/components/matrix/matrix-service.js
index 8ff2999e2d..63051c4f47 100644
--- a/syweb/webclient/components/matrix/matrix-service.js
+++ b/syweb/webclient/components/matrix/matrix-service.js
@@ -443,7 +443,8 @@ angular.module('matrixService', [])
 
         redactEvent: function(room_id, event_id) {
             var path = "/rooms/$room_id/redact/$event_id";
-            path = path.replace("$room_id", room_id);
+            path = path.replace("$room_id", encodeURIComponent(room_id));
+            // TODO: encodeURIComponent when HS updated.
             path = path.replace("$event_id", event_id);
             var content = {};
             return doRequest("POST", path, undefined, content);
@@ -461,7 +462,7 @@ angular.module('matrixService', [])
         
         paginateBackMessages: function(room_id, from_token, limit) {
             var path = "/rooms/$room_id/messages";
-            path = path.replace("$room_id", room_id);
+            path = path.replace("$room_id", encodeURIComponent(room_id));
             var params = {
                 from: from_token,
                 limit: limit,
@@ -509,12 +510,12 @@ angular.module('matrixService', [])
 
         setProfileInfo: function(data, info_segment) {
             var path = "/profile/$user/" + info_segment;
-            path = path.replace("$user", config.user_id);
+            path = path.replace("$user", encodeURIComponent(config.user_id));
             return doRequest("PUT", path, undefined, data);
         },
 
         getProfileInfo: function(userId, info_segment) {
-            var path = "/profile/"+userId
+            var path = "/profile/"+encodeURIComponent(userId);
             if (info_segment) path += '/' + info_segment;
             return doRequest("GET", path);
         },
@@ -633,7 +634,7 @@ angular.module('matrixService', [])
         // Set the logged in user presence state
         setUserPresence: function(presence) {
             var path = "/presence/$user_id/status";
-            path = path.replace("$user_id", config.user_id);
+            path = path.replace("$user_id", encodeURIComponent(config.user_id));
             return doRequest("PUT", path, undefined, {
                 presence: presence
             });
diff --git a/syweb/webclient/test/unit/matrix-service.spec.js b/syweb/webclient/test/unit/matrix-service.spec.js
index 2ca9a24323..4959f2395d 100644
--- a/syweb/webclient/test/unit/matrix-service.spec.js
+++ b/syweb/webclient/test/unit/matrix-service.spec.js
@@ -5,6 +5,11 @@ describe('MatrixService', function() {
     var URL = BASE + PREFIX;
     var roomId = "!wejigf387t34:matrix.org";
     
+    var CONFIG = {
+        access_token: "foobar",
+        homeserver: BASE
+    };
+    
     beforeEach(module('matrixService'));
 
     beforeEach(inject(function($rootScope, $httpBackend) {
@@ -19,10 +24,7 @@ describe('MatrixService', function() {
 
     it('should be able to POST /createRoom with an alias', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var alias = "flibble";
         matrixService.create(alias).then(function(response) {
             expect(response.data).toEqual({});
@@ -37,10 +39,7 @@ describe('MatrixService', function() {
     }));
 
     it('should be able to GET /initialSync', inject(function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var limit = 15;
         matrixService.initialSync(limit).then(function(response) {
             expect(response.data).toEqual([]);
@@ -54,10 +53,7 @@ describe('MatrixService', function() {
     
     it('should be able to GET /rooms/$roomid/state', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         matrixService.roomState(roomId).then(function(response) {
             expect(response.data).toEqual([]);
         });
@@ -70,10 +66,7 @@ describe('MatrixService', function() {
     }));
     
     it('should be able to POST /join', inject(function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         matrixService.joinAlias(roomId).then(function(response) {
             expect(response.data).toEqual({});
         });
@@ -88,10 +81,7 @@ describe('MatrixService', function() {
     
     it('should be able to POST /rooms/$roomid/join', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         matrixService.join(roomId).then(function(response) {
             expect(response.data).toEqual({});
         });
@@ -106,10 +96,7 @@ describe('MatrixService', function() {
     
     it('should be able to POST /rooms/$roomid/invite', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var inviteUserId = "@user:example.com";
         matrixService.invite(roomId, inviteUserId).then(function(response) {
             expect(response.data).toEqual({});
@@ -127,10 +114,7 @@ describe('MatrixService', function() {
     
     it('should be able to POST /rooms/$roomid/leave', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         matrixService.leave(roomId).then(function(response) {
             expect(response.data).toEqual({});
         });
@@ -145,10 +129,7 @@ describe('MatrixService', function() {
     
     it('should be able to POST /rooms/$roomid/ban', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var userId = "@example:example.com";
         var reason = "Because.";
         matrixService.ban(roomId, userId, reason).then(function(response) {
@@ -168,10 +149,7 @@ describe('MatrixService', function() {
     
     it('should be able to GET /directory/room/$alias', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var alias = "#test:example.com";
         var roomId = "!wefuhewfuiw:example.com";
         matrixService.resolveRoomAlias(alias).then(function(response) {
@@ -190,10 +168,7 @@ describe('MatrixService', function() {
     }));
     
     it('should be able to send m.room.name', inject(function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var roomId = "!fh38hfwfwef:example.com";
         var name = "Room Name";
         matrixService.setName(roomId, name).then(function(response) {
@@ -211,10 +186,7 @@ describe('MatrixService', function() {
     }));
     
     it('should be able to send m.room.topic', inject(function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var roomId = "!fh38hfwfwef:example.com";
         var topic = "A room topic can go here.";
         matrixService.setTopic(roomId, topic).then(function(response) {
@@ -233,10 +205,7 @@ describe('MatrixService', function() {
     
     it('should be able to send generic state events without a state key', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var roomId = "!fh38hfwfwef:example.com";
         var eventType = "com.example.events.test";
         var content = {
@@ -259,10 +228,7 @@ describe('MatrixService', function() {
     // 500 matrix.org
     xit('should be able to send generic state events with a state key', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var roomId = "!fh38hfwfwef:example.com";
         var eventType = "com.example.events.test:special@characters";
         var content = {
@@ -285,10 +251,7 @@ describe('MatrixService', function() {
     
     it('should be able to PUT generic events ', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var roomId = "!fh38hfwfwef:example.com";
         var eventType = "com.example.events.test";
         var txnId = "42";
@@ -311,10 +274,7 @@ describe('MatrixService', function() {
     
     it('should be able to PUT text messages ', inject(
     function(matrixService) {
-        matrixService.setConfig({
-            access_token: "foobar",
-            homeserver: "http://example.com"
-        });
+        matrixService.setConfig(CONFIG);
         var roomId = "!fh38hfwfwef:example.com";
         var body = "ABC 123";
         matrixService.sendTextMessage(roomId, body).then(
@@ -333,4 +293,212 @@ describe('MatrixService', function() {
             .respond({});
         httpBackend.flush();
     }));
+    
+    it('should be able to PUT emote messages ', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var roomId = "!fh38hfwfwef:example.com";
+        var body = "ABC 123";
+        matrixService.sendEmoteMessage(roomId, body).then(
+        function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectPUT(
+            new RegExp(URL + "/rooms/" + encodeURIComponent(roomId) + 
+            "/send/m.room.message/(.*)" +
+            "?access_token=foobar"),
+            {
+                body: body,
+                msgtype: "m.emote"
+            })
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to POST redactions', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var roomId = "!fh38hfwfwef:example.com";
+        var eventId = "fwefwexample.com";
+        matrixService.redactEvent(roomId, eventId).then(
+        function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectPOST(URL + "/rooms/" + encodeURIComponent(roomId) + 
+            "/redact/" + encodeURIComponent(eventId) +
+            "?access_token=foobar")
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to GET /directory/room/$alias', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var alias = "#test:example.com";
+        var roomId = "!wefuhewfuiw:example.com";
+        matrixService.resolveRoomAlias(alias).then(function(response) {
+            expect(response.data).toEqual({
+                room_id: roomId
+            });
+        });
+
+        httpBackend.expectGET(
+            URL + "/directory/room/" + encodeURIComponent(alias) +
+                    "?access_token=foobar")
+            .respond({
+                room_id: roomId
+            });
+        httpBackend.flush();
+    }));
+    
+    it('should be able to GET /rooms/$roomid/members', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var roomId = "!wefuhewfuiw:example.com";
+        matrixService.getMemberList(roomId).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectGET(
+            URL + "/rooms/" + encodeURIComponent(roomId) +
+                    "/members?access_token=foobar")
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to paginate a room', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var roomId = "!wefuhewfuiw:example.com";
+        var from = "3t_44e_54z";
+        var limit = 20;
+        matrixService.paginateBackMessages(roomId, from, limit).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectGET(
+            URL + "/rooms/" + encodeURIComponent(roomId) +
+                    "/messages?access_token=foobar&dir=b&from="+
+                    encodeURIComponent(from)+"&limit="+limit)
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to GET /publicRooms', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        matrixService.publicRooms().then(function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectGET(
+            new RegExp(URL + "/publicRooms(.*)"))
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to GET /profile/$userid/displayname', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var userId = "@foo:example.com";
+        matrixService.getDisplayName(userId).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectGET(URL + "/profile/" + encodeURIComponent(userId) +
+            "/displayname?access_token=foobar")
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to GET /profile/$userid/avatar_url', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var userId = "@foo:example.com";
+        matrixService.getProfilePictureUrl(userId).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+
+        httpBackend.expectGET(URL + "/profile/" + encodeURIComponent(userId) +
+            "/avatar_url?access_token=foobar")
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to PUT /profile/$me/avatar_url', inject(
+    function(matrixService) {
+        var testConfig = angular.copy(CONFIG);
+        testConfig.user_id = "@bob:example.com";
+        matrixService.setConfig(testConfig);
+        var url = "http://example.com/mypic.jpg";
+        matrixService.setProfilePictureUrl(url).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+        httpBackend.expectPUT(URL + "/profile/" + 
+            encodeURIComponent(testConfig.user_id) +
+            "/avatar_url?access_token=foobar",
+            {
+                avatar_url: url
+            })
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to PUT /profile/$me/displayname', inject(
+    function(matrixService) {
+        var testConfig = angular.copy(CONFIG);
+        testConfig.user_id = "@bob:example.com";
+        matrixService.setConfig(testConfig);
+        var displayname = "Bob Smith";
+        matrixService.setDisplayName(displayname).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+        httpBackend.expectPUT(URL + "/profile/" + 
+            encodeURIComponent(testConfig.user_id) +
+            "/displayname?access_token=foobar",
+            {
+                displayname: displayname
+            })
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to login with password', inject(
+    function(matrixService) {
+        matrixService.setConfig(CONFIG);
+        var userId = "@bob:example.com";
+        var password = "monkey";
+        matrixService.login(userId, password).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+        httpBackend.expectPOST(new RegExp(URL+"/login(.*)"),
+            {
+                user: userId,
+                password: password,
+                type: "m.login.password"
+            })
+            .respond({});
+        httpBackend.flush();
+    }));
+    
+    it('should be able to PUT presence status', inject(
+    function(matrixService) {
+        var testConfig = angular.copy(CONFIG);
+        testConfig.user_id = "@bob:example.com";
+        matrixService.setConfig(testConfig);
+        var status = "unavailable";
+        matrixService.setUserPresence(status).then(function(response) {
+            expect(response.data).toEqual({});
+        });
+        httpBackend.expectPUT(URL+"/presence/"+
+            encodeURIComponent(testConfig.user_id)+
+            "/status?access_token=foobar",
+            {
+                presence: status
+            })
+            .respond({});
+        httpBackend.flush();
+    }));
 });