Add a test mode flag to the store

pull/21833/head
Travis Ralston 2020-07-10 10:38:07 -06:00
parent f8db0a4637
commit 314250a6e4
1 changed files with 15 additions and 1 deletions

View File

@ -46,6 +46,12 @@ interface IState {
export const LISTS_UPDATE_EVENT = "lists_update"; export const LISTS_UPDATE_EVENT = "lists_update";
export class RoomListStore2 extends AsyncStore<ActionPayload> { export class RoomListStore2 extends AsyncStore<ActionPayload> {
/**
* Set to true if you're running tests on the store. Should not be touched in
* any other environment.
*/
public static TEST_MODE = false;
private _matrixClient: MatrixClient; private _matrixClient: MatrixClient;
private initialListsGenerated = false; private initialListsGenerated = false;
private enabled = false; private enabled = false;
@ -104,6 +110,7 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
await this.regenerateAllLists({trigger: false}); await this.regenerateAllLists({trigger: false});
await this.handleRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed await this.handleRVSUpdate({trigger: false}); // fake an RVS update to adjust sticky room, if needed
this.updateFn.mark(); // we almost certainly want to trigger an update.
this.updateFn.trigger(); this.updateFn.trigger();
} }
@ -152,7 +159,14 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
if (trigger) this.updateFn.trigger(); if (trigger) this.updateFn.trigger();
} }
protected onDispatch(payload: ActionPayload) { protected async onDispatch(payload: ActionPayload) {
// When we're running tests we can't reliably use setImmediate out of timing concerns.
// As such, we use a more synchronous model.
if (RoomListStore2.TEST_MODE) {
await this.onDispatchAsync(payload);
return;
}
// We do this to intentionally break out of the current event loop task, allowing // We do this to intentionally break out of the current event loop task, allowing
// us to instead wait for a more convenient time to run our updates. // us to instead wait for a more convenient time to run our updates.
setImmediate(() => this.onDispatchAsync(payload)); setImmediate(() => this.onDispatchAsync(payload));