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;
8
9beforeAll(async () => {
10  await fs.mkdir(projectRoot, { recursive: true });
11  process.env.FORCE_COLOR = '0';
12});
13afterAll(() => {
14  process.env.FORCE_COLOR = originalForceColor;
15});
16
17it('loads expected modules by default', async () => {
18  const modules = await getLoadedModulesAsync(`require('../../build/src/logout');`);
19  expect(modules).toStrictEqual([
20    '../node_modules/ansi-styles/index.js',
21    '../node_modules/arg/index.js',
22    '../node_modules/chalk/source/index.js',
23    '../node_modules/chalk/source/util.js',
24    '../node_modules/has-flag/index.js',
25    '../node_modules/supports-color/index.js',
26    '@expo/cli/build/src/log.js',
27    '@expo/cli/build/src/logout/index.js',
28    '@expo/cli/build/src/utils/args.js',
29    '@expo/cli/build/src/utils/errors.js',
30  ]);
31});
32
33it('runs `npx expo logout --help`', async () => {
34  const results = await execute('logout', '--help');
35  expect(results.stdout).toMatchInlineSnapshot(`
36    "
37      Info
38        Log out of an Expo account
39
40      Usage
41        $ npx expo logout
42
43      Options
44        -h, --help    Usage info
45    "
46  `);
47});
48
49it('throws on invalid project root', async () => {
50  expect.assertions(1);
51  try {
52    await execute('very---invalid', 'logout');
53  } catch (e) {
54    const error = e as ExecaError;
55    expect(error.stderr).toMatch(/Invalid project root: \//);
56  }
57});
58