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