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