import * as assert from 'assert' ; import * as sinon from 'sinon' ; import Settings from '../settings' ; import * as tests from '../tests' ; import AsyncProvider from './async' ; import type AsyncReader from '../readers/async' ; class TestProvider extends AsyncProvider { protected override readonly _reader : AsyncReader = new tests . TestAsyncReader ( ) as unknown as AsyncReader ; constructor ( _root , _settings = new Settings ( ) ) { super ( _root , _settings ) ; } public get reader ( ) : tests . TestAsyncReader { return this . _reader as unknown as tests . TestAsyncReader ; } } describe ( 'Providers → Async' , ( ) => { describe ( '.read' , ( ) => { it ( 'should call reader function with correct set of arguments' , ( ) => { const provider = new TestProvider ( 'directory' ) ; const fakeCallback = sinon . stub ( ) ; provider . read ( fakeCallback ) ; assert . ok ( provider . reader . read . called ) ; } ) ; it ( 'should call callback with error for failed launch' , ( ) => { const provider = new TestProvider ( 'directory' ) ; const fakeCallback = sinon . stub ( ) ; provider . reader . onError . yields ( tests . EPERM_ERRNO ) ; provider . read ( fakeCallback ) ; assert . deepStrictEqual ( fakeCallback . args , [ [ tests . EPERM_ERRNO ] ] ) ; } ) ; it ( 'should push entries to storage and call callback with array of entries' , ( ) => { const provider = new TestProvider ( 'directory' ) ; const fakeEntry = tests . buildFakeFileEntry ( ) ; const fakeCallback = sinon . stub ( ) ; provider . reader . onEntry . yields ( fakeEntry ) ; provider . reader . onEnd . yields ( ) ; provider . read ( fakeCallback ) ; assert . deepStrictEqual ( fakeCallback . args , [ [ null , [ fakeEntry ] ] ] ) ; } ) ; } ) ; } ) ;