UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

240 lines (239 loc) • 16.2 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(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 path = require("path"); const add_normalize_1 = require("./add-normalize"); const dependency_handler_1 = require("../utils/dependency-handler"); const util_1 = require("../utils/util"); describe('ng-add schematics', () => { const collectionPath = path.join(__dirname, '../collection.json'); const runner = new testing_1.SchematicTestRunner('cli-schematics', collectionPath); let tree; const sourceRoot = 'testSrc'; const ngJsonConfig = { version: 1, projects: { testProj: { root: '/', sourceRoot, projectType: util_1.ProjectType.Application, architect: { serve: {}, build: { options: { main: `${sourceRoot}/main.ts`, polyfills: `${sourceRoot}/polyfills.ts`, scripts: [] } }, test: { options: { main: `${sourceRoot}/test.ts`, polyfills: `${sourceRoot}/polyfills.ts`, scripts: [] } }, } } } }; const pkgJsonConfig = { dependencies: {}, devDependencies: {} }; const resetJsonConfigs = (treeArg) => { treeArg.overwrite('/angular.json', JSON.stringify(ngJsonConfig)); treeArg.overwrite('/package.json', JSON.stringify(pkgJsonConfig)); }; beforeEach(() => { tree = new testing_1.UnitTestTree(new schematics_1.EmptyTree()); tree.create('/angular.json', JSON.stringify(ngJsonConfig)); tree.create('/package.json', JSON.stringify(pkgJsonConfig)); tree.create(`${sourceRoot}/main.ts`, '// test comment'); tree.create(`${sourceRoot}/test.ts`, '// test comment'); }); it('should include ALL dependencies in map', () => { const pkgJson = require('../../package.json'); const allDependencies = Object.assign({}, pkgJson.dependencies, pkgJson.peerDependencies, pkgJson.igxDevDependencies); for (const key of Object.keys(allDependencies)) { const expectedPackages = { name: key, target: jasmine.anything() }; expect(dependency_handler_1.DEPENDENCIES_MAP).toContain(expectedPackages, `Dependency ${key} missing in dependencies map!`); } }); it('should add packages to package.json dependencies', () => __awaiter(void 0, void 0, void 0, function* () { const expectedDeps = dependency_handler_1.DEPENDENCIES_MAP.filter(dep => dep.target === dependency_handler_1.PackageTarget.REGULAR).map(dep => dep.name); const expectedDevDeps = dependency_handler_1.DEPENDENCIES_MAP.filter(dep => dep.target === dependency_handler_1.PackageTarget.DEV).map(dep => dep.name); yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(pkgJsonData.dependencies).toBeTruthy(); expect(pkgJsonData.devDependencies).toBeTruthy(); // Check for explicit dependencies expect(Object.keys(pkgJsonData.dependencies).length).toEqual(expectedDeps.length, `Different number of added dependencies!`); expect(Object.keys(pkgJsonData.devDependencies).length).toEqual(expectedDevDeps.length, `Different number of added devDependencies!`); for (const dependency of expectedDeps) { expect(pkgJsonData.dependencies.hasOwnProperty(dependency)).toEqual(true, `Dependency ${dependency} is missing from output!`); } for (const dependency of expectedDevDeps) { expect(pkgJsonData.devDependencies.hasOwnProperty(dependency)).toEqual(true, `DevDependency ${dependency} is missing from output!`); } })); it('should add the correct igniteui-angular packages to package.json dependencies', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false }, tree); const pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(pkgJsonData.dependencies['fflate']).toBeTruthy(); // hammer is optional now. expect(pkgJsonData.dependencies['hammerjs']).toBeFalsy(); })); it('should add hammerjs dependency to package.json dependencies if addHammer prompt is set.', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(pkgJsonData.dependencies['fflate']).toBeTruthy(); expect(pkgJsonData.dependencies['hammerjs']).toBeTruthy(); })); it('should NOT add hammer.js to the main.ts file', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const mainTs = tree.read(`${sourceRoot}/main.ts`).toString(); expect(mainTs).not.toContain('import \'hammerjs\';'); })); it('should NOT add hammer.js to the test.ts file', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const testTs = tree.read(`${sourceRoot}/test.ts`).toString(); expect(testTs).not.toContain('import \'hammerjs\';'); })); // Hammer is optional now. it('should not add hammer.js in angular.json build options under scripts', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.build.options.scripts).not.toContain('./node_modules/hammerjs/hammer.min.js'); })); it('should add hammer.js in angular.json build options under scripts if addHammer prompt is set.', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.build.options.scripts).toContain('./node_modules/hammerjs/hammer.min.js'); })); // Hammer is optional now. it('should not add hammer.js in angular.json test options under scripts', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.test.options.scripts).not.toContain('./node_modules/hammerjs/hammer.min.js'); })); it('should add hammer.js in angular.json test options under scripts if addHammer prompt is set.', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.test.options.scripts).toContain('./node_modules/hammerjs/hammer.min.js'); })); it('should NOT duplicate hammer.js if it exists in angular.json build options', () => __awaiter(void 0, void 0, void 0, function* () { const ngJsonConfig1 = JSON.parse(tree.read('/angular.json').toString()); ngJsonConfig1.projects.testProj.architect.build.options.scripts.push('./node_modules/hammerjs/hammer.min.js'); tree.overwrite('/angular.json', JSON.stringify(ngJsonConfig1)); yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.build.options.scripts.length).toBe(1); expect(ngJsonConfigResult.projects.testProj.architect.build.options.scripts).toMatch('./node_modules/hammerjs/hammer.min.js'); })); it('should NOT duplicate hammer.js if it exists in angular.json test options', () => __awaiter(void 0, void 0, void 0, function* () { const ngJsonConfig1 = JSON.parse(tree.read('/angular.json').toString()); ngJsonConfig1.projects.testProj.architect.test.options.scripts.push('./node_modules/hammerjs/hammer.min.js'); tree.overwrite('/angular.json', JSON.stringify(ngJsonConfig1)); yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.test.options.scripts.length).toBe(1); expect(ngJsonConfigResult.projects.testProj.architect.test.options.scripts).toMatch('./node_modules/hammerjs/hammer.min.js'); })); it('should NOT add hammer.js to main.ts if it exists in angular.json build options', () => __awaiter(void 0, void 0, void 0, function* () { const ngJsonConfig1 = JSON.parse(tree.read('/angular.json').toString()); ngJsonConfig1.projects.testProj.architect.build.options.scripts.push('./node_modules/hammerjs/hammer.min.js'); tree.overwrite('/angular.json', JSON.stringify(ngJsonConfig1)); yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const newContent = tree.read(`${sourceRoot}/main.ts`).toString(); expect(newContent).toMatch('// test comment'); })); it('should NOT add hammer.js to test.ts if it exists in angular.json test options', () => __awaiter(void 0, void 0, void 0, function* () { const ngJsonConfig1 = JSON.parse(tree.read('/angular.json').toString()); ngJsonConfig1.projects.testProj.architect.test.options.scripts.push('./node_modules/hammerjs/hammer.min.js'); tree.overwrite('/angular.json', JSON.stringify(ngJsonConfig1)); yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const newContent = tree.read(`${sourceRoot}/test.ts`).toString(); expect(newContent).toMatch('// test comment'); })); // Hammer is optional now. it('should not add hammer.js to package.json dependencies', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false }, tree); const pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(pkgJsonData.dependencies['hammerjs']).toBeFalsy(); })); it('should add hammer.js to package.json dependencies if addHammer prompt is set.', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(pkgJsonData.dependencies['hammerjs']).toBeTruthy(); })); it('should NOT add hammer.js to angular.json if it exists in main.ts options', () => __awaiter(void 0, void 0, void 0, function* () { const mainTsPath = `${sourceRoot}/main.ts`; const content = tree.read(mainTsPath).toString(); tree.overwrite(mainTsPath, 'import \'hammerjs\';\n' + content); yield runner.runSchematic('ng-add', { normalizeCss: false, addHammer: true }, tree); const ngJsonConfigResult = JSON.parse(tree.read('/angular.json').toString()); expect(ngJsonConfigResult.projects.testProj.architect.build.options.scripts.length).toBe(0); expect(ngJsonConfigResult.projects.testProj.architect.build.options.scripts).not.toContain('./node_modules/hammerjs/hammer.min.js'); })); it('should add the CLI only to devDependencies', () => __awaiter(void 0, void 0, void 0, function* () { yield runner.runSchematic('ng-add', { normalizeCss: false }, tree); const pkgJsonData = JSON.parse(tree.readContent('/package.json')); const version = require('../../package.json')['igxDevDependencies']['@igniteui/angular-schematics']; expect(pkgJsonData.devDependencies['@igniteui/angular-schematics']).toBe(version); expect(pkgJsonData.dependencies['@igniteui/angular-schematics']).toBeFalsy(); })); it('should properly add css reset', () => __awaiter(void 0, void 0, void 0, function* () { tree.create(`${sourceRoot}/styles.scss`, ''); yield runner.runSchematic('ng-add', { normalizeCss: true }, tree); let pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(tree.readContent(`${sourceRoot}/styles.scss`)).toEqual(add_normalize_1.scssImport); expect(pkgJsonData.dependencies['minireset.css']).toBeTruthy(); resetJsonConfigs(tree); tree.delete(`${sourceRoot}/styles.scss`); tree.create(`${sourceRoot}/styles.sass`, ''); yield runner.runSchematic('ng-add', { normalizeCss: true }, tree); pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(tree.readContent(`${sourceRoot}/styles.sass`)).toEqual(add_normalize_1.scssImport); expect(pkgJsonData.dependencies['minireset.css']).toBeTruthy(); resetJsonConfigs(tree); tree.delete(`${sourceRoot}/styles.sass`); tree.create(`${sourceRoot}/styles.css`, ''); yield runner.runSchematic('ng-add', { normalizeCss: true }, tree); pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(tree.readContent(`${sourceRoot}/styles.css`)).toBe(''); expect(pkgJsonData.dependencies['minireset.css']).toBeTruthy(); expect(JSON.parse(tree.readContent('/angular.json')).projects['testProj'].architect.build.options.styles).toContain(add_normalize_1.cssImport); resetJsonConfigs(tree); tree.delete(`${sourceRoot}/styles.css`); tree.create(`${sourceRoot}/styles.less`, ''); yield runner.runSchematic('ng-add', { normalizeCss: true }, tree); pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(tree.readContent(`${sourceRoot}/styles.less`)).toBe(''); expect(pkgJsonData.dependencies['minireset.css']).toBeTruthy(); expect(JSON.parse(tree.readContent('/angular.json')).projects['testProj'].architect.build.options.styles).toContain(add_normalize_1.cssImport); resetJsonConfigs(tree); tree.delete(`${sourceRoot}/styles.less`); tree.create(`${sourceRoot}/styles.styl`, ''); yield runner.runSchematic('ng-add', { normalizeCss: true }, tree); pkgJsonData = JSON.parse(tree.readContent('/package.json')); expect(tree.readContent(`${sourceRoot}/styles.styl`)).toBe(''); expect(pkgJsonData.dependencies['minireset.css']).toBeTruthy(); expect(JSON.parse(tree.readContent('/angular.json')).projects['testProj'].architect.build.options.styles).toContain(add_normalize_1.cssImport); resetJsonConfigs(tree); tree.delete(`${sourceRoot}/styles.styl`); })); });