diff --git a/test/components/structures/RoomView-test.js b/test/components/structures/RoomView-test.js
new file mode 100644
index 0000000000..858a0ad061
--- /dev/null
+++ b/test/components/structures/RoomView-test.js
@@ -0,0 +1,73 @@
+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;
+ var parentDiv;
+
+ beforeEach(function() {
+ sandbox = test_utils.stubClient();
+ parentDiv = document.createElement('div');
+
+ this.oldTimelinePanel = Skinner.getComponent('structures.TimelinePanel');
+ this.oldRoomHeader = Skinner.getComponent('views.rooms.RoomHeader');
+ Skinner.addComponent('structures.TimelinePanel', stubComponent());
+ Skinner.addComponent('views.rooms.RoomHeader', stubComponent());
+
+ peg.get().credentials = { userId: "@test:example.com" };
+ });
+
+ afterEach(function() {
+ sandbox.restore();
+
+ ReactDOM.unmountComponentAtNode(parentDiv);
+
+ Skinner.addComponent('structures.TimelinePanel', this.oldTimelinePanel);
+ Skinner.addComponent('views.rooms.RoomHeader', this.oldRoomHeader);
+ });
+
+ 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();
+
+ ReactDOM.render(, parentDiv);
+
+ process.nextTick(function() {
+ // These expect()s don't read very well and don't give very good failure
+ // messages, but expect's toHaveBeenCalled only takes an expect spy object,
+ // not a sinon spy object.
+ expect(onRoomIdResolved.called).toExist();
+ 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();
+ done();
+ });
+ });
+ });
+});
diff --git a/test/skinned-sdk.js b/test/skinned-sdk.js
index 869902dcf6..d4e178ef2c 100644
--- a/test/skinned-sdk.js
+++ b/test/skinned-sdk.js
@@ -29,6 +29,7 @@ components['views.elements.Spinner'] = stubComponent({displayName: 'Spinner'});
components['views.messages.DateSeparator'] = stubComponent({displayName: 'DateSeparator'});
components['views.messages.MessageTimestamp'] = stubComponent({displayName: 'MessageTimestamp'});
components['views.messages.SenderProfile'] = stubComponent({displayName: 'SenderProfile'});
+components['views.rooms.SearchBar'] = stubComponent();
sdk.loadSkin(skin);
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: [],
+ },
+ };
+};
+