From f763eb3f37755eefbeea30a9f9a1e6a135e93f2b Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 24 Jun 2015 11:43:16 +0100 Subject: [PATCH] Convert all helper functions which make events to use kwargs --- spec/integ/matrix-client.spec.js | 70 +++++++++++++++---------- spec/test-utils.js | 89 ++++++++++++++++++-------------- spec/unit/room-member.spec.js | 24 ++++++--- spec/unit/room.spec.js | 63 +++++++++++----------- 4 files changed, 141 insertions(+), 105 deletions(-) diff --git a/spec/integ/matrix-client.spec.js b/spec/integ/matrix-client.spec.js index 255c260bd..f0c783b01 100644 --- a/spec/integ/matrix-client.spec.js +++ b/spec/integ/matrix-client.spec.js @@ -88,9 +88,14 @@ describe("MatrixClient", function() { ] }, state: [ - utils.mkMembership("!erufh:bar", "join", "@foo:bar"), - utils.mkEvent("m.room.create", "!erufh:bar", "@foo:bar", { - creator: "@foo:bar" + utils.mkMembership({ + room: "!erufh:bar", mship: "join", user: "@foo:bar" + }), + utils.mkEvent({ + type: "m.room.create", room: "!erufh:bar", user: "@foo:bar", + content: { + creator: "@foo:bar" + } }) ] }] @@ -105,8 +110,10 @@ describe("MatrixClient", function() { utils.mkMessage({ room: "!erufh:bar", user: "@foo:bar", msg: ":D" }), - utils.mkEvent("m.typing", "!erufh:bar", "bar", { - user_ids: ["@foo:bar"] + utils.mkEvent({ + type: "m.typing", room: "!erufh:bar", content: { + user_ids: ["@foo:bar"] + } }) ] }; @@ -327,20 +334,24 @@ describe("MatrixClient", function() { ] }, state: [ - utils.mkEvent( - "m.room.name", roomOne, otherUserId, - { + utils.mkEvent({ + type: "m.room.name", room: roomOne, user: otherUserId, + content: { name: "Old room name" } - ), - utils.mkMembership(roomOne, "join", otherUserId), - utils.mkMembership(roomOne, "join", selfUserId), - utils.mkEvent( - "m.room.create", roomOne, selfUserId, - { + }), + utils.mkMembership({ + room: roomOne, mship: "join", user: otherUserId + }), + utils.mkMembership({ + room: roomOne, mship: "join", user: selfUserId + }), + utils.mkEvent({ + type: "m.room.create", room: roomOne, user: selfUserId, + content: { creator: selfUserId } - ) + }) ] }, { @@ -356,16 +367,19 @@ describe("MatrixClient", function() { ] }, state: [ - utils.mkMembership( - roomTwo, "join", otherUserId, null, otherDisplayName - ), - utils.mkMembership(roomTwo, "join", selfUserId), - utils.mkEvent( - "m.room.create", roomTwo, selfUserId, - { + utils.mkMembership({ + room: roomTwo, mship: "join", user: otherUserId, + name: otherDisplayName + }), + utils.mkMembership({ + room: roomTwo, mship: "join", user: selfUserId + }), + utils.mkEvent({ + type: "m.room.create", room: roomTwo, user: selfUserId, + content: { creator: selfUserId } - ) + }) ] } ] @@ -374,14 +388,16 @@ describe("MatrixClient", function() { start: "s_5_3", end: "e_6_7", chunk: [ - utils.mkEvent("m.room.name", roomOne, selfUserId, { - name: "A new room name" + utils.mkEvent({ + type: "m.room.name", room: roomOne, user: selfUserId, + content: { name: "A new room name" } }), utils.mkMessage({ room: roomTwo, user: otherUserId, msg: msgText }), - utils.mkEvent("m.typing", roomTwo, undefined, { - user_ids: [otherUserId] + utils.mkEvent({ + type: "m.typing", room: roomTwo, + content: { user_ids: [otherUserId] } }) ] }; diff --git a/spec/test-utils.js b/spec/test-utils.js index 22e9eaceb..5bf61e317 100644 --- a/spec/test-utils.js +++ b/spec/test-utils.js @@ -44,78 +44,87 @@ module.exports.mock = function(constr, name) { }; /** - * Create a JSON object representing an Event. - * @param {string} type The event.type - * @param {string} room The event.room_id - * @param {string} userId The event.user_id - * @param {Object} content The event.content + * 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 {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(type, room, userId, content) { +module.exports.mkEvent = function(opts) { + if (!opts.type || !opts.content) { + throw new Error("Missing .type or .content =>"+JSON.stringify(opts)); + } var event = { - type: type, - room_id: room, - user_id: userId, - content: content, + type: opts.type, + room_id: opts.room, + user_id: opts.user, + content: opts.content, event_id: "$" + Math.random() + "-" + Math.random() }; - if (["m.room.name", "m.room.topic", "m.room.create", "m.room.join_rules", + 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(type) !== -1) { + "com.example.state"].indexOf(opts.type) !== -1) { event.state_key = ""; } - return event; + return opts.event ? new MatrixEvent(event) : event; }; /** - * Create an m.room.member POJO. - * @param {string} room The room ID for the event. - * @param {string} membership The content.membership for the event. - * @param {string} userId The user ID for the event. - * @param {string} otherUserId The other user ID for the event if applicable + * 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} displayName The content.displayname for the event. - * @param {string} avatarUrl The content.avatar_url for the event. - * @return {Object} The event + * @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(room, membership, userId, otherUserId, - displayName, avatarUrl) { - var event = module.exports.mkEvent("m.room.member", room, userId, { - membership: membership, - displayname: displayName, - avatar_url: avatarUrl - }); - event.state_key = userId; - if (["invite", "ban"].indexOf(membership) !== -1) { - event.state_key = otherUserId; +module.exports.mkMembership = function(opts) { + opts.type = "m.room.member"; + if (!opts.skey) { + opts.skey = opts.user; } - return event; + 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 POJO. + * 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} The event + * @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 %s", opts); } - opts.type = "m.room.message"; opts.content = { msgtype: "m.text", body: opts.msg }; - //var pojo = module.exports.mkEvent(opts); - var pojo = module.exports.mkEvent( - opts.type, opts.room, opts.user, opts.content - ); - return opts.event ? new MatrixEvent(pojo) : pojo; + return module.exports.mkEvent(opts); }; diff --git a/spec/unit/room-member.spec.js b/spec/unit/room-member.spec.js index 559cb08c9..e880bf3ff 100644 --- a/spec/unit/room-member.spec.js +++ b/spec/unit/room-member.spec.js @@ -18,15 +18,19 @@ describe("RoomMember", function() { it("setPowerLevelEvent should set 'powerLevel' and 'powerLevelNorm'.", function() { - var event = new MatrixEvent( - utils.mkEvent("m.room.power_levels", roomId, userA, { + var event = utils.mkEvent({ + type: "m.room.power_levels", + room: roomId, + user: userA, + content: { users_default: 20, users: { "@bertha:bar": 200, "@invalid:user": 10 // shouldn't barf on this. } - }) - ); + }, + event: true + }); member.setPowerLevelEvent(event); expect(member.powerLevel).toEqual(20); expect(member.powerLevelNorm).toEqual(10); @@ -44,13 +48,17 @@ describe("RoomMember", function() { var memberC = new RoomMember(roomId, userC); memberC.typing = true; - var event = new MatrixEvent( - utils.mkEvent("m.typing", roomId, userA, { + var event = utils.mkEvent({ + type: "m.typing", + user: userA, + room: roomId, + content: { user_ids: [ userA, userC ] - }) - ); + }, + event: true + }); member.setTypingEvent(event); memberB.setTypingEvent(event); memberC.setTypingEvent(event); diff --git a/spec/unit/room.spec.js b/spec/unit/room.spec.js index be6716160..99497d766 100644 --- a/spec/unit/room.spec.js +++ b/spec/unit/room.spec.js @@ -45,9 +45,10 @@ describe("Room", function() { utils.mkMessage({ room: roomId, user: userA, msg: "changing room name", event: true }), - new MatrixEvent(utils.mkEvent("m.room.name", roomId, userA, { - name: "New Room Name" - })) + utils.mkEvent({ + type: "m.room.name", room: roomId, user: userA, event: true, + content: { name: "New Room Name" } + }) ]; it("should be able to add events to the end", function() { @@ -116,12 +117,14 @@ describe("Room", function() { return null; }); - var newEv = new MatrixEvent(utils.mkEvent("m.room.name", roomId, userA, { - name: "New Room Name" - })); - var oldEv = new MatrixEvent(utils.mkEvent("m.room.name", roomId, userA, { - name: "Old Room Name" - })); + var newEv = utils.mkEvent({ + type: "m.room.name", room: roomId, user: userA, event: true, + content: { name: "New Room Name" } + }); + var oldEv = utils.mkEvent({ + type: "m.room.name", room: roomId, user: userA, event: true, + content: { name: "Old Room Name" } + }); room.addEventsToTimeline([newEv]); expect(newEv.sender).toEqual(sentinel); room.addEventsToTimeline([oldEv], true); @@ -153,12 +156,12 @@ describe("Room", function() { return null; }); - var newEv = new MatrixEvent( - utils.mkMembership(roomId, "invite", userB, userA) - ); - var oldEv = new MatrixEvent( - utils.mkMembership(roomId, "ban", userB, userA) - ); + var newEv = utils.mkMembership({ + room: roomId, mship: "invite", user: userB, skey: userA, event: true + }); + var oldEv = utils.mkMembership({ + room: roomId, mship: "ban", user: userB, skey: userA, event: true + }); room.addEventsToTimeline([newEv]); expect(newEv.target).toEqual(sentinel); room.addEventsToTimeline([oldEv], true); @@ -250,32 +253,32 @@ describe("Room", function() { }; var setJoinRule = function(rule) { - stateLookup["m.room.join_rules$"] = new MatrixEvent( - utils.mkEvent("m.room.join_rules", roomId, userA, { + stateLookup["m.room.join_rules$"] = utils.mkEvent({ + type: "m.room.join_rules", room: roomId, user: userA, content: { join_rule: rule - }) - ); + }, event: true + }); }; var setAliases = function(aliases, stateKey) { if (!stateKey) { stateKey = "flibble"; } - stateLookup["m.room.aliases$" + stateKey] = new MatrixEvent( - utils.mkEvent("m.room.aliases", roomId, stateKey, { + stateLookup["m.room.aliases$" + stateKey] = utils.mkEvent({ + type: "m.room.aliases", room: roomId, skey: stateKey, content: { aliases: aliases - }) - ); + }, event: true + }); }; var setRoomName = function(name) { - stateLookup["m.room.name$"] = new MatrixEvent( - utils.mkEvent("m.room.name", roomId, userA, { + stateLookup["m.room.name$"] = utils.mkEvent({ + type: "m.room.name", room: roomId, user: userA, content: { name: name - }) - ); + }, event: true + }); }; var addMember = function(userId, state) { if (!state) { state = "join"; } - stateLookup["m.room.member$" + userId] = new MatrixEvent( - utils.mkMembership(roomId, state, userId, userId) - ); + stateLookup["m.room.member$" + userId] = utils.mkMembership({ + room: roomId, mship: state, user: userId, skey: userId, event: true + }); }; beforeEach(function() {