diff options
-rw-r--r-- | syweb/webclient/components/matrix/matrix-service.js | 11 | ||||
-rw-r--r-- | syweb/webclient/test/unit/matrix-service.spec.js | 288 |
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(); + })); }); |