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