1import { resolvePortAsync } from '../../utils/port'; 2import { resolveHostType, resolvePortsAsync } from '../resolveOptions'; 3 4const asMock = (fn: any): jest.Mock => fn as jest.Mock; 5 6jest.mock('../../utils/port', () => { 7 return { 8 resolvePortAsync: jest.fn(), 9 }; 10}); 11 12describe(resolveHostType, () => { 13 it(`resolves no options`, () => { 14 expect(resolveHostType({})).toBe('lan'); 15 }); 16 it(`resolves host type`, () => { 17 expect(resolveHostType({ lan: true })).toBe('lan'); 18 expect(resolveHostType({ localhost: true })).toBe('localhost'); 19 expect(resolveHostType({ tunnel: true })).toBe('tunnel'); 20 expect(resolveHostType({ offline: true })).toBe('lan'); 21 expect(resolveHostType({ host: 'tunnel' })).toBe('tunnel'); 22 // Default 23 expect(resolveHostType({})).toBe('lan'); 24 }); 25 it(`asserts invalid host type`, () => { 26 expect(() => resolveHostType({ host: 'bacon' })).toThrow(); 27 }); 28 it(`asserts conflicting options`, () => { 29 expect(() => resolveHostType({ localhost: true, offline: true })).toThrow(/Specify at most/); 30 expect(() => resolveHostType({ localhost: true, host: 'lan' })).toThrow(/Specify at most/); 31 expect(() => resolveHostType({ localhost: true, lan: true })).toThrow(/Specify at most/); 32 expect(() => resolveHostType({ tunnel: true, lan: true })).toThrow(/Specify at most/); 33 }); 34}); 35 36describe(resolvePortsAsync, () => { 37 beforeEach(() => { 38 asMock(resolvePortAsync).mockImplementation((root, { defaultPort, fallbackPort }) => 39 Promise.resolve(defaultPort ?? fallbackPort) 40 ); 41 }); 42 it(`resolves default port for metro`, async () => { 43 await expect(resolvePortsAsync('/noop', {}, { webOnly: false })).resolves.toStrictEqual({ 44 metroPort: 19000, 45 }); 46 }); 47 it(`resolves default port with given port`, async () => { 48 await expect( 49 resolvePortsAsync('/noop', { port: 1234 }, { webOnly: false }) 50 ).resolves.toStrictEqual({ 51 metroPort: 1234, 52 }); 53 await expect( 54 resolvePortsAsync('/noop', { port: 1234, devClient: true }, { webOnly: false }) 55 ).resolves.toStrictEqual({ 56 metroPort: 1234, 57 }); 58 await expect( 59 resolvePortsAsync('/noop', { port: 1234 }, { webOnly: true }) 60 ).resolves.toStrictEqual({ 61 webpackPort: 1234, 62 }); 63 }); 64 it(`resolves default port for metro with dev client`, async () => { 65 await expect( 66 resolvePortsAsync('/noop', { devClient: true }, { webOnly: false }) 67 ).resolves.toStrictEqual({ 68 metroPort: 8081, 69 }); 70 }); 71 it(`resolves default port for webpack`, async () => { 72 await expect(resolvePortsAsync('/noop', {}, { webOnly: true })).resolves.toStrictEqual({ 73 webpackPort: 19006, 74 }); 75 // dev client changes nothing on Webpack... 76 await expect( 77 resolvePortsAsync('/noop', { devClient: true }, { webOnly: true }) 78 ).resolves.toStrictEqual({ 79 webpackPort: 19006, 80 }); 81 }); 82}); 83