forked from mystiq/hydrogen-web
Make the response of TimelineMock look like a room sync response
This commit is contained in:
parent
bcfca9ad9a
commit
7d27b46873
1 changed files with 20 additions and 18 deletions
|
@ -7,6 +7,10 @@ export function eventId(i: number): string {
|
||||||
return `$event${i}`;
|
return `$event${i}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function eventIds(from: number, to: number): string[] {
|
||||||
|
return [...Array(to-from).keys()].map(i => eventId(i + from));
|
||||||
|
}
|
||||||
|
|
||||||
export class TimelineMock {
|
export class TimelineMock {
|
||||||
private _counter: number;
|
private _counter: number;
|
||||||
private _dagOrder: TimelineEvent[];
|
private _dagOrder: TimelineEvent[];
|
||||||
|
@ -140,36 +144,34 @@ export class TimelineMock {
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
next_batch: events[events.length - 1]?.event_id || since || TIMELINE_START_TOKEN,
|
next_batch: events[events.length - 1]?.event_id || since || TIMELINE_START_TOKEN,
|
||||||
|
timeline: {
|
||||||
prev_batch: events[0]?.event_id || since || TIMELINE_START_TOKEN,
|
prev_batch: events[0]?.event_id || since || TIMELINE_START_TOKEN,
|
||||||
events,
|
events,
|
||||||
limited
|
limited
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function tests() {
|
export function tests() {
|
||||||
const SENDER = "@alice:hs.tdl";
|
const SENDER = "@alice:hs.tdl";
|
||||||
|
|
||||||
function eventIds(from: number, to: number): string[] {
|
|
||||||
return [...Array(to-from).keys()].map(i => eventId(i + from));
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"Append events are returned via sync": assert => {
|
"Append events are returned via sync": assert => {
|
||||||
const timeline = new TimelineMock(SENDER);
|
const timeline = new TimelineMock(SENDER);
|
||||||
timeline.append(10);
|
timeline.append(10);
|
||||||
const syncResponse = timeline.sync();
|
const syncResponse = timeline.sync();
|
||||||
const events = syncResponse.events.map(e => e.event_id);
|
const events = syncResponse.timeline.events.map(e => e.event_id);
|
||||||
assert.deepEqual(events, eventIds(0, 10));
|
assert.deepEqual(events, eventIds(0, 10));
|
||||||
assert.equal(syncResponse.limited, false);
|
assert.equal(syncResponse.timeline.limited, false);
|
||||||
},
|
},
|
||||||
"Limiting a sync properly limits the returned events": assert => {
|
"Limiting a sync properly limits the returned events": assert => {
|
||||||
const timeline = new TimelineMock(SENDER);
|
const timeline = new TimelineMock(SENDER);
|
||||||
timeline.append(20);
|
timeline.append(20);
|
||||||
const syncResponse = timeline.sync(undefined, 10);
|
const syncResponse = timeline.sync(undefined, 10);
|
||||||
const events = syncResponse.events.map(e => e.event_id);
|
const events = syncResponse.timeline.events.map(e => e.event_id);
|
||||||
assert.deepEqual(events, eventIds(10, 20));
|
assert.deepEqual(events, eventIds(10, 20));
|
||||||
assert.equal(syncResponse.limited, true);
|
assert.equal(syncResponse.timeline.limited, true);
|
||||||
},
|
},
|
||||||
"The context endpoint returns messages in DAG order around an event": assert => {
|
"The context endpoint returns messages in DAG order around an event": assert => {
|
||||||
const timeline = new TimelineMock(SENDER);
|
const timeline = new TimelineMock(SENDER);
|
||||||
|
@ -195,7 +197,7 @@ export function tests() {
|
||||||
const timeline = new TimelineMock(SENDER);
|
const timeline = new TimelineMock(SENDER);
|
||||||
timeline.append(20);
|
timeline.append(20);
|
||||||
const sync = timeline.sync(undefined, 10);
|
const sync = timeline.sync(undefined, 10);
|
||||||
const messages = timeline.messages(sync.prev_batch, undefined, "b");
|
const messages = timeline.messages(sync.timeline.prev_batch, undefined, "b");
|
||||||
const events = messages.chunk.map(e => e.event_id).reverse();
|
const events = messages.chunk.map(e => e.event_id).reverse();
|
||||||
assert.deepEqual(events, eventIds(0, 10));
|
assert.deepEqual(events, eventIds(0, 10));
|
||||||
},
|
},
|
||||||
|
@ -203,7 +205,7 @@ export function tests() {
|
||||||
const timeline = new TimelineMock(SENDER);
|
const timeline = new TimelineMock(SENDER);
|
||||||
timeline.append(30);
|
timeline.append(30);
|
||||||
const sync = timeline.sync(undefined, 10);
|
const sync = timeline.sync(undefined, 10);
|
||||||
const messages1 = timeline.messages(sync.prev_batch, undefined, "b");
|
const messages1 = timeline.messages(sync.timeline.prev_batch, undefined, "b");
|
||||||
const events1 = messages1.chunk.map(e => e.event_id).reverse();
|
const events1 = messages1.chunk.map(e => e.event_id).reverse();
|
||||||
const messages2 = timeline.messages(messages1.end, undefined, "b");
|
const messages2 = timeline.messages(messages1.end, undefined, "b");
|
||||||
const events2 = messages2.chunk.map(e => e.event_id).reverse();
|
const events2 = messages2.chunk.map(e => e.event_id).reverse();
|
||||||
|
@ -235,20 +237,20 @@ export function tests() {
|
||||||
timeline.append(30);
|
timeline.append(30);
|
||||||
const sync1 = timeline.sync(undefined, 10);
|
const sync1 = timeline.sync(undefined, 10);
|
||||||
const sync2 = timeline.sync(sync1.next_batch, 10)
|
const sync2 = timeline.sync(sync1.next_batch, 10)
|
||||||
assert.deepEqual(sync2.events, []);
|
assert.deepEqual(sync2.timeline.events, []);
|
||||||
assert.equal(sync2.limited, false);
|
assert.equal(sync2.timeline.limited, false);
|
||||||
timeline.insertAfter(TIMELINE_START_TOKEN, 1);
|
timeline.insertAfter(TIMELINE_START_TOKEN, 1);
|
||||||
const sync3 = timeline.sync(sync2.next_batch, 10)
|
const sync3 = timeline.sync(sync2.next_batch, 10)
|
||||||
const events = sync3.events.map(e => e.event_id);
|
const events = sync3.timeline.events.map(e => e.event_id);
|
||||||
assert.deepEqual(events, eventIds(30, 31));
|
assert.deepEqual(events, eventIds(30, 31));
|
||||||
},
|
},
|
||||||
"An event inserted in the midle does not show up in a message fetch": assert => {
|
"An event inserted in the midle does not show up in a message fetch": assert => {
|
||||||
const timeline = new TimelineMock(SENDER);
|
const timeline = new TimelineMock(SENDER);
|
||||||
timeline.append(30);
|
timeline.append(30);
|
||||||
const sync1 = timeline.sync(undefined, 10);
|
const sync1 = timeline.sync(undefined, 10);
|
||||||
const messages1 = timeline.messages(sync1.prev_batch, undefined, "f", 10);
|
const messages1 = timeline.messages(sync1.timeline.prev_batch, undefined, "f", 10);
|
||||||
timeline.insertAfter(TIMELINE_START_TOKEN, 1);
|
timeline.insertAfter(TIMELINE_START_TOKEN, 1);
|
||||||
const messages2 = timeline.messages(sync1.prev_batch, undefined, "f", 10);
|
const messages2 = timeline.messages(sync1.timeline.prev_batch, undefined, "f", 10);
|
||||||
assert.deepEqual(messages1.chunk, messages2.chunk);
|
assert.deepEqual(messages1.chunk, messages2.chunk);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue