Skip to content

Commit

Permalink
feat: add DataSource.reset() API
Browse files Browse the repository at this point in the history
When writing tests, for performance reasons we often want to reuse
the same data-source instance for many tests suites. At the same time,
we want to keep such test suites independent and allow them to reuse
the same model name for different model classes.

Juggler does support redefinition of a model with the same name.

This change is adding a new API called `dataSource.reset()` that allows
tests to remove all old models before creating new ones (typically
from a `before` hook).

Signed-off-by: Miroslav Bajtoš <[email protected]>
  • Loading branch information
bajtos committed Jul 18, 2019
1 parent 6aea50a commit fde6d6a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/datasource.js
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,16 @@ DataSource.prototype.deleteModelByName = function(modelName) {
delete this.connector._models[modelName];
};

/**
* Remove all models from the registry, but keep the connector instance
* (including the pool of database connections).
*/
DataSource.prototype.reset = function() {
for (const m in this.modelBuilder.models) {
this.deleteModelByName(m);
}
};

/**
* Mixin DataAccessObject methods.
*
Expand Down
28 changes: 28 additions & 0 deletions test/datasource.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,34 @@ describe('DataSource', function() {
});
}
});

describe('reset', () => {
it('removes all model definitions', () => {
const ds = new DataSource({connector: 'memory'});
ds.define('Category');
ds.define('Product');

Object.keys(ds.modelBuilder.definitions)
.should.deepEqual(['Category', 'Product']);
Object.keys(ds.modelBuilder.models)
.should.deepEqual(['Category', 'Product']);
Object.keys(ds.connector._models)
.should.deepEqual(['Category', 'Product']);

ds.reset();

Object.keys(ds.modelBuilder.definitions).should.be.empty();
Object.keys(ds.modelBuilder.models).should.be.empty();
Object.keys(ds.connector._models).should.be.empty();
});

it('preserves the connector instance', () => {
const ds = new DataSource({connector: 'memory'});
const connector = ds.connector;
ds.reset();
ds.connector.should.equal(connector);
});
});
});

function givenMockConnector(props) {
Expand Down

0 comments on commit fde6d6a

Please sign in to comment.