2018-06-08 19:59:53 +01:00

92 lines
2.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 { UnitTestTree } from '@angular-devkit/schematics/testing';
import {
NodeDependency,
NodeDependencyType,
addPackageJsonDependency,
getPackageJsonDependency,
} from './dependencies';
describe('dependencies', () => {
describe('addDependency', () => {
let tree: UnitTestTree;
const pkgJsonPath = '/package.json';
let dependency: NodeDependency;
beforeEach(() => {
tree = new UnitTestTree(new EmptyTree());
tree.create(pkgJsonPath, '{}');
dependency = {
type: NodeDependencyType.Default,
name: 'my-pkg',
version: '1.2.3',
};
});
[
{ type: NodeDependencyType.Default, key: 'dependencies' },
{ type: NodeDependencyType.Dev, key: 'devDependencies' },
{ type: NodeDependencyType.Optional, key: 'optionalDependencies' },
{ type: NodeDependencyType.Peer, key: 'peerDependencies' },
].forEach(type => {
describe(`Type: ${type.toString()}`, () => {
beforeEach(() => {
dependency.type = type.type;
});
it('should add a dependency', () => {
addPackageJsonDependency(tree, dependency);
const pkgJson = JSON.parse(tree.readContent(pkgJsonPath));
expect(pkgJson[type.key][dependency.name]).toEqual(dependency.version);
});
it('should handle an existing dependency (update version)', () => {
addPackageJsonDependency(tree, {...dependency, version: '0.0.0'});
addPackageJsonDependency(tree, {...dependency, overwrite: true});
const pkgJson = JSON.parse(tree.readContent(pkgJsonPath));
expect(pkgJson[type.key][dependency.name]).toEqual(dependency.version);
});
});
});
it('should throw when missing package.json', () => {
expect((() => addPackageJsonDependency(new EmptyTree(), dependency))).toThrow();
});
});
describe('getDependency', () => {
let tree: UnitTestTree;
beforeEach(() => {
const pkgJsonPath = '/package.json';
const pkgJsonContent = JSON.stringify({
dependencies: {
'my-pkg': '1.2.3',
},
}, null, 2);
tree = new UnitTestTree(new EmptyTree());
tree.create(pkgJsonPath, pkgJsonContent);
});
it('should get a dependency', () => {
const dep = getPackageJsonDependency(tree, 'my-pkg') as NodeDependency;
expect(dep.type).toEqual(NodeDependencyType.Default);
expect(dep.name).toEqual('my-pkg');
expect(dep.version).toEqual('1.2.3');
});
it('should return null if dependency does not exist', () => {
const dep = getPackageJsonDependency(tree, 'missing-pkg') as NodeDependency;
expect(dep).toBeNull();
});
});
});