feat(angular): add migration to remove protractor generator defaults (#16409)
This commit is contained in:
parent
14d9a8b034
commit
ec3c642b29
@ -177,6 +177,12 @@
|
|||||||
"description": "Replace @nrwl/angular with @nx/angular",
|
"description": "Replace @nrwl/angular with @nx/angular",
|
||||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages"
|
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages"
|
||||||
},
|
},
|
||||||
|
"remove-protractor-defaults-from-generators": {
|
||||||
|
"cli": "nx",
|
||||||
|
"version": "16.0.0-beta.6",
|
||||||
|
"description": "Remove protractor as default e2eTestRunner from nxJson and project configurations",
|
||||||
|
"implementation": "./src/migrations/update-16-0-0/remove-protractor-defaults"
|
||||||
|
},
|
||||||
"remove-karma-defaults-from-generators": {
|
"remove-karma-defaults-from-generators": {
|
||||||
"cli": "nx",
|
"cli": "nx",
|
||||||
"version": "16.0.0-beta.6",
|
"version": "16.0.0-beta.6",
|
||||||
|
|||||||
@ -0,0 +1,179 @@
|
|||||||
|
import {
|
||||||
|
addProjectConfiguration,
|
||||||
|
readNxJson,
|
||||||
|
readProjectConfiguration,
|
||||||
|
updateNxJson,
|
||||||
|
} from '@nx/devkit';
|
||||||
|
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
|
||||||
|
import removeProtractorDefaults from './remove-protractor-defaults';
|
||||||
|
|
||||||
|
describe('removeProtractorDefaults', () => {
|
||||||
|
it('should remove protractor as default unit test runner from nx.json when exists', async () => {
|
||||||
|
// ARRANGE
|
||||||
|
const tree = createTreeWithEmptyWorkspace();
|
||||||
|
|
||||||
|
const nxJson = readNxJson(tree);
|
||||||
|
nxJson.generators = {
|
||||||
|
'@nrwl/angular:application': {
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
'@nrwl/angular:host': {
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
'@nrwl/angular:remote': {
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
updateNxJson(tree, nxJson);
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
await removeProtractorDefaults(tree);
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
expect(readNxJson(tree).generators).toMatchInlineSnapshot(`
|
||||||
|
{
|
||||||
|
"@nrwl/angular:application": {},
|
||||||
|
"@nrwl/angular:host": {},
|
||||||
|
"@nrwl/angular:remote": {},
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should only remove protractor as default unit test runner from nx.json when set', async () => {
|
||||||
|
// ARRANGE
|
||||||
|
const tree = createTreeWithEmptyWorkspace();
|
||||||
|
|
||||||
|
const nxJson = readNxJson(tree);
|
||||||
|
nxJson.generators = {
|
||||||
|
'@nrwl/angular:application': {
|
||||||
|
style: 'scss',
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
'@nrwl/angular:host': {
|
||||||
|
style: 'scss',
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
'@nrwl/angular:remote': {
|
||||||
|
e2eTestRunner: 'cypress',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
updateNxJson(tree, nxJson);
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
await removeProtractorDefaults(tree);
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
expect(readNxJson(tree).generators).toMatchInlineSnapshot(`
|
||||||
|
{
|
||||||
|
"@nrwl/angular:application": {
|
||||||
|
"style": "scss",
|
||||||
|
},
|
||||||
|
"@nrwl/angular:host": {
|
||||||
|
"style": "scss",
|
||||||
|
},
|
||||||
|
"@nrwl/angular:remote": {
|
||||||
|
"e2eTestRunner": "cypress",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not remove protractor as default e2e test runner from unsupported generator', async () => {
|
||||||
|
// ARRANGE
|
||||||
|
const tree = createTreeWithEmptyWorkspace();
|
||||||
|
|
||||||
|
const nxJson = readNxJson(tree);
|
||||||
|
nxJson.generators = {
|
||||||
|
'@my/custom:plugin': {
|
||||||
|
style: 'scss',
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
updateNxJson(tree, nxJson);
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
await removeProtractorDefaults(tree);
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
expect(readNxJson(tree).generators).toMatchInlineSnapshot(`
|
||||||
|
{
|
||||||
|
"@my/custom:plugin": {
|
||||||
|
"e2eTestRunner": "protractor",
|
||||||
|
"style": "scss",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should remove protractor as default for project specific generators', async () => {
|
||||||
|
// ARRANGE
|
||||||
|
const tree = createTreeWithEmptyWorkspace();
|
||||||
|
addProjectConfiguration(tree, 'test', {
|
||||||
|
name: 'test',
|
||||||
|
root: '.',
|
||||||
|
sourceRoot: 'src',
|
||||||
|
generators: {
|
||||||
|
'@nrwl/angular:application': {
|
||||||
|
style: 'scss',
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
await removeProtractorDefaults(tree);
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
expect(readProjectConfiguration(tree, 'test').generators)
|
||||||
|
.toMatchInlineSnapshot(`
|
||||||
|
{
|
||||||
|
"@nrwl/angular:application": {
|
||||||
|
"style": "scss",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should remove protractor when using nested generator default syntax', async () => {
|
||||||
|
// ARRANGE
|
||||||
|
const tree = createTreeWithEmptyWorkspace();
|
||||||
|
|
||||||
|
const nxJson = readNxJson(tree);
|
||||||
|
nxJson.generators = {
|
||||||
|
'@nrwl/angular:application': {
|
||||||
|
style: 'scss',
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
'@nrwl/angular': {
|
||||||
|
host: {
|
||||||
|
style: 'scss',
|
||||||
|
e2eTestRunner: 'protractor',
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
e2eTestRunner: 'cypress',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
updateNxJson(tree, nxJson);
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
await removeProtractorDefaults(tree);
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
expect(readNxJson(tree).generators).toMatchInlineSnapshot(`
|
||||||
|
{
|
||||||
|
"@nrwl/angular": {
|
||||||
|
"host": {
|
||||||
|
"style": "scss",
|
||||||
|
},
|
||||||
|
"remote": {
|
||||||
|
"e2eTestRunner": "cypress",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"@nrwl/angular:application": {
|
||||||
|
"style": "scss",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
import type {
|
||||||
|
NxJsonConfiguration,
|
||||||
|
ProjectConfiguration,
|
||||||
|
Tree,
|
||||||
|
} from '@nx/devkit';
|
||||||
|
import {
|
||||||
|
formatFiles,
|
||||||
|
getProjects,
|
||||||
|
readNxJson,
|
||||||
|
updateNxJson,
|
||||||
|
updateProjectConfiguration,
|
||||||
|
} from '@nx/devkit';
|
||||||
|
|
||||||
|
const GENERATORS = ['application', 'host', 'remote'];
|
||||||
|
const CANDIDATE_GENERATOR_COLLECTIONS = ['@nrwl/angular', '@nx/angular'];
|
||||||
|
|
||||||
|
export default async function removeProtractorDefaults(tree: Tree) {
|
||||||
|
const nxJson = readNxJson(tree);
|
||||||
|
|
||||||
|
if (nxJson.generators) {
|
||||||
|
const updatedConfig = updateE2ETestRunner(nxJson.generators);
|
||||||
|
|
||||||
|
if (updatedConfig) {
|
||||||
|
updateNxJson(tree, nxJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const projects = getProjects(tree);
|
||||||
|
|
||||||
|
for (const [projectName, projectConfig] of projects) {
|
||||||
|
if (projectConfig.generators) {
|
||||||
|
const updatedProject = updateE2ETestRunner(projectConfig.generators);
|
||||||
|
|
||||||
|
if (updatedProject) {
|
||||||
|
updateProjectConfiguration(tree, projectName, projectConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await formatFiles(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateE2ETestRunner(
|
||||||
|
generatorsConfig:
|
||||||
|
| NxJsonConfiguration['generators']
|
||||||
|
| ProjectConfiguration['generators']
|
||||||
|
) {
|
||||||
|
const generators = Object.entries(generatorsConfig);
|
||||||
|
|
||||||
|
let updatedConfig = false;
|
||||||
|
for (const [generatorName, generatorDefaults] of generators) {
|
||||||
|
if (CANDIDATE_GENERATOR_COLLECTIONS.includes(generatorName)) {
|
||||||
|
for (const possibleGenerator of GENERATORS) {
|
||||||
|
if (
|
||||||
|
generatorDefaults[possibleGenerator] &&
|
||||||
|
generatorDefaults[possibleGenerator]['e2eTestRunner'] &&
|
||||||
|
generatorDefaults[possibleGenerator]['e2eTestRunner'] === 'protractor'
|
||||||
|
) {
|
||||||
|
generatorsConfig[generatorName][possibleGenerator]['e2eTestRunner'] =
|
||||||
|
undefined;
|
||||||
|
updatedConfig = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!GENERATORS.map((v) => `@nrwl/angular:${v}`).includes(generatorName) &&
|
||||||
|
!GENERATORS.map((v) => `@nx/angular:${v}`).includes(generatorName)
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
generatorDefaults['e2eTestRunner'] &&
|
||||||
|
generatorDefaults['e2eTestRunner'] === 'protractor'
|
||||||
|
) {
|
||||||
|
generatorsConfig[generatorName]['e2eTestRunner'] = undefined;
|
||||||
|
updatedConfig = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return updatedConfig;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user