1import { getConfig } from '@expo/config';
2
3import { asMock } from '../../__tests__/asMock';
4import { resolveOptionsAsync } from '../resolveOptions';
5
6jest.mock('@expo/config', () => ({
7  getConfig: jest.fn(() => ({
8    pkg: {},
9    exp: {
10      sdkVersion: '45.0.0',
11      name: 'my-app',
12      slug: 'my-app',
13    },
14  })),
15}));
16
17describe(resolveOptionsAsync, () => {
18  it(`asserts invalid platform`, async () => {
19    await expect(resolveOptionsAsync('/', { '--platform': 'foobar' })).rejects.toThrow(
20      /^Unsupported platform "foobar"\./
21    );
22  });
23
24  it(`parses qualified options`, async () => {
25    await expect(
26      resolveOptionsAsync('/', {
27        '--output-dir': 'foobar',
28        '--platform': 'android',
29        '--clear': true,
30        '--dev': true,
31        '--dump-assetmap': true,
32        '--dump-sourcemap': true,
33        '--max-workers': 2,
34      })
35    ).resolves.toEqual({
36      clear: true,
37      dev: true,
38      dumpAssetmap: true,
39      dumpSourcemap: true,
40      maxWorkers: 2,
41      outputDir: 'foobar',
42      platforms: ['android'],
43    });
44  });
45
46  it(`parses default options`, async () => {
47    await expect(resolveOptionsAsync('/', {})).resolves.toEqual({
48      clear: false,
49      dev: false,
50      dumpAssetmap: false,
51      dumpSourcemap: false,
52      maxWorkers: undefined,
53      outputDir: 'dist',
54      platforms: ['ios', 'android'],
55    });
56  });
57  it(`parses default options with web enabled`, async () => {
58    asMock(getConfig).mockReturnValueOnce({
59      // @ts-expect-error
60      exp: { web: { bundler: 'metro' } },
61    });
62    await expect(resolveOptionsAsync('/', {})).resolves.toEqual(
63      expect.objectContaining({
64        platforms: ['ios', 'android', 'web'],
65      })
66    );
67  });
68});
69