13d6e487dSEvan Baconimport { vol } from 'memfs';
23d6e487dSEvan Bacon
33d6e487dSEvan Baconimport { startInterfaceAsync } from '../../start/interface/startInterface';
43d6e487dSEvan Baconimport { startBundlerAsync } from '../startBundler';
53d6e487dSEvan Bacon
63d6e487dSEvan Baconjest.mock('../../start/server/DevServerManager', () => ({
73d6e487dSEvan Bacon  DevServerManager: jest.fn(() => ({
83d6e487dSEvan Bacon    startAsync: jest.fn(),
93d6e487dSEvan Bacon    getDefaultDevServer: jest.fn(),
1033643b60SEvan Bacon    bootstrapTypeScriptAsync: jest.fn(),
11*6a750d06SEvan Bacon    watchEnvironmentVariables: jest.fn(),
123d6e487dSEvan Bacon  })),
133d6e487dSEvan Bacon}));
143d6e487dSEvan Bacon
1529128565SEvan Baconjest.mock('../../utils/interactive', () => ({
1629128565SEvan Bacon  isInteractive: jest.fn(() => true),
173d6e487dSEvan Bacon}));
183d6e487dSEvan Bacon
193d6e487dSEvan Baconjest.mock('@expo/config', () => ({
203d6e487dSEvan Bacon  getConfig: jest.fn(() => ({
213d6e487dSEvan Bacon    exp: {
223d6e487dSEvan Bacon      platforms: ['ios', 'android'],
233d6e487dSEvan Bacon    },
243d6e487dSEvan Bacon  })),
253d6e487dSEvan Bacon}));
263d6e487dSEvan Bacon
273d6e487dSEvan Baconjest.mock('../../start/interface/startInterface', () => ({
283d6e487dSEvan Bacon  startInterfaceAsync: jest.fn(),
293d6e487dSEvan Bacon}));
303d6e487dSEvan Bacon
313d6e487dSEvan Bacondescribe(startBundlerAsync, () => {
323d6e487dSEvan Bacon  afterEach(() => vol.reset());
333d6e487dSEvan Bacon
343d6e487dSEvan Bacon  it(`starts in headless mode`, async () => {
353d6e487dSEvan Bacon    const manager = await startBundlerAsync('/', {
363d6e487dSEvan Bacon      headless: true,
373d6e487dSEvan Bacon      port: 3000,
383d6e487dSEvan Bacon    });
393d6e487dSEvan Bacon
403d6e487dSEvan Bacon    expect(manager.startAsync).toHaveBeenCalledWith([
413d6e487dSEvan Bacon      {
423d6e487dSEvan Bacon        options: {
433d6e487dSEvan Bacon          devClient: true,
443d6e487dSEvan Bacon          headless: true,
453d6e487dSEvan Bacon          location: {},
463d6e487dSEvan Bacon          port: 3000,
473d6e487dSEvan Bacon        },
483d6e487dSEvan Bacon        type: 'metro',
493d6e487dSEvan Bacon      },
503d6e487dSEvan Bacon    ]);
513d6e487dSEvan Bacon    expect(manager.getDefaultDevServer).toBeCalled();
523d6e487dSEvan Bacon  });
533d6e487dSEvan Bacon
543d6e487dSEvan Bacon  it(`starts a server`, async () => {
553d6e487dSEvan Bacon    const manager = await startBundlerAsync('/', {
563d6e487dSEvan Bacon      headless: false,
573d6e487dSEvan Bacon      port: 3000,
583d6e487dSEvan Bacon    });
593d6e487dSEvan Bacon
603d6e487dSEvan Bacon    expect(manager.startAsync).toHaveBeenCalledWith([
613d6e487dSEvan Bacon      {
623d6e487dSEvan Bacon        options: {
633d6e487dSEvan Bacon          devClient: true,
643d6e487dSEvan Bacon          headless: false,
653d6e487dSEvan Bacon          location: {},
663d6e487dSEvan Bacon          port: 3000,
673d6e487dSEvan Bacon        },
683d6e487dSEvan Bacon        type: 'metro',
693d6e487dSEvan Bacon      },
703d6e487dSEvan Bacon    ]);
713d6e487dSEvan Bacon    expect(startInterfaceAsync).toBeCalled();
723d6e487dSEvan Bacon    expect(manager.getDefaultDevServer).not.toBeCalled();
733d6e487dSEvan Bacon  });
743d6e487dSEvan Bacon});
75