1*8d307f52SEvan Baconimport { getConfig } from '@expo/config';
2*8d307f52SEvan Baconimport { vol } from 'memfs';
3*8d307f52SEvan Bacon
4*8d307f52SEvan Baconimport { ensureConfigExistsAsync } from '../ensureConfigAsync';
5*8d307f52SEvan Bacon
6*8d307f52SEvan Bacondescribe(ensureConfigExistsAsync, () => {
7*8d307f52SEvan Bacon  const projectRoot = '/alpha';
8*8d307f52SEvan Bacon  const projectRootBeta = '/beta';
9*8d307f52SEvan Bacon
10*8d307f52SEvan Bacon  beforeAll(() => {
11*8d307f52SEvan Bacon    const expoPackageJson = JSON.stringify({
12*8d307f52SEvan Bacon      name: 'expo',
13*8d307f52SEvan Bacon      version: '40.0.0',
14*8d307f52SEvan Bacon    });
15*8d307f52SEvan Bacon
16*8d307f52SEvan Bacon    vol.fromJSON(
17*8d307f52SEvan Bacon      {
18*8d307f52SEvan Bacon        // No app.json, the config should be automatically created using the Expo SDK version in the installed package.
19*8d307f52SEvan Bacon        'index.js': '',
20*8d307f52SEvan Bacon        'src/index.js': '',
21*8d307f52SEvan Bacon        'package.json': JSON.stringify({ name: 'my-app' }),
22*8d307f52SEvan Bacon        'node_modules/expo/package.json': expoPackageJson,
23*8d307f52SEvan Bacon      },
24*8d307f52SEvan Bacon      projectRoot
25*8d307f52SEvan Bacon    );
26*8d307f52SEvan Bacon    vol.fromJSON(
27*8d307f52SEvan Bacon      {
28*8d307f52SEvan Bacon        'App.js': '',
29*8d307f52SEvan Bacon      },
30*8d307f52SEvan Bacon      projectRootBeta
31*8d307f52SEvan Bacon    );
32*8d307f52SEvan Bacon  });
33*8d307f52SEvan Bacon
34*8d307f52SEvan Bacon  afterAll(() => {
35*8d307f52SEvan Bacon    vol.reset();
36*8d307f52SEvan Bacon  });
37*8d307f52SEvan Bacon
38*8d307f52SEvan Bacon  it(`automatically writes an Expo config when one is missing`, async () => {
39*8d307f52SEvan Bacon    await ensureConfigExistsAsync(projectRoot);
40*8d307f52SEvan Bacon    const config = getConfig(projectRoot);
41*8d307f52SEvan Bacon
42*8d307f52SEvan Bacon    // Writes a static config
43*8d307f52SEvan Bacon    expect(config.staticConfigPath).toBe('/alpha/app.json');
44*8d307f52SEvan Bacon    expect(config.dynamicConfigPath).toBe(null);
45*8d307f52SEvan Bacon
46*8d307f52SEvan Bacon    expect(config.exp.sdkVersion).toBe('40.0.0');
47*8d307f52SEvan Bacon    expect(config.exp.name).toBe('my-app');
48*8d307f52SEvan Bacon    // Ensure the internal object isn't written
49*8d307f52SEvan Bacon    expect(config.rootConfig._internal).not.toBeDefined();
50*8d307f52SEvan Bacon  });
51*8d307f52SEvan Bacon});
52