From 1fbf027a40cf135a72d7668423ea096f61c67178 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 17 Jun 2016 12:20:26 +0100 Subject: [PATCH] Some basic tests for RoomView --- test/components/structures/RoomView-test.js | 66 +++++++++++++++++++++ test/skinned-sdk.js | 1 + test/test-utils.js | 18 +++++- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 test/components/structures/RoomView-test.js diff --git a/test/components/structures/RoomView-test.js b/test/components/structures/RoomView-test.js new file mode 100644 index 0000000000..0570ac0bbc --- /dev/null +++ b/test/components/structures/RoomView-test.js @@ -0,0 +1,66 @@ +var React = require('react'); +var expect = require('expect'); +var sinon = require('sinon'); +var ReactDOM = require("react-dom"); + +var sdk = require('matrix-react-sdk'); +var RoomView = sdk.getComponent('structures.RoomView'); +var peg = require('../../../src/MatrixClientPeg'); + +var test_utils = require('../../test-utils'); +var q = require('q'); + +var Skinner = require("../../../src/Skinner"); +var stubComponent = require('../../components/stub-component.js'); + +describe('RoomView', function () { + var sandbox; + + beforeEach(function() { + sandbox = test_utils.stubClient(); + + this.oldTimelinePanel = Skinner.getComponent('structures.TimelinePanel'); + Skinner.addComponent('structures.TimelinePanel', stubComponent()); + Skinner.addComponent('views.rooms.RoomHeader', stubComponent()); + + peg.get().credentials = { userId: "@test:example.com" }; + }); + + afterEach(function() { + sandbox.restore(); + Skinner.addComponent('structures.TimelinePanel', this.oldTimelinePanel); + }); + + it('resolves a room alias to a room id', function (done) { + peg.get().getRoomIdForAlias.returns(q({room_id: "!randomcharacters:aser.ver"})); + + var onRoomIdResolved = sinon.spy(); + + var parentDiv = document.createElement('div'); + ReactDOM.render(, parentDiv); + + process.nextTick(function() { + expect(onRoomIdResolved.called).toExist(); + ReactDOM.unmountComponentAtNode(parentDiv); + done(); + }); + }); + + it('joins by alias if given an alias', function (done) { + peg.get().getRoomIdForAlias.returns(q({room_id: "!randomcharacters:aser.ver"})); + peg.get().getProfileInfo.returns(q({displayname: "foo"})); + var parentDiv = document.createElement('div'); + var roomView = ReactDOM.render(, parentDiv); + + peg.get().joinRoom = sinon.spy(); + + process.nextTick(function() { + roomView.onJoinButtonClicked(); + process.nextTick(function() { + expect(peg.get().joinRoom.calledWith('#alias:ser.ver')).toExist(); + ReactDOM.unmountComponentAtNode(parentDiv); + done(); + }); + }); + }); +}); diff --git a/test/skinned-sdk.js b/test/skinned-sdk.js index 869902dcf6..8d34a9d208 100644 --- a/test/skinned-sdk.js +++ b/test/skinned-sdk.js @@ -22,6 +22,7 @@ var components = skin.components; components['structures.LeftPanel'] = stubComponent(); components['structures.RightPanel'] = stubComponent(); components['structures.RoomDirectory'] = stubComponent(); +components['rooms.SearchBar'] = stubComponent(); components['views.globals.MatrixToolbar'] = stubComponent(); components['views.globals.GuestWarningBar'] = stubComponent(); components['views.globals.NewVersionBar'] = stubComponent(); diff --git a/test/test-utils.js b/test/test-utils.js index 817af31d45..fc3aaace9f 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -34,13 +34,16 @@ module.exports.stubClient = function() { getIdentityServerUrl: sinon.stub(), getPushActionsForEvent: sinon.stub(), - getRoom: sinon.stub(), + getRoom: sinon.stub().returns(this.mkStubRoom()), + getRooms: sinon.stub().returns([]), loginFlows: sinon.stub(), on: sinon.stub(), removeListener: sinon.stub(), paginateEventTimeline: sinon.stub().returns(q()), sendReadReceipt: sinon.stub().returns(q()), + getRoomIdForAlias: sinon.stub().returns(q()), + getProfileInfo: sinon.stub().returns(q({})), }; // stub out the methods in MatrixClientPeg @@ -169,3 +172,16 @@ module.exports.mkMessage = function(opts) { }; return module.exports.mkEvent(opts); }; + +module.exports.mkStubRoom = function() { + return { + getReceiptsForEvent: sinon.stub().returns([]), + getMember: sinon.stub().returns({}), + getJoinedMembers: sinon.stub().returns([]), + currentState: { + getStateEvents: sinon.stub(), + members: [], + }, + }; +}; +