diff --git a/src/validate/DataValidator.js b/src/validate/DataValidator.js index 12e663f..3690ac5 100644 --- a/src/validate/DataValidator.js +++ b/src/validate/DataValidator.js @@ -193,7 +193,8 @@ module.exports = Class( 'DataValidator', { if ( data === undefined ) { - return Promise.resolve( [] ); + // it's important that we don't re-use previous state + return store.clear().then( [] ); } const mapf = ( subkey !== undefined ) diff --git a/test/validate/DataValidatorTest.js b/test/validate/DataValidatorTest.js index b31a93e..e2364d3 100644 --- a/test/validate/DataValidatorTest.js +++ b/test/validate/DataValidatorTest.js @@ -212,6 +212,45 @@ describe( 'DataValidator', () => .validate( {} ) ).to.eventually.be.rejectedWith( expected_e ); } ); + + + [ + [], + [ {} ], + [ undefined ], + [ undefined, {} ], + [ undefined, undefined ], + [ {}, undefined ], + ].forEach( args => it( 'does not re-use previous store state', () => + { + const bvalidator = createMockBucketValidator(); + const vmonitor = ValidStateMonitor(); + const dep_factory = createMockDependencyFactory(); + + const stores = { + store: MemoryStore(), + bstore: sinon.createStubInstance( MemoryStore ), + cstore: sinon.createStubInstance( MemoryStore ), + }; + + const { bstore, cstore } = stores; + + const cleared = which => + { + cleared[ which ] = true; + return Promise.resolve(); + }; + + bstore.clear = () => cleared( 'b' ); + cstore.clear = () => cleared( 'c' ); + + const sut = Sut( bvalidator, vmonitor, dep_factory, () => stores ); + + return sut.validate.apply( sut, args ) + .then( () => + expect( cleared.b && cleared.c ).to.be.true + ); + } ) ); } );