18d307f52SEvan Baconimport { vol } from 'memfs'; 28d307f52SEvan Bacon 38d307f52SEvan Baconimport { 48d307f52SEvan Bacon ensureValidPlatforms, 58d307f52SEvan Bacon resolvePlatformOption, 68d307f52SEvan Bacon resolveSkipDependencyUpdate, 76caf5755SEvan Bacon resolvePackageManagerOptions, 88d307f52SEvan Bacon resolveTemplateOption, 98d307f52SEvan Bacon} from '../resolveOptions'; 108d307f52SEvan Bacon 116caf5755SEvan Bacondescribe(resolvePackageManagerOptions, () => { 126caf5755SEvan Bacon it(`resolves`, () => { 136caf5755SEvan Bacon expect(resolvePackageManagerOptions({ '--yarn': true })).toEqual({ 146caf5755SEvan Bacon npm: undefined, 156caf5755SEvan Bacon pnpm: undefined, 166caf5755SEvan Bacon yarn: true, 176caf5755SEvan Bacon }); 186caf5755SEvan Bacon }); 196caf5755SEvan Bacon it(`asserts mutually exclusive arguments`, () => { 206caf5755SEvan Bacon expect(() => resolvePackageManagerOptions({ '--npm': true, '--pnpm': true })).toThrow(); 216caf5755SEvan Bacon expect(() => resolvePackageManagerOptions({ '--no-install': true, '--yarn': true })).toThrow(); 226caf5755SEvan Bacon expect(() => 236caf5755SEvan Bacon resolvePackageManagerOptions({ 246caf5755SEvan Bacon '--npm': true, 256caf5755SEvan Bacon '--pnpm': true, 266caf5755SEvan Bacon '--no-install': true, 276caf5755SEvan Bacon '--yarn': true, 286caf5755SEvan Bacon }) 296caf5755SEvan Bacon ).toThrow(); 306caf5755SEvan Bacon }); 316caf5755SEvan Bacon}); 326caf5755SEvan Bacon 338d307f52SEvan Bacondescribe(resolvePlatformOption, () => { 348d307f52SEvan Bacon const platform = process.platform; 358d307f52SEvan Bacon 368d307f52SEvan Bacon afterEach(() => { 378d307f52SEvan Bacon Object.defineProperty(process, 'platform', { 388d307f52SEvan Bacon value: platform, 398d307f52SEvan Bacon }); 408d307f52SEvan Bacon }); 418d307f52SEvan Bacon 428d307f52SEvan Bacon it('returns the correct platforms', () => { 438d307f52SEvan Bacon expect(resolvePlatformOption('ios')).toEqual(['ios']); 448d307f52SEvan Bacon expect(resolvePlatformOption('android')).toEqual(['android']); 458d307f52SEvan Bacon }); 468d307f52SEvan Bacon it('returns the correct platforms (darwin)', () => { 478d307f52SEvan Bacon Object.defineProperty(process, 'platform', { 488d307f52SEvan Bacon value: 'darwin', 498d307f52SEvan Bacon }); 508d307f52SEvan Bacon 518d307f52SEvan Bacon expect(resolvePlatformOption('all')).toEqual(['android', 'ios']); 528d307f52SEvan Bacon }); 538d307f52SEvan Bacon it('returns the correct platforms (win32)', () => { 548d307f52SEvan Bacon Object.defineProperty(process, 'platform', { 558d307f52SEvan Bacon value: 'win32', 568d307f52SEvan Bacon }); 578d307f52SEvan Bacon 588d307f52SEvan Bacon expect(resolvePlatformOption('all')).toEqual(['android']); 598d307f52SEvan Bacon }); 60*5492d26aSCedric van Putten it('accepts unknown platforms', () => { 61*5492d26aSCedric van Putten expect(resolvePlatformOption('foo')).toEqual(['foo']); 628d307f52SEvan Bacon }); 638d307f52SEvan Bacon}); 648d307f52SEvan Bacon 658d307f52SEvan Bacondescribe(resolveSkipDependencyUpdate, () => { 668d307f52SEvan Bacon it('splits dependencies', () => { 678d307f52SEvan Bacon expect(resolveSkipDependencyUpdate(undefined)).toEqual([]); 688d307f52SEvan Bacon expect(resolveSkipDependencyUpdate('')).toEqual([]); 698d307f52SEvan Bacon expect(resolveSkipDependencyUpdate('foo')).toEqual(['foo']); 708d307f52SEvan Bacon expect(resolveSkipDependencyUpdate('foo,bar')).toEqual(['foo', 'bar']); 718d307f52SEvan Bacon }); 728d307f52SEvan Bacon}); 738d307f52SEvan Bacon 748d307f52SEvan Bacondescribe(resolveTemplateOption, () => { 758d307f52SEvan Bacon beforeAll(() => { 768d307f52SEvan Bacon vol.fromJSON({ 778d307f52SEvan Bacon '/foo': '', 788d307f52SEvan Bacon }); 798d307f52SEvan Bacon }); 808d307f52SEvan Bacon afterAll(() => { 818d307f52SEvan Bacon vol.reset(); 828d307f52SEvan Bacon }); 838d307f52SEvan Bacon it('resolves a URL template', () => { 848d307f52SEvan Bacon expect(resolveTemplateOption('http://foo')).toEqual('http://foo'); 858d307f52SEvan Bacon }); 868d307f52SEvan Bacon it('asserts a missing file path template', () => { 878d307f52SEvan Bacon expect(() => resolveTemplateOption('bacon/bar')).toThrowError( 888d307f52SEvan Bacon /template file does not exist: .*bacon\/bar/ 898d307f52SEvan Bacon ); 908d307f52SEvan Bacon }); 918d307f52SEvan Bacon it('resolves a file path template', () => { 928d307f52SEvan Bacon expect(resolveTemplateOption('/foo')).toEqual('/foo'); 938d307f52SEvan Bacon }); 948d307f52SEvan Bacon}); 958d307f52SEvan Bacon 968d307f52SEvan Bacondescribe(ensureValidPlatforms, () => { 978d307f52SEvan Bacon const platform = process.platform; 988d307f52SEvan Bacon const warning = console.warn; 998d307f52SEvan Bacon 1008d307f52SEvan Bacon beforeAll(() => { 1018d307f52SEvan Bacon console.warn = jest.fn(); 1028d307f52SEvan Bacon }); 1038d307f52SEvan Bacon afterAll(() => { 1048d307f52SEvan Bacon console.warn = warning; 1058d307f52SEvan Bacon }); 1068d307f52SEvan Bacon afterEach(() => { 1078d307f52SEvan Bacon Object.defineProperty(process, 'platform', { 1088d307f52SEvan Bacon value: platform, 1098d307f52SEvan Bacon }); 1108d307f52SEvan Bacon }); 1118d307f52SEvan Bacon it(`bails on windows if only ios is passed`, async () => { 1128d307f52SEvan Bacon Object.defineProperty(process, 'platform', { 1138d307f52SEvan Bacon value: 'win32', 1148d307f52SEvan Bacon }); 1158d307f52SEvan Bacon expect(ensureValidPlatforms(['ios', 'android'])).toStrictEqual(['android']); 1168d307f52SEvan Bacon }); 1178d307f52SEvan Bacon it(`allows ios on all platforms except windows`, async () => { 1188d307f52SEvan Bacon Object.defineProperty(process, 'platform', { 1198d307f52SEvan Bacon value: 'other', 1208d307f52SEvan Bacon }); 1218d307f52SEvan Bacon expect(ensureValidPlatforms(['ios', 'android'])).toStrictEqual(['ios', 'android']); 1228d307f52SEvan Bacon }); 1238d307f52SEvan Bacon}); 124