add failing test for race between sync & subscribing after openTimeline
This commit is contained in:
parent
d8acf63e1d
commit
4a8a6168cd
1 changed files with 49 additions and 0 deletions
|
@ -232,3 +232,52 @@ export class Timeline {
|
|||
return this._ownMember;
|
||||
}
|
||||
}
|
||||
|
||||
import {FragmentIdComparer} from "./FragmentIdComparer.js";
|
||||
import {Clock as MockClock} from "../../../mocks/Clock.js";
|
||||
import {createMockStorage} from "../../../mocks/Storage.js";
|
||||
import {createEvent, withTextBody, withSender} from "../../../mocks/event.js";
|
||||
import {NullLogItem} from "../../../logging/NullLogger.js";
|
||||
import {EventEntry} from "./entries/EventEntry.js";
|
||||
import {User} from "../../User.js";
|
||||
import {PendingEvent} from "../sending/PendingEvent.js";
|
||||
|
||||
export function tests() {
|
||||
const fragmentIdComparer = new FragmentIdComparer([]);
|
||||
const roomId = "$abc";
|
||||
return {
|
||||
"adding or replacing entries before subscribing to entries does not loose local relations": async assert => {
|
||||
const pendingEvents = new ObservableArray();
|
||||
const timeline = new Timeline({
|
||||
roomId,
|
||||
storage: await createMockStorage(),
|
||||
closeCallback: () => {},
|
||||
fragmentIdComparer,
|
||||
pendingEvents,
|
||||
clock: new MockClock(),
|
||||
});
|
||||
// 1. load timeline
|
||||
await timeline.load(new User("@alice:hs.tld"), "join", new NullLogItem());
|
||||
// 2. test replaceEntries and addOrReplaceEntries don't fail
|
||||
const event1 = withTextBody("hi!", withSender("@bob:hs.tld", createEvent("m.room.message", "!abc")));
|
||||
const entry1 = new EventEntry({event: event1, fragmentId: 1, eventIndex: 1}, fragmentIdComparer);
|
||||
timeline.replaceEntries([entry1]);
|
||||
const event2 = withTextBody("hi bob!", withSender("@alice:hs.tld", createEvent("m.room.message", "!def")));
|
||||
const entry2 = new EventEntry({event: event2, fragmentId: 1, eventIndex: 2}, fragmentIdComparer);
|
||||
timeline.addOrReplaceEntries([entry2]);
|
||||
// 3. add local relation (redaction)
|
||||
pendingEvents.append(new PendingEvent({data: {
|
||||
roomId,
|
||||
queueIndex: 1,
|
||||
eventType: "m.room.redaction",
|
||||
txnId: "t123",
|
||||
content: {},
|
||||
relatedEventId: event2.event_id
|
||||
}}));
|
||||
// 4. subscribe (it's now safe to iterate timeline.entries)
|
||||
timeline.entries.subscribe({});
|
||||
// 5. check the local relation got correctly aggregated
|
||||
assert.equal(Array.from(timeline.entries)[0].isRedacting, true);
|
||||
}
|
||||
}
|
||||
}
|
Reference in a new issue