Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update remote-ign.adoc #686

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Update remote-ign.adoc #686

wants to merge 1 commit into from

Conversation

Madib036
Copy link

'use strict';

const execa = require('execa');
const { mkdirp, writeFileSync, existsSync, readdirSync } = require('fs-extra');
const { join } = require('path');
const { rmSync } = require('fs');

const cli = require.resolve('create-react-app/index.js');

// Increase the timeout for GitHub macOS runner
jest.setTimeout(1000 * 60 * (process.env.RUNNER_OS === 'macOS' ? 10 : 5));

const projectName = 'test-app';
const genPath = join(__dirname, projectName);

const generatedFiles = [
'.gitignore',
'README.md',
'node_modules',
'package.json',
'public',
'src',
'package-lock.json',
];

const removeGenPath = () => {
rmSync(genPath, {
recursive: true,
force: true,
});
};

beforeEach(removeGenPath);
afterAll(async () => {
removeGenPath();
// Defer jest result output waiting for stdout to flush
await new Promise(resolve => setTimeout(resolve, 100));
});

const run = async (args, options) => {
process.stdout.write(
::group::Test "${ expect.getState().currentTestName }" - "create-react-app ${args.join(' ')}" output:\n
);
const result = execa('node', [cli].concat(args), options);
result.stdout.on('data', chunk =>
process.stdout.write(chunk.toString('utf8'))
);
const childProcessResult = await result;
process.stdout.write(ExitCode: ${childProcessResult.exitCode}\n);
process.stdout.write('::endgroup::\n');
const files = existsSync(genPath)
? readdirSync(genPath).filter(f => existsSync(join(genPath, f)))
: null;
return {
...childProcessResult,
files,
};
};

const expectAllFiles = (arr1, arr2) =>
expect([...arr1].sort()).toEqual([...arr2].sort());

describe('create-react-app', () => {
it('check yarn installation', async () => {
const { exitCode } = await execa('yarn', ['--version']);

// Assert for exit code
expect(exitCode).toBe(0);

});

it('asks to supply an argument if none supplied', async () => {
const { exitCode, stderr, files } = await run([], { reject: false });

// Assertions
expect(exitCode).toBe(1);
expect(stderr).toContain('Please specify the project directory');
expect(files).toBe(null);

});

it('creates a project on supplying a name as the argument', async () => {
const { exitCode, files } = await run([projectName], { cwd: __dirname });

// Assert for exit code
expect(exitCode).toBe(0);

// Assert for the generated files
expectAllFiles(files, generatedFiles);

});

it('warns about conflicting files in path', async () => {
// Create the temporary directory
await mkdirp(genPath);

// Create a package.json file
const pkgJson = join(genPath, 'package.json');
writeFileSync(pkgJson, '{ "foo": "bar" }');

const { exitCode, stdout, files } = await run([projectName], {
  cwd: __dirname,
  reject: false,
});

// Assert for exit code
expect(exitCode).toBe(1);

// Assert for the expected message
expect(stdout).toContain(
  `The directory ${projectName} contains files that could conflict`
);

// Existing file is still there
expectAllFiles(files, ['package.json']);

});

it('creates a project in the current directory', async () => {
// Create temporary directory
await mkdirp(genPath);

// Create a project in the current directory
const { exitCode, files } = await run(['.'], { cwd: genPath });

// Assert for exit code
expect(exitCode).toBe(0);

// Assert for the generated files
expectAllFiles(files, generatedFiles);

});

it('uses yarn as the package manager', async () => {
const { exitCode, files } = await run([projectName], {
cwd: __dirname,
env: { npm_config_user_agent: 'yarn' },
});

// Assert for exit code
expect(exitCode).toBe(0);

// Assert for the generated files
const generatedFilesWithYarn = generatedFiles.map(file =>
  file === 'package-lock.json' ? 'yarn.lock' : file
);

expectAllFiles(files, generatedFilesWithYarn);

});

it('creates a project based on the typescript template', async () => {
const { exitCode, files } = await run(
[projectName, '--template', 'typescript'],
{
cwd: __dirname,
}
);

// Assert for exit code
expect(exitCode).toBe(0);

// Assert for the generated files
expectAllFiles(files, [...generatedFiles, 'tsconfig.json']);

});
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant