UNPKG

@nrwl/schematics

Version:

Extensible Dev Tools for Monorepos: Schematics

306 lines (305 loc) 15.6 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const schematics_1 = require("@angular-devkit/schematics"); const testing_1 = require("@angular-devkit/schematics/testing"); const workspace_1 = require("@nrwl/workspace"); const path = require("path"); const testing_2 = require("@nrwl/workspace/testing"); describe('Update 8-0-0', () => { let initialTree; let schematicRunner; beforeEach(() => __awaiter(this, void 0, void 0, function* () { initialTree = testing_2.createEmptyWorkspace(schematics_1.Tree.empty()); schematicRunner = new testing_1.SchematicTestRunner('@nrwl/schematics', path.join(__dirname, '../migrations.json')); initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('package.json', json => ({ scripts: { update: 'ng update @nrwl/schematics' }, dependencies: { '@nrwl/nx': '7.8.1', '@nestjs/core': '5.6.0', express: '4.16.3', react: '16.8.3', '@angular/core': '^7.0.0' }, devDependencies: { '@nrwl/schematics': '7.8.1', cypress: '3.1.0', jest: '24.1.0' } })), initialTree) .toPromise(); initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('tsconfig.json', json => ({ compilerOptions: {} })), initialTree) .toPromise(); initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('tsconfig.app.json', json => ({ compilerOptions: { outDir: '../../dist/out-tsc/apps/blah' } })), initialTree) .toPromise(); initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('workspace.json', json => ({ projects: { 'my-app': { architect: { cypress: { builder: '@nrwl/builders:cypress', options: {} }, jest: { builder: '@nrwl/builders:jest', options: {} }, nodeBuild: { builder: '@nrwl/builders:node-build', options: {} }, nodeServe: { builder: '@nrwl/builders:node-execute', options: {} }, webBuild: { builder: '@nrwl/builders:web-build', options: {} }, webServe: { builder: '@nrwl/builders:web-dev-server', options: {} }, runCommands: { builder: '@nrwl/builders:run-commands', options: {} } } } }, cli: { defaultCollection: '@nrwl/schematics' } })), initialTree) .toPromise(); initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('tslint.json', json => ({ rulesDirectory: ['node_modules/@nrwl/schematics/src/tslint'], rules: {} })), initialTree) .toPromise(); })); describe('imports', () => { it(`should be migrated from '@nrwl/nx' to '@nrwl/angular'`, () => __awaiter(this, void 0, void 0, function* () { initialTree.create('file.ts', ` import * from '@nrwl/nx'; import * from '@nrwl/nx/testing'; import { NxModule } from '@nrwl/nx'; import { hot } from '@nrwl/nx/testing'; `); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); expect(tree.readContent('file.ts')).toEqual(` import * from '@nrwl/angular'; import * from '@nrwl/angular/testing'; import { NxModule } from '@nrwl/angular'; import { hot } from '@nrwl/angular/testing'; `); })); it(`should be migrated from '@nrwl/schematics' to '@nrwl/workspace'`, () => __awaiter(this, void 0, void 0, function* () { initialTree.create('file.ts', ` import * from '@nrwl/schematics/src/utils/fileutils'; import { fileExists } from '@nrwl/schematics/src/utils/fileutils'; `); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); expect(tree.readContent('file.ts')).toEqual(` import * from '@nrwl/workspace/src/utils/fileutils'; import { fileExists } from '@nrwl/workspace/src/utils/fileutils'; `); })); }); describe('builders', () => { it('should be migrated', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const { projects } = workspace_1.readJsonInTree(tree, 'workspace.json'); const { architect } = projects['my-app']; expect(architect.cypress.builder).toEqual('@nrwl/cypress:cypress'); expect(architect.jest.builder).toEqual('@nrwl/jest:jest'); expect(architect.nodeBuild.builder).toEqual('@nrwl/node:build'); expect(architect.nodeServe.builder).toEqual('@nrwl/node:execute'); expect(architect.webBuild.builder).toEqual('@nrwl/web:build'); expect(architect.webServe.builder).toEqual('@nrwl/web:dev-server'); expect(architect.runCommands.builder).toEqual('@nrwl/workspace:run-commands'); })); }); describe('update npm script', () => { it('should do ng update @nrwl/workspace', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const packageJson = workspace_1.readJsonInTree(tree, 'package.json'); expect(packageJson.scripts.update).toEqual('ng update @nrwl/workspace'); })); }); describe('set root dir', () => { it('should set root dir and update out dirs', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const rootTsConfig = workspace_1.readJsonInTree(tree, 'tsconfig.json'); expect(rootTsConfig.compilerOptions.rootDir).toEqual('.'); const appTsConfig = workspace_1.readJsonInTree(tree, 'tsconfig.app.json'); expect(appTsConfig.compilerOptions.outDir).toEqual('../../dist/out-tsc'); })); }); describe('jest config', () => { it('should have the plugin path migrated', () => __awaiter(this, void 0, void 0, function* () { initialTree.create('jest.config.js', ` module.exports = { resolver: '@nrwl/builders/plugins/jest/resolver', }; `); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); expect(tree.readContent('jest.config.js')).toContain('@nrwl/jest/plugins/resolver'); })); }); describe('dependencies', () => { it('should change to the new dependencies', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const { dependencies, devDependencies } = workspace_1.readJsonInTree(tree, 'package.json'); expect(dependencies['@nrwl/nx']).not.toBeDefined(); expect(devDependencies['@nrwl/schematics']).not.toBeDefined(); expect(devDependencies['@nrwl/builders']).not.toBeDefined(); expect(dependencies['@nrwl/angular']).toBeDefined(); expect(devDependencies['@nrwl/express']).toBeDefined(); expect(devDependencies['@nrwl/cypress']).toBeDefined(); expect(devDependencies['@nrwl/jest']).toBeDefined(); expect(devDependencies['@nrwl/nest']).toBeDefined(); expect(devDependencies['@nrwl/node']).toBeDefined(); expect(devDependencies['@nrwl/react']).toBeDefined(); expect(devDependencies['@nrwl/web']).toBeDefined(); expect(devDependencies['@nrwl/workspace']).toBeDefined(); })); }); describe('lint rules', () => { it('should be migrated to `@nrwl/workspace`', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const { rulesDirectory } = workspace_1.readJsonInTree(tree, 'tslint.json'); expect(rulesDirectory).not.toContain('node_modules/@nrwl/schematics/src/tslint'); expect(rulesDirectory).toContain('node_modules/@nrwl/workspace/src/tslint'); })); }); describe('Nest dependencies', () => { it('should be updated to 6.x', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const { dependencies, devDependencies } = workspace_1.readJsonInTree(tree, 'package.json'); expect(dependencies['@nestjs/common']).toEqual('^6.2.4'); expect(dependencies['@nestjs/core']).toEqual('^6.2.4'); expect(dependencies['@nestjs/platform-express']).toEqual('^6.2.4'); expect(dependencies['reflect-metadata']).toEqual('^0.1.12'); expect(devDependencies['@nestjs/schematics']).toEqual('^6.3.0'); expect(devDependencies['@nestjs/testing']).toEqual('^6.2.4'); })); }); describe('defaultCollection', () => { it('should be set to @nrwl/angular if @angular/core is present', () => __awaiter(this, void 0, void 0, function* () { const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const defaultCollection = workspace_1.readJsonInTree(tree, 'workspace.json').cli .defaultCollection; expect(defaultCollection).toEqual('@nrwl/angular'); })); it('should be set to @nrwl/react if react is present', () => __awaiter(this, void 0, void 0, function* () { initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('package.json', json => (Object.assign({}, json, { dependencies: { '@nestjs/core': '5.6.0', express: '4.16.3', react: '16.8.3' } }))), initialTree) .toPromise(); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const defaultCollection = workspace_1.readJsonInTree(tree, 'workspace.json').cli .defaultCollection; expect(defaultCollection).toEqual('@nrwl/react'); })); it('should be set to @nrwl/nest if @nestjs/core is present', () => __awaiter(this, void 0, void 0, function* () { initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('package.json', json => (Object.assign({}, json, { dependencies: { '@nestjs/core': '5.6.0', express: '4.16.3' } }))), initialTree) .toPromise(); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const defaultCollection = workspace_1.readJsonInTree(tree, 'workspace.json').cli .defaultCollection; expect(defaultCollection).toEqual('@nrwl/nest'); })); it('should be set to @nrwl/express if express is present', () => __awaiter(this, void 0, void 0, function* () { initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('package.json', json => (Object.assign({}, json, { dependencies: { express: '4.16.3' } }))), initialTree) .toPromise(); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const defaultCollection = workspace_1.readJsonInTree(tree, 'workspace.json').cli .defaultCollection; expect(defaultCollection).toEqual('@nrwl/express'); })); it('should be set to @nrwl/express if express is present', () => __awaiter(this, void 0, void 0, function* () { initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('package.json', json => (Object.assign({}, json, { dependencies: { express: '4.16.3' } }))), initialTree) .toPromise(); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const defaultCollection = workspace_1.readJsonInTree(tree, 'workspace.json').cli .defaultCollection; expect(defaultCollection).toEqual('@nrwl/express'); })); it('should fallback to @nrwl/workspace', () => __awaiter(this, void 0, void 0, function* () { initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('package.json', json => (Object.assign({}, json, { dependencies: {} }))), initialTree) .toPromise(); initialTree = yield schematicRunner .callRule(workspace_1.updateJsonInTree('workspace.json', json => (Object.assign({}, json, { projects: {} }))), initialTree) .toPromise(); const tree = yield schematicRunner .runSchematicAsync('update-8.0.0', {}, initialTree) .toPromise(); const defaultCollection = workspace_1.readJsonInTree(tree, 'workspace.json').cli .defaultCollection; expect(defaultCollection).toEqual('@nrwl/workspace'); })); }); });