505 lines
16 KiB
JavaScript
505 lines
16 KiB
JavaScript
describe('MatrixService', function() {
|
|
var scope, httpBackend;
|
|
var BASE = "http://example.com";
|
|
var PREFIX = "/_matrix/client/api/v1";
|
|
var URL = BASE + PREFIX;
|
|
var roomId = "!wejigf387t34:matrix.org";
|
|
|
|
var CONFIG = {
|
|
access_token: "foobar",
|
|
homeserver: BASE
|
|
};
|
|
|
|
beforeEach(module('matrixService'));
|
|
|
|
beforeEach(inject(function($rootScope, $httpBackend) {
|
|
httpBackend = $httpBackend;
|
|
scope = $rootScope;
|
|
}));
|
|
|
|
afterEach(function() {
|
|
httpBackend.verifyNoOutstandingExpectation();
|
|
httpBackend.verifyNoOutstandingRequest();
|
|
});
|
|
|
|
it('should be able to POST /createRoom with an alias', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var alias = "flibble";
|
|
matrixService.create(alias).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPOST(URL + "/createRoom?access_token=foobar",
|
|
{
|
|
room_alias_name: alias
|
|
})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to GET /initialSync', inject(function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var limit = 15;
|
|
matrixService.initialSync(limit).then(function(response) {
|
|
expect(response.data).toEqual([]);
|
|
});
|
|
|
|
httpBackend.expectGET(
|
|
URL + "/initialSync?access_token=foobar&limit=15")
|
|
.respond([]);
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to GET /rooms/$roomid/state', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
matrixService.roomState(roomId).then(function(response) {
|
|
expect(response.data).toEqual([]);
|
|
});
|
|
|
|
httpBackend.expectGET(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/state?access_token=foobar")
|
|
.respond([]);
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to POST /join', inject(function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
matrixService.joinAlias(roomId).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPOST(
|
|
URL + "/join/" + encodeURIComponent(roomId) +
|
|
"?access_token=foobar",
|
|
{})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to POST /rooms/$roomid/join', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
matrixService.join(roomId).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPOST(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/join?access_token=foobar",
|
|
{})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to POST /rooms/$roomid/invite', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var inviteUserId = "@user:example.com";
|
|
matrixService.invite(roomId, inviteUserId).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPOST(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/invite?access_token=foobar",
|
|
{
|
|
user_id: inviteUserId
|
|
})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to POST /rooms/$roomid/leave', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
matrixService.leave(roomId).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPOST(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/leave?access_token=foobar",
|
|
{})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to POST /rooms/$roomid/ban', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var userId = "@example:example.com";
|
|
var reason = "Because.";
|
|
matrixService.ban(roomId, userId, reason).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPOST(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/ban?access_token=foobar",
|
|
{
|
|
user_id: userId,
|
|
reason: reason
|
|
})
|
|
.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 send m.room.name', inject(function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var roomId = "!fh38hfwfwef:example.com";
|
|
var name = "Room Name";
|
|
matrixService.setName(roomId, name).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPUT(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/state/m.room.name?access_token=foobar",
|
|
{
|
|
name: name
|
|
})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to send m.room.topic', inject(function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var roomId = "!fh38hfwfwef:example.com";
|
|
var topic = "A room topic can go here.";
|
|
matrixService.setTopic(roomId, topic).then(function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPUT(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) +
|
|
"/state/m.room.topic?access_token=foobar",
|
|
{
|
|
topic: topic
|
|
})
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to send generic state events without a state key', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var roomId = "!fh38hfwfwef:example.com";
|
|
var eventType = "com.example.events.test";
|
|
var content = {
|
|
testing: "1 2 3"
|
|
};
|
|
matrixService.sendStateEvent(roomId, eventType, content).then(
|
|
function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPUT(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) + "/state/" +
|
|
encodeURIComponent(eventType) + "?access_token=foobar",
|
|
content)
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
// TODO: Skipped since the webclient is purposefully broken so as not to
|
|
// 500 matrix.org
|
|
xit('should be able to send generic state events with a state key', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var roomId = "!fh38hfwfwef:example.com";
|
|
var eventType = "com.example.events.test:special@characters";
|
|
var content = {
|
|
testing: "1 2 3"
|
|
};
|
|
var stateKey = "version:1";
|
|
matrixService.sendStateEvent(roomId, eventType, content, stateKey).then(
|
|
function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPUT(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) + "/state/" +
|
|
encodeURIComponent(eventType) + "/" + encodeURIComponent(stateKey)+
|
|
"?access_token=foobar",
|
|
content)
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to PUT generic events ', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var roomId = "!fh38hfwfwef:example.com";
|
|
var eventType = "com.example.events.test";
|
|
var txnId = "42";
|
|
var content = {
|
|
testing: "1 2 3"
|
|
};
|
|
matrixService.sendEvent(roomId, eventType, txnId, content).then(
|
|
function(response) {
|
|
expect(response.data).toEqual({});
|
|
});
|
|
|
|
httpBackend.expectPUT(
|
|
URL + "/rooms/" + encodeURIComponent(roomId) + "/send/" +
|
|
encodeURIComponent(eventType) + "/" + encodeURIComponent(txnId)+
|
|
"?access_token=foobar",
|
|
content)
|
|
.respond({});
|
|
httpBackend.flush();
|
|
}));
|
|
|
|
it('should be able to PUT text messages ', inject(
|
|
function(matrixService) {
|
|
matrixService.setConfig(CONFIG);
|
|
var roomId = "!fh38hfwfwef:example.com";
|
|
var body = "ABC 123";
|
|
matrixService.sendTextMessage(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.text"
|
|
})
|
|
.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();
|
|
}));
|
|
});
|