Skip to content

Commit

Permalink
refactor(MongoMemoryReplSet): add function "stateChange"
Browse files Browse the repository at this point in the history
- add function "stateChange"
- add overwrite for "on", "emit", "once"
  • Loading branch information
hasezoey committed Oct 12, 2020
1 parent dbe844e commit 3c3d6fb
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
24 changes: 20 additions & 4 deletions packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,13 @@ export enum MongoMemoryReplSetStateEnum {
stopped = 'stopped',
}

export interface MongoMemoryReplSet extends EventEmitter {
// Overwrite EventEmitter's definitions (to provide at least the event names)
emit(event: MongoMemoryReplSetStateEnum, ...args: any[]): boolean;
on(event: MongoMemoryReplSetStateEnum, listener: (...args: any[]) => void): this;
once(event: MongoMemoryReplSetStateEnum, listener: (...args: any[]) => void): this;
}

/**
* Class for managing an replSet
*/
Expand Down Expand Up @@ -155,6 +162,15 @@ export class MongoMemoryReplSet extends EventEmitter {
process.once('beforeExit', this.stop);
}

/**
* Change "this._state" to "newState" and emit "newState"
* @param newState The new State to set & emit
*/
protected stateChange(newState: MongoMemoryReplSetStateEnum, ...args: any[]): void {
this._state = newState;
this.emit(newState, ...args);
}

/**
* Returns database name.
*/
Expand Down Expand Up @@ -235,7 +251,7 @@ export class MongoMemoryReplSet extends EventEmitter {
default:
throw new Error('Already in "init" or "running" state. Use debug for more info.');
}
this.emit((this._state = MongoMemoryReplSetStateEnum.init)); // this needs to be executed before "setImmediate"
this.stateChange(MongoMemoryReplSetStateEnum.init); // this needs to be executed before "setImmediate"
await ensureAsync();
log('init');
// Any servers defined within `opts.instanceOpts` should be started first as
Expand Down Expand Up @@ -269,13 +285,13 @@ export class MongoMemoryReplSet extends EventEmitter {
return Promise.all(this.servers.map((s) => s.stop()))
.then(() => {
this.servers = [];
this.emit((this._state = MongoMemoryReplSetStateEnum.stopped));
this.stateChange(MongoMemoryReplSetStateEnum.stopped);
return true;
})
.catch((err) => {
this.servers = [];
log(err);
this.emit((this._state = MongoMemoryReplSetStateEnum.stopped), err);
this.stateChange(MongoMemoryReplSetStateEnum.stopped, err);
return false;
});
}
Expand Down Expand Up @@ -378,7 +394,7 @@ export class MongoMemoryReplSet extends EventEmitter {
log('Waiting for replica set to have a PRIMARY member.');
await this._waitForPrimary();
}
this.emit((this._state = MongoMemoryReplSetStateEnum.running));
this.stateChange(MongoMemoryReplSetStateEnum.running);
log('running');
} finally {
await conn.close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ describe('single server replset', () => {

it('should not autostart if autostart: false', async () => {
const replSet = new MongoMemoryReplSet({ autoStart: false });
await new Promise((resolve, reject) => {
replSet.once('state', (state) => reject(new Error(`Invalid state: ${state}`)));
await new Promise((resolve) => {
setTimeout(resolve, 500);
});

Expand Down

0 comments on commit 3c3d6fb

Please sign in to comment.