diff --git a/packages/room/src/manager/event-wrapper.spec.ts b/packages/room/src/manager/event-wrapper.spec.ts index ee72800f..f2c90baf 100644 --- a/packages/room/src/manager/event-wrapper.spec.ts +++ b/packages/room/src/manager/event-wrapper.spec.ts @@ -1,6 +1,7 @@ import { PersistentEventFactory } from './factory'; import { describe, expect, it } from 'bun:test'; +import type { Pdu } from '../types/v3-11'; import type { RoomVersion } from './type'; function runTest( @@ -366,4 +367,34 @@ describe('[EventWrapper] Redaction', () => { // rest of the tests not yet part of normal standard }); + + it('correctly calculate new depth', () => { + const e1 = PersistentEventFactory.createFromRawEvent( + { depth: 1 } as Pdu, + '10', + ); + const e2 = PersistentEventFactory.createFromRawEvent( + { depth: 1 } as Pdu, + '10', + ).addPrevEvents([e1]); + expect(e2.depth).toBe(2); + const e3 = PersistentEventFactory.createFromRawEvent( + { depth: 5 } as Pdu, + '10', + ); + e2.addPrevEvents([e3]); + expect(e2.depth).toBe(6); + + const e4 = PersistentEventFactory.createFromRawEvent( + { depth: 4 } as Pdu, + '10', + ); + const e5 = PersistentEventFactory.createFromRawEvent( + { depth: 7 } as Pdu, + '10', + ); + + e2.addPrevEvents([e5, e4]); // intentional out of order + expect(e2.depth).toBe(8); + }); }); diff --git a/packages/room/src/manager/event-wrapper.ts b/packages/room/src/manager/event-wrapper.ts index d91d6f09..586d6312 100644 --- a/packages/room/src/manager/event-wrapper.ts +++ b/packages/room/src/manager/event-wrapper.ts @@ -455,9 +455,12 @@ export abstract class PersistentEventBase< for (const event of events) { this.prevEventsIds.add(event.eventId); } - if (this.rawEvent.depth <= events[events.length - 1].depth) { - this.rawEvent.depth = events[events.length - 1].depth + 1; + const deepestDepth = + events.sort((e1, e2) => e1.depth - e2.depth).pop()?.depth ?? 0; + if (this.rawEvent.depth <= deepestDepth) { + this.rawEvent.depth = deepestDepth + 1; } + return this; }