167 lines
6.9 KiB
TypeScript

/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { EmptyTree } from '@angular-devkit/schematics';
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
const workspacePath = '/angular.json';
describe('Migration to version 9', () => {
describe('Migrate workspace config', () => {
const schematicRunner = new SchematicTestRunner(
'migrations',
require.resolve('../migration-collection.json'),
);
let tree: UnitTestTree;
beforeEach(async () => {
tree = new UnitTestTree(new EmptyTree());
tree = await schematicRunner
.runExternalSchematicAsync(
require.resolve('../../collection.json'),
'ng-new',
{
name: 'migration-test',
version: '1.2.3',
directory: '.',
},
tree,
)
.toPromise();
});
describe('schematic options', () => {
it('should replace styleext with style', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.schematics = {
'@schematics/angular:component': {
styleext: 'scss',
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { schematics } = JSON.parse(tree2.readContent(workspacePath));
expect(schematics['@schematics/angular:component'].styleext).toBeUndefined();
expect(schematics['@schematics/angular:component'].style).toBe('scss');
});
it('should not replace styleext with style in non-Angular schematic', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.schematics = {
'@schematics/some-other:component': {
styleext: 'scss',
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { schematics } = JSON.parse(tree2.readContent(workspacePath));
expect(schematics['@schematics/some-other:component'].styleext).toBe('scss');
expect(schematics['@schematics/some-other:component'].style).toBeUndefined();
});
it('should replace spec (false) with skipTests (true)', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.schematics = {
'@schematics/angular:component': {
spec: false,
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { schematics } = JSON.parse(tree2.readContent(workspacePath));
expect(schematics['@schematics/angular:component'].spec).toBeUndefined();
expect(schematics['@schematics/angular:component'].skipTests).toBe(true);
});
it('should replace spec (true) with skipTests (false)', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.schematics = {
'@schematics/angular:component': {
spec: true,
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { schematics } = JSON.parse(tree2.readContent(workspacePath));
expect(schematics['@schematics/angular:component'].spec).toBeUndefined();
expect(schematics['@schematics/angular:component'].skipTests).toBe(false);
});
it('should replace spec with skipTests for multiple Angular schematics', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.schematics = {
'@schematics/angular:component': {
spec: false,
},
'@schematics/angular:directive': {
spec: false,
},
'@schematics/angular:service': {
spec: true,
},
'@schematics/angular:module': {
spec: false,
},
'@schematics/angular:guard': {
spec: true,
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { schematics } = JSON.parse(tree2.readContent(workspacePath));
for (const key of Object.keys(workspace.schematics)) {
expect(schematics[key].spec).toBeUndefined();
expect(schematics[key].skipTests).toBe(!workspace.schematics[key].spec);
}
});
it('should replace both styleext with style and spec with skipTests', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.schematics = {
'@schematics/angular:component': {
styleext: 'scss',
spec: false,
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { schematics } = JSON.parse(tree2.readContent(workspacePath));
expect(schematics['@schematics/angular:component'].styleext).toBeUndefined();
expect(schematics['@schematics/angular:component'].style).toBe('scss');
expect(schematics['@schematics/angular:component'].spec).toBeUndefined();
expect(schematics['@schematics/angular:component'].skipTests).toBe(true);
});
it('should replace both styleext with style and spec with skipTests in a project', async () => {
const workspace = JSON.parse(tree.readContent(workspacePath));
workspace.projects['migration-test'].schematics = {
'@schematics/angular:component': {
styleext: 'scss',
spec: false,
},
};
tree.overwrite(workspacePath, JSON.stringify(workspace, undefined, 2));
const tree2 = await schematicRunner.runSchematicAsync('schematic-options-9', {}, tree.branch()).toPromise();
const { projects: { 'migration-test': { schematics } } } = JSON.parse(tree2.readContent(workspacePath));
expect(schematics['@schematics/angular:component'].styleext).toBeUndefined();
expect(schematics['@schematics/angular:component'].style).toBe('scss');
expect(schematics['@schematics/angular:component'].spec).toBeUndefined();
expect(schematics['@schematics/angular:component'].skipTests).toBe(true);
});
});
});
});