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      minify: true,
39      dumpAssetmap: true,
40      dumpSourcemap: true,
41      maxWorkers: 2,
42      outputDir: 'foobar',
43      platforms: ['android'],
44    });
45  });
46
47  it(`parses default options`, async () => {
48    await expect(resolveOptionsAsync('/', {})).resolves.toEqual({
49      clear: false,
50      dev: false,
51      minify: true,
52      dumpAssetmap: false,
53      dumpSourcemap: false,
54      maxWorkers: undefined,
55      outputDir: 'dist',
56      platforms: ['ios', 'android'],
57    });
58  });
59  it(`parses default options with web enabled`, async () => {
60    asMock(getConfig).mockReturnValueOnce({
61      // @ts-expect-error
62      exp: { web: { bundler: 'metro' } },
63    });
64    await expect(resolveOptionsAsync('/', {})).resolves.toEqual(
65      expect.objectContaining({
66        platforms: ['ios', 'android', 'web'],
67      })
68    );
69  });
70});
71