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