import { validateOperation , fromPromise , makePromise , fromError , } from '../linkUtils' ; import Observable from 'zen-observable-ts' ; describe ( 'Link utilities:' , ( ) => { describe ( 'validateOperation' , ( ) => { it ( 'should throw when invalid field in operation' , ( ) => { expect ( ( ) => validateOperation ( < any > { qwerty : '' } ) ) . toThrow ( ) ; } ) ; it ( 'should not throw when valid fields in operation' , ( ) => { expect ( ( ) => validateOperation ( { query : '1234' , context : { } , variables : { } , } ) ) . not . toThrow ( ) ; } ) ; } ) ; describe ( 'makePromise' , ( ) => { const data = { data : { hello : 'world' , } , } ; const error = new Error ( 'I always error' ) ; it ( 'return next call as Promise resolution' , ( ) => { return makePromise ( Observable . of ( data ) ) . then ( result => expect ( data ) . toEqual ( result ) ) ; } ) ; it ( 'return error call as Promise rejection' , ( ) => { return makePromise ( fromError ( error ) ) . then ( expect . fail ) . catch ( actualError => expect ( error ) . toEqual ( actualError ) ) ; } ) ; describe ( 'warnings' , ( ) => { const spy = jest . fn ( ) ; let _warn ; beforeEach ( ( ) => { _warn = console . warn ; console . warn = spy ; } ) ; afterEach ( ( ) => { console . warn = _warn ; } ) ; it ( 'return error call as Promise rejection' , done => { makePromise ( Observable . of ( data , data ) ) . then ( result => { expect ( data ) . toEqual ( result ) ; expect ( spy ) . toHaveBeenCalled ( ) ; done ( ) ; } ) ; } ) ; } ) ; } ) ; describe ( 'fromPromise' , ( ) => { const data = { data : { hello : 'world' , } , } ; const error = new Error ( 'I always error' ) ; it ( 'return next call as Promise resolution' , ( ) => { const observable = fromPromise ( Promise . resolve ( data ) ) ; return makePromise ( observable ) . then ( result => expect ( data ) . toEqual ( result ) ) ; } ) ; it ( 'return Promise rejection as error call' , ( ) => { const observable = fromPromise ( Promise . reject ( error ) ) ; return makePromise ( observable ) . then ( expect . fail ) . catch ( actualError => expect ( error ) . toEqual ( actualError ) ) ; } ) ; } ) ; describe ( 'fromError' , ( ) => { it ( 'acts as error call' , ( ) => { const error = new Error ( 'I always error' ) ; const observable = fromError ( error ) ; return makePromise ( observable ) . then ( expect . fail ) . catch ( actualError => expect ( error ) . toEqual ( actualError ) ) ; } ) ; } ) ; } ) ;