302 lines
8.0 KiB
TypeScript
302 lines
8.0 KiB
TypeScript
import { packagesWeCareAbout } from '@nrwl/workspace/src/command-line/report';
|
|
import { renameSync } from 'fs';
|
|
import {
|
|
newProject,
|
|
readFile,
|
|
readJson,
|
|
runCLI,
|
|
runCLIAsync,
|
|
tmpProjPath,
|
|
uniq,
|
|
updateFile,
|
|
workspaceConfigName,
|
|
} from '@nrwl/e2e/utils';
|
|
|
|
describe('Cli', () => {
|
|
it('should execute long running tasks', () => {
|
|
newProject();
|
|
const myapp = uniq('myapp');
|
|
runCLI(`generate @nrwl/web:app ${myapp}`);
|
|
|
|
updateFile(workspaceConfigName(), (c) => {
|
|
const w = JSON.parse(c);
|
|
w.projects[myapp].targets['counter'] = {
|
|
executor: '@nrwl/workspace:counter',
|
|
options: {
|
|
to: 2,
|
|
},
|
|
};
|
|
return JSON.stringify(w);
|
|
});
|
|
|
|
const success = runCLI(`counter ${myapp} --result=true`);
|
|
expect(success).toContain('0');
|
|
expect(success).toContain('1');
|
|
|
|
expect(() => runCLI(`counter ${myapp} --result=false`)).toThrowError();
|
|
});
|
|
|
|
it('should run npm scripts', async () => {
|
|
newProject();
|
|
const mylib = uniq('mylib');
|
|
runCLI(`generate @nrwl/node:lib ${mylib}`);
|
|
|
|
updateFile(workspaceConfigName(), (c) => {
|
|
const j = JSON.parse(c);
|
|
delete j.projects[mylib].targets;
|
|
return JSON.stringify(j);
|
|
});
|
|
|
|
updateFile(
|
|
`libs/${mylib}/package.json`,
|
|
JSON.stringify({
|
|
name: 'mylib1',
|
|
scripts: { echo: `echo ECHOED` },
|
|
})
|
|
);
|
|
|
|
const { stdout } = await runCLIAsync(`echo ${mylib} --a=123`, {
|
|
silent: true,
|
|
});
|
|
expect(stdout).toMatch(/ECHOED "?--a=123"?/);
|
|
}, 1000000);
|
|
|
|
it('should show help', async () => {
|
|
newProject();
|
|
const myapp = uniq('myapp');
|
|
runCLI(`generate @nrwl/web:app ${myapp}`);
|
|
|
|
let mainHelp = runCLI(`--help`);
|
|
expect(mainHelp).toContain('Run a target for a project');
|
|
expect(mainHelp).toContain('Run task for affected projects');
|
|
|
|
mainHelp = runCLI(`help`);
|
|
expect(mainHelp).toContain('Run a target for a project');
|
|
expect(mainHelp).toContain('Run task for affected projects');
|
|
|
|
const genHelp = runCLI(`g @nrwl/web:app --help`);
|
|
expect(genHelp).toContain(
|
|
'The file extension to be used for style files. (default: css)'
|
|
);
|
|
|
|
const buildHelp = runCLI(`build ${myapp} --help`);
|
|
expect(buildHelp).toContain('The name of the main entry-point file.');
|
|
|
|
const affectedHelp = runCLI(`affected --help`);
|
|
expect(affectedHelp).toContain('Run task for affected projects');
|
|
|
|
const version = runCLI(`--version`);
|
|
expect(version).toContain('9999.0.2'); // stub value
|
|
}, 120000);
|
|
});
|
|
|
|
describe('report', () => {
|
|
it(`should report package versions`, async () => {
|
|
newProject();
|
|
const reportOutput = runCLI('report');
|
|
|
|
packagesWeCareAbout.forEach((p) => {
|
|
expect(reportOutput).toContain(p);
|
|
});
|
|
}, 120000);
|
|
});
|
|
|
|
describe('list', () => {
|
|
beforeEach(() => {
|
|
newProject();
|
|
});
|
|
|
|
it(`should work`, async () => {
|
|
let listOutput = runCLI('list');
|
|
|
|
expect(listOutput).toContain('NX Installed plugins');
|
|
|
|
// just check for some, not all
|
|
expect(listOutput).toContain('@nrwl/angular');
|
|
|
|
// temporarily make it look like this isn't installed
|
|
renameSync(
|
|
tmpProjPath('node_modules/@nrwl/angular'),
|
|
tmpProjPath('node_modules/@nrwl/angular_tmp')
|
|
);
|
|
|
|
listOutput = runCLI('list');
|
|
expect(listOutput).toContain('NX Also available');
|
|
|
|
// look for specific plugin
|
|
listOutput = runCLI('list @nrwl/workspace');
|
|
|
|
expect(listOutput).toContain('Capabilities in @nrwl/workspace');
|
|
|
|
// check for schematics
|
|
expect(listOutput).toContain('workspace');
|
|
expect(listOutput).toContain('ng-add');
|
|
expect(listOutput).toContain('library');
|
|
|
|
// check for builders
|
|
expect(listOutput).toContain('run-commands');
|
|
|
|
// // look for uninstalled core plugin
|
|
listOutput = runCLI('list @nrwl/angular');
|
|
|
|
expect(listOutput).toContain(
|
|
'NX NOTE @nrwl/angular is not currently installed'
|
|
);
|
|
|
|
// look for an unknown plugin
|
|
listOutput = runCLI('list @wibble/fish');
|
|
|
|
expect(listOutput).toContain(
|
|
'NX NOTE @wibble/fish is not currently installed'
|
|
);
|
|
|
|
// put back the @nrwl/angular module (or all the other e2e tests after this will fail)
|
|
renameSync(
|
|
tmpProjPath('node_modules/@nrwl/angular_tmp'),
|
|
tmpProjPath('node_modules/@nrwl/angular')
|
|
);
|
|
}, 120000);
|
|
});
|
|
|
|
describe('migrate', () => {
|
|
it('should run migrations', () => {
|
|
newProject();
|
|
|
|
updateFile(
|
|
`./node_modules/migrate-parent-package/package.json`,
|
|
JSON.stringify({
|
|
version: '1.0.0',
|
|
'nx-migrations': './migrations.json',
|
|
})
|
|
);
|
|
|
|
updateFile(
|
|
`./node_modules/migrate-parent-package/migrations.json`,
|
|
JSON.stringify({
|
|
schematics: {
|
|
run11: {
|
|
version: '1.1.0',
|
|
description: '1.1.0',
|
|
factory: './run11',
|
|
},
|
|
run20: {
|
|
version: '2.0.0',
|
|
description: '2.0.0',
|
|
implementation: './run20',
|
|
},
|
|
},
|
|
})
|
|
);
|
|
|
|
updateFile(
|
|
`./node_modules/migrate-parent-package/run11.js`,
|
|
`
|
|
exports.default = function default_1() {
|
|
return function(host) {
|
|
host.create('file-11', 'content11')
|
|
}
|
|
}
|
|
`
|
|
);
|
|
|
|
updateFile(
|
|
`./node_modules/migrate-parent-package/run20.js`,
|
|
`
|
|
exports.default = function (host) {
|
|
host.write('file-20', 'content20')
|
|
}
|
|
`
|
|
);
|
|
|
|
updateFile(
|
|
`./node_modules/migrate-child-package/package.json`,
|
|
JSON.stringify({
|
|
version: '1.0.0',
|
|
})
|
|
);
|
|
|
|
updateFile(
|
|
'./node_modules/@nrwl/tao/src/commands/migrate.js',
|
|
(content) => {
|
|
const start = content.indexOf('// testing-fetch-start');
|
|
const end = content.indexOf('// testing-fetch-end');
|
|
|
|
const before = content.substring(0, start);
|
|
const after = content.substring(end);
|
|
const newFetch = `
|
|
function createFetcher(logger) {
|
|
return function fetch(packageName) {
|
|
if (packageName === 'migrate-parent-package') {
|
|
return Promise.resolve({
|
|
version: '2.0.0',
|
|
generators: {
|
|
'run11': {
|
|
version: '1.1.0'
|
|
},
|
|
'run20': {
|
|
version: '2.0.0',
|
|
cli: 'nx'
|
|
}
|
|
},
|
|
packageJsonUpdates: {
|
|
'run-11': {version: '1.1.0', packages: {'migrate-child-package': {version: '9.0.0', alwaysAddToPackageJson: true}}},
|
|
}
|
|
});
|
|
} else {
|
|
return Promise.resolve({version: '9.0.0'});
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
return `${before}${newFetch}${after}`;
|
|
}
|
|
);
|
|
|
|
runCLI(
|
|
'migrate migrate-parent-package@2.0.0 --from="migrate-parent-package@1.0.0"',
|
|
{
|
|
env: {
|
|
...process.env,
|
|
NX_MIGRATE_SKIP_INSTALL: 'true',
|
|
NX_MIGRATE_USE_LOCAL: 'true',
|
|
},
|
|
}
|
|
);
|
|
|
|
// updates package.json
|
|
const packageJson = readJson(`package.json`);
|
|
expect(packageJson.dependencies['migrate-child-package']).toEqual('9.0.0');
|
|
expect(readFile(`package.json`).endsWith(`}\n`)).toEqual(true);
|
|
|
|
// creates migrations.json
|
|
const migrationsJson = readJson(`migrations.json`);
|
|
expect(migrationsJson).toEqual({
|
|
migrations: [
|
|
{
|
|
package: 'migrate-parent-package',
|
|
version: '1.1.0',
|
|
name: 'run11',
|
|
},
|
|
{
|
|
package: 'migrate-parent-package',
|
|
version: '2.0.0',
|
|
name: 'run20',
|
|
cli: 'nx',
|
|
},
|
|
],
|
|
});
|
|
|
|
// runs migrations
|
|
runCLI('migrate --run-migrations=migrations.json', {
|
|
env: {
|
|
...process.env,
|
|
NX_MIGRATE_SKIP_INSTALL: 'true',
|
|
NX_MIGRATE_USE_LOCAL: 'true',
|
|
},
|
|
});
|
|
expect(readFile('file-11')).toEqual('content11');
|
|
expect(readFile('file-20')).toEqual('content20');
|
|
});
|
|
});
|