mirror of
https://github.com/element-hq/element-web
synced 2024-11-23 17:56:01 +03:00
dc5c0928b2
Check that it puts the read marker in the right place, and check that the animation works. ... all of which has been surprisingly painful.
149 lines
4.6 KiB
JavaScript
149 lines
4.6 KiB
JavaScript
"use strict";
|
|
|
|
var peg = require('../src/MatrixClientPeg.js');
|
|
var jssdk = require('matrix-js-sdk');
|
|
var MatrixEvent = jssdk.MatrixEvent;
|
|
var sinon = require('sinon');
|
|
|
|
|
|
/**
|
|
* Stub out the MatrixClient, and configure the MatrixClientPeg object to
|
|
* return it when get() is called.
|
|
*/
|
|
module.exports.stubClient = function() {
|
|
var pegstub = sinon.stub(peg);
|
|
|
|
var matrixClientStub = sinon.createStubInstance(jssdk.MatrixClient);
|
|
pegstub.get.returns(matrixClientStub);
|
|
}
|
|
|
|
|
|
/**
|
|
* Create an Event.
|
|
* @param {Object} opts Values for the event.
|
|
* @param {string} opts.type The event.type
|
|
* @param {string} opts.room The event.room_id
|
|
* @param {string} opts.user The event.user_id
|
|
* @param {string} opts.skey Optional. The state key (auto inserts empty string)
|
|
* @param {Number} opts.ts Optional. Timestamp for the event
|
|
* @param {Object} opts.content The event.content
|
|
* @param {boolean} opts.event True to make a MatrixEvent.
|
|
* @return {Object} a JSON object representing this event.
|
|
*/
|
|
module.exports.mkEvent = function(opts) {
|
|
if (!opts.type || !opts.content) {
|
|
throw new Error("Missing .type or .content =>" + JSON.stringify(opts));
|
|
}
|
|
var event = {
|
|
type: opts.type,
|
|
room_id: opts.room,
|
|
sender: opts.user,
|
|
content: opts.content,
|
|
event_id: "$" + Math.random() + "-" + Math.random(),
|
|
origin_server_ts: opts.ts,
|
|
};
|
|
if (opts.skey) {
|
|
event.state_key = opts.skey;
|
|
}
|
|
else if (["m.room.name", "m.room.topic", "m.room.create", "m.room.join_rules",
|
|
"m.room.power_levels", "m.room.topic",
|
|
"com.example.state"].indexOf(opts.type) !== -1) {
|
|
event.state_key = "";
|
|
}
|
|
return opts.event ? new MatrixEvent(event) : event;
|
|
};
|
|
|
|
/**
|
|
* Create an m.presence event.
|
|
* @param {Object} opts Values for the presence.
|
|
* @return {Object|MatrixEvent} The event
|
|
*/
|
|
module.exports.mkPresence = function(opts) {
|
|
if (!opts.user) {
|
|
throw new Error("Missing user");
|
|
}
|
|
var event = {
|
|
event_id: "$" + Math.random() + "-" + Math.random(),
|
|
type: "m.presence",
|
|
sender: opts.user,
|
|
content: {
|
|
avatar_url: opts.url,
|
|
displayname: opts.name,
|
|
last_active_ago: opts.ago,
|
|
presence: opts.presence || "offline"
|
|
}
|
|
};
|
|
return opts.event ? new MatrixEvent(event) : event;
|
|
};
|
|
|
|
/**
|
|
* Create an m.room.member event.
|
|
* @param {Object} opts Values for the membership.
|
|
* @param {string} opts.room The room ID for the event.
|
|
* @param {string} opts.mship The content.membership for the event.
|
|
* @param {string} opts.user The user ID for the event.
|
|
* @param {string} opts.skey The other user ID for the event if applicable
|
|
* e.g. for invites/bans.
|
|
* @param {string} opts.name The content.displayname for the event.
|
|
* @param {string} opts.url The content.avatar_url for the event.
|
|
* @param {boolean} opts.event True to make a MatrixEvent.
|
|
* @return {Object|MatrixEvent} The event
|
|
*/
|
|
module.exports.mkMembership = function(opts) {
|
|
opts.type = "m.room.member";
|
|
if (!opts.skey) {
|
|
opts.skey = opts.user;
|
|
}
|
|
if (!opts.mship) {
|
|
throw new Error("Missing .mship => " + JSON.stringify(opts));
|
|
}
|
|
opts.content = {
|
|
membership: opts.mship
|
|
};
|
|
if (opts.name) { opts.content.displayname = opts.name; }
|
|
if (opts.url) { opts.content.avatar_url = opts.url; }
|
|
return module.exports.mkEvent(opts);
|
|
};
|
|
|
|
/**
|
|
* Create an m.room.message event.
|
|
* @param {Object} opts Values for the message
|
|
* @param {string} opts.room The room ID for the event.
|
|
* @param {string} opts.user The user ID for the event.
|
|
* @param {string} opts.msg Optional. The content.body for the event.
|
|
* @param {boolean} opts.event True to make a MatrixEvent.
|
|
* @return {Object|MatrixEvent} The event
|
|
*/
|
|
module.exports.mkMessage = function(opts) {
|
|
opts.type = "m.room.message";
|
|
if (!opts.msg) {
|
|
opts.msg = "Random->" + Math.random();
|
|
}
|
|
if (!opts.room || !opts.user) {
|
|
throw new Error("Missing .room or .user from", opts);
|
|
}
|
|
opts.content = {
|
|
msgtype: "m.text",
|
|
body: opts.msg
|
|
};
|
|
return module.exports.mkEvent(opts);
|
|
};
|
|
|
|
/**
|
|
* make the test fail, with the given exception
|
|
*
|
|
* <p>This is useful for use with integration tests which use asyncronous
|
|
* methods: it can be added as a 'catch' handler in a promise chain.
|
|
*
|
|
* @param {Error} error exception to be reported
|
|
*
|
|
* @example
|
|
* it("should not throw", function(done) {
|
|
* asynchronousMethod().then(function() {
|
|
* // some tests
|
|
* }).catch(utils.failTest).done(done);
|
|
* });
|
|
*/
|
|
module.exports.failTest = function(error) {
|
|
expect(error.stack).toBe(null);
|
|
};
|