1082815dcSEvan Bacon// Tests that require physical fixtures due to their complex nature. 2082815dcSEvan Baconimport { join, resolve } from 'path'; 3082815dcSEvan Bacon 4*97e1898cSEvan Baconimport { getConfig } from '../Config'; 5082815dcSEvan Baconimport { getDynamicConfig } from '../getConfig'; 6082815dcSEvan Bacon 7082815dcSEvan Baconconst mockConfigContext = {} as any; 8082815dcSEvan Bacon 9082815dcSEvan Baconjest.unmock('resolve-from'); 10082815dcSEvan Bacon 11082815dcSEvan Bacondescribe(getDynamicConfig, () => { 12082815dcSEvan Bacon describe('process.cwd in a child process', () => { 13082815dcSEvan Bacon const originalCwd = process.cwd(); 14082815dcSEvan Bacon const projectRoot = join(__dirname, 'fixtures/dynamic-cwd'); 15082815dcSEvan Bacon 16082815dcSEvan Bacon beforeEach(() => { 17082815dcSEvan Bacon process.chdir(__dirname); 18082815dcSEvan Bacon }); 19082815dcSEvan Bacon 20082815dcSEvan Bacon afterEach(() => { 21082815dcSEvan Bacon process.chdir(originalCwd); 22082815dcSEvan Bacon }); 23082815dcSEvan Bacon 24082815dcSEvan Bacon // Test that hot evaluation is spawned in the expected location 25082815dcSEvan Bacon // https://github.com/expo/expo-cli/pull/2220 26082815dcSEvan Bacon it('process.cwd in read-config script is not equal to the project root', () => { 27082815dcSEvan Bacon const configPath = join(projectRoot, 'app.config.ts'); 28082815dcSEvan Bacon 29082815dcSEvan Bacon const { config } = getDynamicConfig(configPath, mockConfigContext); 30082815dcSEvan Bacon 31*97e1898cSEvan Bacon expect(config?.extra.processCwd).toBe(__dirname); 32082815dcSEvan Bacon expect( 33082815dcSEvan Bacon getDynamicConfig(configPath, { 34082815dcSEvan Bacon projectRoot, 35*97e1898cSEvan Bacon } as any).config?.extra.processCwd 36082815dcSEvan Bacon ).toBe(__dirname); 37082815dcSEvan Bacon }); 38082815dcSEvan Bacon }); 39082815dcSEvan Bacon}); 40082815dcSEvan Bacon 41082815dcSEvan Bacondescribe(getConfig, () => { 42082815dcSEvan Bacon it('parses a js config with import', () => { 43082815dcSEvan Bacon const projectRoot = resolve(__dirname, './fixtures/require-file'); 44082815dcSEvan Bacon 45082815dcSEvan Bacon const { exp } = getConfig(projectRoot, { 46082815dcSEvan Bacon skipSDKVersionRequirement: true, 47082815dcSEvan Bacon }); 48082815dcSEvan Bacon // @ts-ignore: foo property is not defined 49082815dcSEvan Bacon expect(exp.foo).toBe('bar'); 50082815dcSEvan Bacon }); 51082815dcSEvan Bacon 52082815dcSEvan Bacon it('throws a useful error for a project with an external syntax error', () => { 53082815dcSEvan Bacon const projectRoot = resolve(__dirname, './fixtures/external-error'); 54082815dcSEvan Bacon 55082815dcSEvan Bacon expect(() => 56082815dcSEvan Bacon getConfig(projectRoot, { 57082815dcSEvan Bacon skipSDKVersionRequirement: true, 58082815dcSEvan Bacon }) 59e93c6b62SBrent Vatne ).toThrow(/Error reading Expo config.*?app.config.js/); 60082815dcSEvan Bacon }); 61082815dcSEvan Bacon 62082815dcSEvan Bacon it('resolves plugins', () => { 63082815dcSEvan Bacon const projectRoot = resolve(__dirname, './fixtures/plugins'); 64082815dcSEvan Bacon const { exp } = getConfig(projectRoot, { 65082815dcSEvan Bacon skipSDKVersionRequirement: true, 66082815dcSEvan Bacon }); 67082815dcSEvan Bacon 68082815dcSEvan Bacon expect(exp.name).toBe('custom-name'); 69082815dcSEvan Bacon expect(exp.slug).toBe('from-custom-plugin'); 70*97e1898cSEvan Bacon expect(exp.plugins?.[0]).toStrictEqual('./my-plugin'); 71082815dcSEvan Bacon // Ensure the plugin method is serialized into its original name 72*97e1898cSEvan Bacon expect(exp.plugins?.[1][0]).toBe('withCustom'); 73082815dcSEvan Bacon }); 74082815dcSEvan Bacon}); 75