1*8d3f3824SCedric van Puttenimport spawnAsync from '@expo/spawn-async'; 2*8d3f3824SCedric van Putten 3*8d3f3824SCedric van Puttenimport { mockSpawnPromise, STUB_SPAWN_CHILD, STUB_SPAWN_RESULT } from '../../__tests__/spawn-utils'; 4*8d3f3824SCedric van Puttenimport { createPendingSpawnAsync } from '../spawn'; 5*8d3f3824SCedric van Putten 6*8d3f3824SCedric van Puttenjest.mock('@expo/spawn-async'); 7*8d3f3824SCedric van Putten 8*8d3f3824SCedric van Puttenconst mockedSpawnAsync = spawnAsync as jest.MockedFunction<typeof spawnAsync>; 9*8d3f3824SCedric van Putten 10*8d3f3824SCedric van Puttendescribe(createPendingSpawnAsync, () => { 11*8d3f3824SCedric van Putten it('creates a promise with pending child promise', async () => { 12*8d3f3824SCedric van Putten const pending = createPendingSpawnAsync( 13*8d3f3824SCedric van Putten () => Promise.resolve(), 14*8d3f3824SCedric van Putten () => spawnAsync('foo', ['bar']) 15*8d3f3824SCedric van Putten ); 16*8d3f3824SCedric van Putten 17*8d3f3824SCedric van Putten expect(pending).toHaveProperty('child', expect.any(Promise)); 18*8d3f3824SCedric van Putten }); 19*8d3f3824SCedric van Putten 20*8d3f3824SCedric van Putten it('pipes return of async action to spawn action', async () => { 21*8d3f3824SCedric van Putten const pending = createPendingSpawnAsync( 22*8d3f3824SCedric van Putten () => Promise.resolve(['custom', 'flags']), 23*8d3f3824SCedric van Putten (flags) => spawnAsync('foo', flags) 24*8d3f3824SCedric van Putten ); 25*8d3f3824SCedric van Putten 26*8d3f3824SCedric van Putten await pending; 27*8d3f3824SCedric van Putten expect(mockedSpawnAsync).toBeCalledWith('foo', ['custom', 'flags']); 28*8d3f3824SCedric van Putten }); 29*8d3f3824SCedric van Putten 30*8d3f3824SCedric van Putten it('pending promises resolves when both actions resolves', async () => { 31*8d3f3824SCedric van Putten const pending = createPendingSpawnAsync( 32*8d3f3824SCedric van Putten () => Promise.resolve(), 33*8d3f3824SCedric van Putten () => spawnAsync('foo', ['bar']) 34*8d3f3824SCedric van Putten ); 35*8d3f3824SCedric van Putten 36*8d3f3824SCedric van Putten await expect(pending).resolves.toMatchObject(STUB_SPAWN_RESULT); 37*8d3f3824SCedric van Putten await expect(pending.child).resolves.toMatchObject(STUB_SPAWN_CHILD); 38*8d3f3824SCedric van Putten }); 39*8d3f3824SCedric van Putten 40*8d3f3824SCedric van Putten it('pending child promise resolves to `null` when async action rejects', async () => { 41*8d3f3824SCedric van Putten const error = new Error('foo'); 42*8d3f3824SCedric van Putten const pending = createPendingSpawnAsync( 43*8d3f3824SCedric van Putten () => Promise.reject(error), 44*8d3f3824SCedric van Putten () => spawnAsync('foo', ['bar']) 45*8d3f3824SCedric van Putten ); 46*8d3f3824SCedric van Putten 47*8d3f3824SCedric van Putten await expect(pending.child).resolves.toBeNull(); 48*8d3f3824SCedric van Putten await expect(pending).rejects.toBe(error); 49*8d3f3824SCedric van Putten }); 50*8d3f3824SCedric van Putten 51*8d3f3824SCedric van Putten it('pending promise rejects when spawn action rejects', async () => { 52*8d3f3824SCedric van Putten const error = new Error('foo'); 53*8d3f3824SCedric van Putten mockedSpawnAsync.mockImplementation(() => mockSpawnPromise(Promise.reject(error))); 54*8d3f3824SCedric van Putten 55*8d3f3824SCedric van Putten const pending = createPendingSpawnAsync( 56*8d3f3824SCedric van Putten () => Promise.resolve(['other', 'custom', 'flags']), 57*8d3f3824SCedric van Putten (flags) => spawnAsync('foo', flags) 58*8d3f3824SCedric van Putten ); 59*8d3f3824SCedric van Putten 60*8d3f3824SCedric van Putten await expect(pending).rejects.toBe(error); 61*8d3f3824SCedric van Putten await expect(pending.child).resolves.toMatchObject(STUB_SPAWN_CHILD); 62*8d3f3824SCedric van Putten 63*8d3f3824SCedric van Putten expect(mockedSpawnAsync).toBeCalledWith('foo', ['other', 'custom', 'flags']); 64*8d3f3824SCedric van Putten }); 65*8d3f3824SCedric van Putten}); 66