From ce260fdaaa1d98711c87326f3c7b39369bc43b97 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Thu, 24 Aug 2023 17:38:53 +0200 Subject: [PATCH] [INTERNAL] Add tests for NodePackageDependencies changes, adjust error message --- .../providers/NodePackageDependencies.js | 4 +- .../providers/NodePackageDependencies.js | 54 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 test/lib/graph/providers/NodePackageDependencies.js diff --git a/lib/graph/providers/NodePackageDependencies.js b/lib/graph/providers/NodePackageDependencies.js index befb8c897..e08314ba6 100644 --- a/lib/graph/providers/NodePackageDependencies.js +++ b/lib/graph/providers/NodePackageDependencies.js @@ -49,10 +49,10 @@ class NodePackageDependencies { const modulePath = path.dirname(rootPkg.path); if (!rootPkg.packageJson.name) { - throw new Error(`Missing 'name' attribute in package.json at ${modulePath}`); + throw new Error(`Missing or empty 'name' attribute in package.json at ${modulePath}`); } if (!rootPkg.packageJson.version) { - throw new Error(`Missing 'version' attribute in package.json at ${modulePath}`); + throw new Error(`Missing or empty 'version' attribute in package.json at ${modulePath}`); } return { diff --git a/test/lib/graph/providers/NodePackageDependencies.js b/test/lib/graph/providers/NodePackageDependencies.js new file mode 100644 index 000000000..3965c569d --- /dev/null +++ b/test/lib/graph/providers/NodePackageDependencies.js @@ -0,0 +1,54 @@ +import test from "ava"; +import sinonGlobal from "sinon"; +import esmock from "esmock"; + +test.beforeEach(async (t) => { + const sinon = t.context.sinon = sinonGlobal.createSandbox(); + + t.context.readPackageUp = sinon.stub(); + + t.context.NodePackageDependencies = await esmock("../../../../lib/graph/providers/NodePackageDependencies.js", { + "read-pkg-up": { + readPackageUp: t.context.readPackageUp + } + }); +}); + +test.afterEach.always((t) => { + t.context.sinon.restore(); +}); + +test("getRootNode should reject with error when 'name' is empty/missing in package.json", async (t) => { + const {NodePackageDependencies, readPackageUp} = t.context; + + const resolver = new NodePackageDependencies({cwd: "cwd"}); + + readPackageUp.resolves({ + path: "/path/to/root/package.json", + packageJson: { + name: "" + } + }); + + await t.throwsAsync(() => resolver.getRootNode(), { + message: "Missing or empty 'name' attribute in package.json at /path/to/root" + }); +}); + +test("getRootNode should reject with error when 'version' is empty/missing in package.json", async (t) => { + const {NodePackageDependencies, readPackageUp} = t.context; + + const resolver = new NodePackageDependencies({cwd: "cwd"}); + + readPackageUp.resolves({ + path: "/path/to/root/package.json", + packageJson: { + name: "test-package-name", + version: "" + } + }); + + await t.throwsAsync(() => resolver.getRootNode(), { + message: "Missing or empty 'version' attribute in package.json at /path/to/root" + }); +});