From 7a6ca3b56dd1b2739d8f10537894cff6eca27843 Mon Sep 17 00:00:00 2001 From: Sam De Maeyer Date: Mon, 20 Mar 2017 14:49:30 +0000 Subject: [PATCH 1/2] switch the package managers name printed out when yarn.lock file is present --- lib/dependency-checker.js | 11 +- lib/reporter.js | 2 + tests/fixtures/project-yarn-check/bower.json | 5 + .../node_modules/ember-cli/package.json | 4 + tests/fixtures/project-yarn-check/yarn.lock | 0 tests/unit/dependency-checker-yarn-test.js | 103 ++++++++++++++++++ 6 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/project-yarn-check/bower.json create mode 100644 tests/fixtures/project-yarn-check/node_modules/ember-cli/package.json create mode 100644 tests/fixtures/project-yarn-check/yarn.lock create mode 100644 tests/unit/dependency-checker-yarn-test.js diff --git a/lib/dependency-checker.js b/lib/dependency-checker.js index 2a60300..f743be9 100644 --- a/lib/dependency-checker.js +++ b/lib/dependency-checker.js @@ -46,8 +46,15 @@ EmberCLIDependencyChecker.prototype.checkDependencies = function() { var unsatisfiedDeps = filteredDeps.filter(isNotSymlinked); var symlinkedDeps = filteredDeps.filter(isSymlinked); - this.reporter.reportUnsatisfiedSymlinkedPackages('npm', symlinkedDeps); - this.reporter.unsatisifedPackages('npm', unsatisfiedDeps); + var yarnPath = path.join(this.project.root, 'yarn.lock'); + + var packageManagerName = 'npm'; + if (fileExists(yarnPath)) { + packageManagerName = 'yarn'; + } + + this.reporter.reportUnsatisfiedSymlinkedPackages(packageManagerName, symlinkedDeps); + this.reporter.unsatisifedPackages(packageManagerName, unsatisfiedDeps); if (unsatisfiedDeps.length === 0) { var shrinkWrapDeps = this.readShrinkwrapDeps(); diff --git a/lib/reporter.js b/lib/reporter.js index 77b5e08..a0944a8 100644 --- a/lib/reporter.js +++ b/lib/reporter.js @@ -4,6 +4,8 @@ function installCommand(type) { switch (type) { case 'npm': return 'npm install'; + case 'yarn': + return 'yarn'; case 'npm-shrinkwrap': return 'rm -rf node_modules/ && npm install'; case 'bower': diff --git a/tests/fixtures/project-yarn-check/bower.json b/tests/fixtures/project-yarn-check/bower.json new file mode 100644 index 0000000..535fc2b --- /dev/null +++ b/tests/fixtures/project-yarn-check/bower.json @@ -0,0 +1,5 @@ +{ + "name": "project-npm-check", + "dependencies": { + } +} diff --git a/tests/fixtures/project-yarn-check/node_modules/ember-cli/package.json b/tests/fixtures/project-yarn-check/node_modules/ember-cli/package.json new file mode 100644 index 0000000..4e97880 --- /dev/null +++ b/tests/fixtures/project-yarn-check/node_modules/ember-cli/package.json @@ -0,0 +1,4 @@ +{ + "name": "ember-cli", + "version": "1.2.3" +} diff --git a/tests/fixtures/project-yarn-check/yarn.lock b/tests/fixtures/project-yarn-check/yarn.lock new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/dependency-checker-yarn-test.js b/tests/unit/dependency-checker-yarn-test.js new file mode 100644 index 0000000..abcdd71 --- /dev/null +++ b/tests/unit/dependency-checker-yarn-test.js @@ -0,0 +1,103 @@ +'use strict'; + +var assertError = require('../helpers/assert-error'); +var assertNoError = require('../helpers/assert-no-error'); +var DependencyChecker = require('../../lib/dependency-checker'); +var projectBuilder = require('../helpers/project-builder'); + +describe('EmberCLIDependencyChecker', function() { + beforeEach(function(){ + DependencyChecker.setAlreadyChecked(false); + }); + + function createProject(dependencies, options) { + options = options || {}; + options.root = options.root || 'tests/fixtures/project-yarn-check'; + options.dependencies = projectBuilder.buildDependencies(dependencies); + return projectBuilder.build(options); + } + + var assertNpmError = function(project) { + return assertError(project, 'yarn'); + }; + + var assertNoNpmError = function(project) { + return assertNoError(project, 'yarn'); + }; + + describe('reports unsatisfied NPM dependencies', function() { + it('when the specified package is not installed', function() { + var project = createProject({ 'foo': '0.1.1', 'ember-cli': '1.2.3' }); + assertNpmError(project); + }); + + it('when the installed package does not match the version specified', function() { + var project = createProject({ 'ember-cli': '0.1.1' }); + assertNpmError(project); + }); + + it('when the installed package does not satisfy the version range specified', function() { + var project = createProject({ 'ember-cli': '>1.3.2 <=2.3.4' }); + assertNpmError(project); + }); + + it('when the installed package is not compatible with the version specified', function() { + var project = createProject({ 'ember-cli': '0.2.x' }); + assertNpmError(project); + }); + + it('when the version specified is a Git repo with a semver tag and there is a version mismatch', function() { + var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#v0.1.0' }); + assertNpmError(project); + }); + }); + + describe('does not report satisfied NPM dependencies', function() { + it('when the installed package matches the version specified', function() { + var project = createProject({ 'ember-cli': '1.2.3' }); + assertNoNpmError(project); + }); + + it('when the installed package satisfies the version range specified', function() { + var project = createProject({ 'ember-cli': '>1.0.0' }); + assertNoNpmError(project); + }); + + it('when the installed package is compatible with the version specified', function() { + var project = createProject({ 'ember-cli': '^1.2.0' }); + assertNoNpmError(project); + }); + + it('when the version specified is a URL', function() { + var project = createProject({ 'ember-cli': 'http://ember-cli.com/ember-cli.tar.gz' }); + assertNoNpmError(project); + }); + + it('when the version specified is a Git repo with a non-semver tag', function() { + var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#master' }); + assertNoNpmError(project); + }); + + it('when the version specified is a local path', function() { + var project = createProject({ 'ember-cli': '~/projects/ember-cli' }); + assertNoNpmError(project); + }); + + it('does NOT error with a * dependency', function() { + var project = createProject({ 'ember-cli': '*' }); + assertNoNpmError(project); + }); + }); + + describe('sibling node_modules/ directory', function() { + it('checks depdencies', function() { + var project = createProject({ + 'ember-cli': '*' + }, { + root: 'tests/fixtures/project-npm-sibling-node-modules-check/app', + nodeModulesPath: 'tests/fixtures/project-npm-sibling-node-modules-check/node_modules', + }); + assertNoNpmError(project); + }); + }); +}); From 47a231a7aa8b98b711e7886d41c7a220bc6c08fc Mon Sep 17 00:00:00 2001 From: Sam De Maeyer Date: Mon, 20 Mar 2017 15:05:36 +0000 Subject: [PATCH 2/2] Refactor tests --- tests/fixtures/project-yarn-check/bower.json | 2 +- .../app/bower.json | 5 + .../node_modules/ember-cli/package.json | 4 + tests/unit/dependency-checker-npm-test.js | 103 ----------------- ...dependency-checker-package-manager-test.js | 108 ++++++++++++++++++ tests/unit/dependency-checker-yarn-test.js | 103 ----------------- 6 files changed, 118 insertions(+), 207 deletions(-) create mode 100644 tests/fixtures/project-yarn-sibling-node-modules-check/app/bower.json create mode 100644 tests/fixtures/project-yarn-sibling-node-modules-check/node_modules/ember-cli/package.json delete mode 100644 tests/unit/dependency-checker-npm-test.js create mode 100644 tests/unit/dependency-checker-package-manager-test.js delete mode 100644 tests/unit/dependency-checker-yarn-test.js diff --git a/tests/fixtures/project-yarn-check/bower.json b/tests/fixtures/project-yarn-check/bower.json index 535fc2b..a4f397f 100644 --- a/tests/fixtures/project-yarn-check/bower.json +++ b/tests/fixtures/project-yarn-check/bower.json @@ -1,5 +1,5 @@ { - "name": "project-npm-check", + "name": "project-yarn-check", "dependencies": { } } diff --git a/tests/fixtures/project-yarn-sibling-node-modules-check/app/bower.json b/tests/fixtures/project-yarn-sibling-node-modules-check/app/bower.json new file mode 100644 index 0000000..a4f397f --- /dev/null +++ b/tests/fixtures/project-yarn-sibling-node-modules-check/app/bower.json @@ -0,0 +1,5 @@ +{ + "name": "project-yarn-check", + "dependencies": { + } +} diff --git a/tests/fixtures/project-yarn-sibling-node-modules-check/node_modules/ember-cli/package.json b/tests/fixtures/project-yarn-sibling-node-modules-check/node_modules/ember-cli/package.json new file mode 100644 index 0000000..4e97880 --- /dev/null +++ b/tests/fixtures/project-yarn-sibling-node-modules-check/node_modules/ember-cli/package.json @@ -0,0 +1,4 @@ +{ + "name": "ember-cli", + "version": "1.2.3" +} diff --git a/tests/unit/dependency-checker-npm-test.js b/tests/unit/dependency-checker-npm-test.js deleted file mode 100644 index 6c8a5be..0000000 --- a/tests/unit/dependency-checker-npm-test.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; - -var assertError = require('../helpers/assert-error'); -var assertNoError = require('../helpers/assert-no-error'); -var DependencyChecker = require('../../lib/dependency-checker'); -var projectBuilder = require('../helpers/project-builder'); - -describe('EmberCLIDependencyChecker', function() { - beforeEach(function(){ - DependencyChecker.setAlreadyChecked(false); - }); - - function createProject(dependencies, options) { - options = options || {}; - options.root = options.root || 'tests/fixtures/project-npm-check'; - options.dependencies = projectBuilder.buildDependencies(dependencies); - return projectBuilder.build(options); - } - - var assertNpmError = function(project) { - return assertError(project, 'npm'); - }; - - var assertNoNpmError = function(project) { - return assertNoError(project, 'npm'); - }; - - describe('reports unsatisfied NPM dependencies', function() { - it('when the specified package is not installed', function() { - var project = createProject({ 'foo': '0.1.1', 'ember-cli': '1.2.3' }); - assertNpmError(project); - }); - - it('when the installed package does not match the version specified', function() { - var project = createProject({ 'ember-cli': '0.1.1' }); - assertNpmError(project); - }); - - it('when the installed package does not satisfy the version range specified', function() { - var project = createProject({ 'ember-cli': '>1.3.2 <=2.3.4' }); - assertNpmError(project); - }); - - it('when the installed package is not compatible with the version specified', function() { - var project = createProject({ 'ember-cli': '0.2.x' }); - assertNpmError(project); - }); - - it('when the version specified is a Git repo with a semver tag and there is a version mismatch', function() { - var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#v0.1.0' }); - assertNpmError(project); - }); - }); - - describe('does not report satisfied NPM dependencies', function() { - it('when the installed package matches the version specified', function() { - var project = createProject({ 'ember-cli': '1.2.3' }); - assertNoNpmError(project); - }); - - it('when the installed package satisfies the version range specified', function() { - var project = createProject({ 'ember-cli': '>1.0.0' }); - assertNoNpmError(project); - }); - - it('when the installed package is compatible with the version specified', function() { - var project = createProject({ 'ember-cli': '^1.2.0' }); - assertNoNpmError(project); - }); - - it('when the version specified is a URL', function() { - var project = createProject({ 'ember-cli': 'http://ember-cli.com/ember-cli.tar.gz' }); - assertNoNpmError(project); - }); - - it('when the version specified is a Git repo with a non-semver tag', function() { - var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#master' }); - assertNoNpmError(project); - }); - - it('when the version specified is a local path', function() { - var project = createProject({ 'ember-cli': '~/projects/ember-cli' }); - assertNoNpmError(project); - }); - - it('does NOT error with a * dependency', function() { - var project = createProject({ 'ember-cli': '*' }); - assertNoNpmError(project); - }); - }); - - describe('sibling node_modules/ directory', function() { - it('checks depdencies', function() { - var project = createProject({ - 'ember-cli': '*' - }, { - root: 'tests/fixtures/project-npm-sibling-node-modules-check/app', - nodeModulesPath: 'tests/fixtures/project-npm-sibling-node-modules-check/node_modules', - }); - assertNoNpmError(project); - }); - }); -}); diff --git a/tests/unit/dependency-checker-package-manager-test.js b/tests/unit/dependency-checker-package-manager-test.js new file mode 100644 index 0000000..c9eb851 --- /dev/null +++ b/tests/unit/dependency-checker-package-manager-test.js @@ -0,0 +1,108 @@ +'use strict'; + +var assertError = require('../helpers/assert-error'); +var assertNoError = require('../helpers/assert-no-error'); +var DependencyChecker = require('../../lib/dependency-checker'); +var projectBuilder = require('../helpers/project-builder'); + +describe('EmberCLIDependencyChecker', function() { + beforeEach(function(){ + DependencyChecker.setAlreadyChecked(false); + }); + + packageManagerTest('yarn'); + packageManagerTest('npm'); + + function packageManagerTest(packageManagerName) { + function createProject(dependencies, options) { + options = options || {}; + options.root = options.root || 'tests/fixtures/project-' + packageManagerName + '-check'; + options.dependencies = projectBuilder.buildDependencies(dependencies); + return projectBuilder.build(options); + } + + var assertPackageManagerError = function(project) { + return assertError(project, packageManagerName); + }; + + var assertNoPackageManagerError = function(project) { + return assertNoError(project, packageManagerName); + }; + + describe('reports unsatisfied ' + packageManagerName + ' dependencies', function() { + it('when the specified package is not installed', function() { + var project = createProject({ 'foo': '0.1.1', 'ember-cli': '1.2.3' }); + assertPackageManagerError(project); + }); + + it('when the installed package does not match the version specified', function() { + var project = createProject({ 'ember-cli': '0.1.1' }); + assertPackageManagerError(project); + }); + + it('when the installed package does not satisfy the version range specified', function() { + var project = createProject({ 'ember-cli': '>1.3.2 <=2.3.4' }); + assertPackageManagerError(project); + }); + + it('when the installed package is not compatible with the version specified', function() { + var project = createProject({ 'ember-cli': '0.2.x' }); + assertPackageManagerError(project); + }); + + it('when the version specified is a Git repo with a semver tag and there is a version mismatch', function() { + var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#v0.1.0' }); + assertPackageManagerError(project); + }); + }); + + describe('does not report satisfied ' + packageManagerName + ' dependencies', function() { + it('when the installed package matches the version specified', function() { + var project = createProject({ 'ember-cli': '1.2.3' }); + assertNoPackageManagerError(project); + }); + + it('when the installed package satisfies the version range specified', function() { + var project = createProject({ 'ember-cli': '>1.0.0' }); + assertNoPackageManagerError(project); + }); + + it('when the installed package is compatible with the version specified', function() { + var project = createProject({ 'ember-cli': '^1.2.0' }); + assertNoPackageManagerError(project); + }); + + it('when the version specified is a URL', function() { + var project = createProject({ 'ember-cli': 'http://ember-cli.com/ember-cli.tar.gz' }); + assertNoPackageManagerError(project); + }); + + it('when the version specified is a Git repo with a non-semver tag', function() { + var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#master' }); + assertNoPackageManagerError(project); + }); + + it('when the version specified is a local path', function() { + var project = createProject({ 'ember-cli': '~/projects/ember-cli' }); + assertNoPackageManagerError(project); + }); + + it('does NOT error with a * dependency', function() { + var project = createProject({ 'ember-cli': '*' }); + assertNoPackageManagerError(project); + }); + }); + + describe('sibling node_modules/ directory', function() { + it('checks depdencies', function() { + var project = createProject({ + 'ember-cli': '*' + }, { + root: 'tests/fixtures/project-' + packageManagerName + '-sibling-node-modules-check/app', + nodeModulesPath: 'tests/fixtures/project-' + packageManagerName + '-sibling-node-modules-check/node_modules', + }); + assertNoPackageManagerError(project); + }); + }); + } +}); diff --git a/tests/unit/dependency-checker-yarn-test.js b/tests/unit/dependency-checker-yarn-test.js deleted file mode 100644 index abcdd71..0000000 --- a/tests/unit/dependency-checker-yarn-test.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; - -var assertError = require('../helpers/assert-error'); -var assertNoError = require('../helpers/assert-no-error'); -var DependencyChecker = require('../../lib/dependency-checker'); -var projectBuilder = require('../helpers/project-builder'); - -describe('EmberCLIDependencyChecker', function() { - beforeEach(function(){ - DependencyChecker.setAlreadyChecked(false); - }); - - function createProject(dependencies, options) { - options = options || {}; - options.root = options.root || 'tests/fixtures/project-yarn-check'; - options.dependencies = projectBuilder.buildDependencies(dependencies); - return projectBuilder.build(options); - } - - var assertNpmError = function(project) { - return assertError(project, 'yarn'); - }; - - var assertNoNpmError = function(project) { - return assertNoError(project, 'yarn'); - }; - - describe('reports unsatisfied NPM dependencies', function() { - it('when the specified package is not installed', function() { - var project = createProject({ 'foo': '0.1.1', 'ember-cli': '1.2.3' }); - assertNpmError(project); - }); - - it('when the installed package does not match the version specified', function() { - var project = createProject({ 'ember-cli': '0.1.1' }); - assertNpmError(project); - }); - - it('when the installed package does not satisfy the version range specified', function() { - var project = createProject({ 'ember-cli': '>1.3.2 <=2.3.4' }); - assertNpmError(project); - }); - - it('when the installed package is not compatible with the version specified', function() { - var project = createProject({ 'ember-cli': '0.2.x' }); - assertNpmError(project); - }); - - it('when the version specified is a Git repo with a semver tag and there is a version mismatch', function() { - var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#v0.1.0' }); - assertNpmError(project); - }); - }); - - describe('does not report satisfied NPM dependencies', function() { - it('when the installed package matches the version specified', function() { - var project = createProject({ 'ember-cli': '1.2.3' }); - assertNoNpmError(project); - }); - - it('when the installed package satisfies the version range specified', function() { - var project = createProject({ 'ember-cli': '>1.0.0' }); - assertNoNpmError(project); - }); - - it('when the installed package is compatible with the version specified', function() { - var project = createProject({ 'ember-cli': '^1.2.0' }); - assertNoNpmError(project); - }); - - it('when the version specified is a URL', function() { - var project = createProject({ 'ember-cli': 'http://ember-cli.com/ember-cli.tar.gz' }); - assertNoNpmError(project); - }); - - it('when the version specified is a Git repo with a non-semver tag', function() { - var project = createProject({ 'ember-cli': 'git://github.com/stefanpenner/ember-cli.git#master' }); - assertNoNpmError(project); - }); - - it('when the version specified is a local path', function() { - var project = createProject({ 'ember-cli': '~/projects/ember-cli' }); - assertNoNpmError(project); - }); - - it('does NOT error with a * dependency', function() { - var project = createProject({ 'ember-cli': '*' }); - assertNoNpmError(project); - }); - }); - - describe('sibling node_modules/ directory', function() { - it('checks depdencies', function() { - var project = createProject({ - 'ember-cli': '*' - }, { - root: 'tests/fixtures/project-npm-sibling-node-modules-check/app', - nodeModulesPath: 'tests/fixtures/project-npm-sibling-node-modules-check/node_modules', - }); - assertNoNpmError(project); - }); - }); -});