1/* eslint-env jest */
2import fs from 'fs/promises';
3
4import { execute, getLoadedModulesAsync, projectRoot } from './utils';
5
6const originalForceColor = process.env.FORCE_COLOR;
7const originalCI = process.env.CI;
8beforeAll(async () => {
9  await fs.mkdir(projectRoot, { recursive: true });
10  process.env.FORCE_COLOR = '0';
11  process.env.CI = '1';
12});
13afterAll(() => {
14  process.env.FORCE_COLOR = originalForceColor;
15  process.env.CI = originalCI;
16});
17
18it('loads expected modules by default', async () => {
19  const modules = await getLoadedModulesAsync(`require('../../build/src/register');`);
20  expect(modules).toStrictEqual([
21    '../node_modules/ansi-styles/index.js',
22    '../node_modules/arg/index.js',
23    '../node_modules/chalk/source/index.js',
24    '../node_modules/chalk/source/util.js',
25    '../node_modules/has-flag/index.js',
26    '../node_modules/supports-color/index.js',
27    '@expo/cli/build/src/log.js',
28    '@expo/cli/build/src/register/index.js',
29    '@expo/cli/build/src/utils/args.js',
30    '@expo/cli/build/src/utils/errors.js',
31  ]);
32});
33
34it('runs `npx expo register --help`', async () => {
35  const results = await execute('register', '--help');
36  expect(results.stdout).toMatchInlineSnapshot(`
37    "
38      Info
39        Sign up for a new Expo account
40
41      Usage
42        $ npx expo register
43
44      Options
45        -h, --help    Usage info
46    "
47  `);
48});
49
50it('throws on invalid project root', async () => {
51  expect.assertions(1);
52  try {
53    await execute('very---invalid', 'register');
54  } catch (e) {
55    expect(e.stderr).toMatch(/Invalid project root: \//);
56  }
57});
58
59it('runs `npx expo register` and throws due to CI', async () => {
60  expect.assertions(1);
61  try {
62    console.log(await execute('register'));
63  } catch (e) {
64    expect(e.stderr).toMatch(/Cannot register an account in CI/);
65  }
66});
67