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); }); }); - -