diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js
index 4acd299e4f..3fe6a08f97 100644
--- a/src/components/views/rooms/EventTile.js
+++ b/src/components/views/rooms/EventTile.js
@@ -153,6 +153,14 @@ module.exports = React.createClass({
if (key == 'readReceipts') {
var rA = objA[key];
var rB = objB[key];
+ if (rA === rB) {
+ continue;
+ }
+
+ if (!rA || !rB) {
+ return false;
+ }
+
if (rA.length !== rB.length) {
return false;
}
diff --git a/test/components/structures/MessagePanel-test.js b/test/components/structures/MessagePanel-test.js
index 134cc4c34b..802f470545 100644
--- a/test/components/structures/MessagePanel-test.js
+++ b/test/components/structures/MessagePanel-test.js
@@ -20,6 +20,7 @@ var TestUtils = require('react-addons-test-utils');
var expect = require('expect');
var sdk = require('matrix-react-sdk');
+var MatrixClientPeg = require('MatrixClientPeg');
var MessagePanel = sdk.getComponent('structures.MessagePanel');
@@ -35,6 +36,9 @@ describe('MessagePanel', function () {
beforeEach(function() {
test_utils.beforeEach(this);
sandbox = test_utils.stubClient(sandbox);
+
+ var client = MatrixClientPeg.get();
+ client.credentials = {userId: '@me:here'};
});
afterEach(function () {
@@ -93,7 +97,7 @@ describe('MessagePanel', function () {
// first render with the RM in one place
var mp = ReactDOM.render(
, parentDiv);
var tiles = TestUtils.scryRenderedComponentsWithType(
@@ -109,13 +113,13 @@ describe('MessagePanel', function () {
// now move the RM
mp = ReactDOM.render(
, parentDiv);
// now there should be two RM containers
var found = TestUtils.scryRenderedDOMComponentsWithClass(mp, 'mx_RoomView_myReadMarker_container');
expect(found.length).toEqual(2);
-
+
// the first should be the ghost
expect(found[0].previousSibling).toEqual(tileContainers[4]);
var hr = found[0].children[0];
@@ -126,7 +130,7 @@ describe('MessagePanel', function () {
// advance the clock, and then let the browser run an animation frame,
// to let the animation start
clock.tick(1500);
-
+
realSetTimeout(() => {
// then advance it again to let it complete
clock.tick(1000);
diff --git a/test/components/structures/TimelinePanel-test.js b/test/components/structures/TimelinePanel-test.js
index 72d176161f..671d5c7774 100644
--- a/test/components/structures/TimelinePanel-test.js
+++ b/test/components/structures/TimelinePanel-test.js
@@ -86,7 +86,8 @@ describe('TimelinePanel', function() {
// this is https://github.com/vector-im/vector-web/issues/1367
// enough events to allow us to scroll back
- for (var i = 0; i < 40; i++) {
+ var N_EVENTS = 20;
+ for (var i = 0; i < N_EVENTS; i++) {
timeline.addEvent(mkMessage());
}
@@ -119,7 +120,7 @@ describe('TimelinePanel', function() {
// happens
awaitScroll().then(() => {
expect(panel.state.canBackPaginate).toBe(false);
- expect(scryEventTiles(panel).length).toEqual(40);
+ expect(scryEventTiles(panel).length).toEqual(N_EVENTS);
// scroll up
console.log("setting scrollTop = 0");
@@ -145,12 +146,12 @@ describe('TimelinePanel', function() {
// that won't make much difference, because we don't paginate
// unless we're at the bottom of the timeline, but a scroll event
// should be enough to set off a pagination.
- expect(scryEventTiles(panel).length).toEqual(40);
+ expect(scryEventTiles(panel).length).toEqual(N_EVENTS);
scrollingDiv.scrollTop = 10;
}).delay(0).then(awaitPaginationCompletion).then(() => {
- expect(scryEventTiles(panel).length).toEqual(41);
- }).done(done);
+ expect(scryEventTiles(panel).length).toEqual(N_EVENTS+1);
+ }).done(done, done);
});
it('should not paginate forever if there are no events', function(done) {
@@ -204,5 +205,3 @@ describe('TimelinePanel', function() {
}, 0);
});
});
-
-