13d6e487dSEvan Baconimport { vol } from 'memfs';
23d6e487dSEvan Bacon
3*c4ef02aeSEvan Baconimport { resolvePortAsync } from '../../utils/port';
43d6e487dSEvan Baconimport { resolveBundlerPropsAsync } from '../resolveBundlerProps';
53d6e487dSEvan Bacon
6*c4ef02aeSEvan Baconconst asMock = <T extends (...args: any[]) => any>(fn: T): jest.MockedFunction<T> =>
7*c4ef02aeSEvan Bacon  fn as jest.MockedFunction<T>;
8*c4ef02aeSEvan Bacon
9*c4ef02aeSEvan Baconjest.mock('../../utils/port');
103d6e487dSEvan Bacon
113d6e487dSEvan Bacondescribe(resolveBundlerPropsAsync, () => {
123d6e487dSEvan Bacon  afterEach(() => vol.reset());
133d6e487dSEvan Bacon
143d6e487dSEvan Bacon  it(`asserts bad args`, async () => {
153d6e487dSEvan Bacon    await expect(
163d6e487dSEvan Bacon      resolveBundlerPropsAsync('/', { bundler: false, port: 3000 })
173d6e487dSEvan Bacon    ).rejects.toThrowError(/mutually exclusive arguments/);
183d6e487dSEvan Bacon  });
19*c4ef02aeSEvan Bacon  it(`skips bundling if the port is busy`, async () => {
20*c4ef02aeSEvan Bacon    asMock(resolvePortAsync).mockResolvedValueOnce(null);
21*c4ef02aeSEvan Bacon
22*c4ef02aeSEvan Bacon    expect(await resolveBundlerPropsAsync('/', {})).toEqual({
23*c4ef02aeSEvan Bacon      port: 8081,
24*c4ef02aeSEvan Bacon      shouldStartBundler: false,
25*c4ef02aeSEvan Bacon    });
26*c4ef02aeSEvan Bacon  });
273d6e487dSEvan Bacon  it(`resolves headless port`, async () => {
283d6e487dSEvan Bacon    expect(
293d6e487dSEvan Bacon      await resolveBundlerPropsAsync('/', {
303d6e487dSEvan Bacon        port: 3000,
313d6e487dSEvan Bacon      })
323d6e487dSEvan Bacon    ).toEqual({
333d6e487dSEvan Bacon      port: 3000,
343d6e487dSEvan Bacon      shouldStartBundler: true,
353d6e487dSEvan Bacon    });
363d6e487dSEvan Bacon  });
373d6e487dSEvan Bacon  it(`resolves default port`, async () => {
38*c4ef02aeSEvan Bacon    asMock(resolvePortAsync).mockResolvedValueOnce(19006);
39*c4ef02aeSEvan Bacon
403d6e487dSEvan Bacon    expect(
413d6e487dSEvan Bacon      await resolveBundlerPropsAsync('/', {
423d6e487dSEvan Bacon        bundler: true,
433d6e487dSEvan Bacon      })
443d6e487dSEvan Bacon    ).toEqual({
45*c4ef02aeSEvan Bacon      port: 19006,
463d6e487dSEvan Bacon      shouldStartBundler: true,
473d6e487dSEvan Bacon    });
483d6e487dSEvan Bacon  });
493d6e487dSEvan Bacon});
50