'use strict'; const fs = require('fs'); const JSON5 = require('json5'); const os = require('os'); const path = require('path'); /** * Returns an object with mock exports for the Constants module, such as the * manifest. */ module.exports = function createMockConstants() { const appConfig = _readAppConfiguration(); const expoConfig = (appConfig && appConfig.expo) || {}; const mockDeveloper = '@test'; const mockSlug = expoConfig.slug || 'test'; const mockId = `${mockDeveloper}/${mockSlug}`; const mockLinkingUri = `exp://exp.host/${mockDeveloper}/${mockSlug}/--/`; const mockHostUri = `exp.host/${mockDeveloper}/${mockSlug}`; return { deviceName: 'Test Phone', installationId: 'a01650bb-918d-40be-87be-cf376ab6189f', linkingUri: mockLinkingUri, manifest: { id: mockId, slug: mockSlug, extra: expoConfig.extra, hostUri: mockHostUri, }, }; }; function _readAppConfiguration() { let json = null; // This file is under <package>/node_modules/jest-expo/src and we want to // start looking for app.json under <package> let nextDirectory = path.resolve(__dirname, '..', '..', '..'); let currentDirectory; do { currentDirectory = nextDirectory; const candidatePath = path.join(currentDirectory, 'app.json'); json = _safeReadFile(candidatePath, 'utf8'); nextDirectory = path.dirname(currentDirectory); } while (json == null && currentDirectory !== nextDirectory && currentDirectory !== os.homedir()); return json != null ? JSON5.parse(json) : null; } function _safeReadFile(filePath, options) { try { return fs.readFileSync(filePath, options); } catch (e) { if (e.code !== 'ENOENT') { throw e; } } return null; }