150 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			150 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);
 | |
| };
 |