nx/e2e/workspace/src/create-nx-workspace.test.ts
2021-04-29 17:53:20 -04:00

209 lines
5.0 KiB
TypeScript

import {
checkFilesDoNotExist,
checkFilesExist,
e2eCwd,
expectNoAngularDevkit,
readJson,
removeProject,
runCreateWorkspace,
uniq,
} from '@nrwl/e2e/utils';
import { existsSync, mkdirSync } from 'fs-extra';
import { execSync } from 'child_process';
describe('create-nx-workspace', () => {
afterEach(() => removeProject({ onlyOnCI: true }));
it('should be able to create an empty workspace', () => {
const wsName = uniq('empty');
runCreateWorkspace(wsName, {
preset: 'empty',
});
checkFilesExist(
'workspace.json',
'package.json',
'package-lock.json',
'apps/.gitkeep',
'libs/.gitkeep'
);
checkFilesDoNotExist('yarn.lock');
expectNoAngularDevkit();
});
it('should be able to create an oss workspace', () => {
const wsName = uniq('oss');
runCreateWorkspace(wsName, {
preset: 'oss',
});
expectNoAngularDevkit();
});
it('should be able to create an angular workspace', () => {
const wsName = uniq('angular');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'angular',
style: 'css',
appName,
});
});
it('should be able to create an react workspace', () => {
const wsName = uniq('react');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'react',
style: 'css',
appName,
});
expectNoAngularDevkit();
});
it('should be able to create an next workspace', () => {
const wsName = uniq('next');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'next',
style: 'css',
appName,
});
expectNoAngularDevkit();
});
it('should be able to create an gatsby workspace', () => {
const wsName = uniq('gatsby');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'next',
style: 'css',
appName,
});
expectNoAngularDevkit();
});
it('should be able to create an web-components workspace', () => {
const wsName = uniq('web-components');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'web-components',
style: 'css',
appName,
});
expectNoAngularDevkit();
});
it('should be able to create an angular + nest workspace', () => {
const wsName = uniq('angular-nest');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'angular-nest',
style: 'css',
appName,
});
});
it('should be able to create an react + express workspace', () => {
const wsName = uniq('react-express');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'react-express',
style: 'css',
appName,
});
});
it('should be able to create an express workspace', () => {
const wsName = uniq('express');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'express',
style: 'css',
appName,
});
});
it('should be able to create a workspace with a custom base branch and HEAD', () => {
const wsName = uniq('branch');
runCreateWorkspace(wsName, {
preset: 'empty',
base: 'main',
});
});
it('should be able to create a workspace with custom commit information', () => {
const wsName = uniq('branch');
runCreateWorkspace(wsName, {
preset: 'empty',
extraArgs:
'--commit.name="John Doe" --commit.email="myemail@test.com" --commit.message="Custom commit message!"',
});
});
it('should be able to create a nest workspace', () => {
const wsName = uniq('nest');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'nest',
appName,
});
});
it('should handle spaces in workspace path', () => {
const wsName = uniq('empty');
const tmpDir = `${e2eCwd}/with space`;
mkdirSync(tmpDir);
const command = `npx create-nx-workspace@${'9999.0.2'} ${wsName} --cli=nx --preset=empty --no-nxCloud --no-interactive`;
execSync(command, {
cwd: tmpDir,
stdio: [0, 1, 2],
env: process.env,
});
expect(existsSync(`${tmpDir}/${wsName}/package.json`)).toBeTruthy();
});
// temporary disable this
xit('should respect package manager preference', () => {
const wsName = uniq('pm');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'react',
style: 'css',
appName,
packageManager: 'yarn',
});
checkFilesExist('yarn.lock');
checkFilesDoNotExist('package-lock.json');
});
// temporary disable this
xit('should store package manager preference for angular cli', () => {
const wsName = uniq('pm');
const appName = uniq('app');
runCreateWorkspace(wsName, {
preset: 'angular',
appName,
style: 'css',
packageManager: 'yarn',
cli: 'angular',
});
const workspaceJson = readJson('angular.json');
expect(workspaceJson.cli.packageManager).toEqual('yarn');
checkFilesExist('yarn.lock');
checkFilesDoNotExist('package-lock.json');
});
});