diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml index 172fbd7..650a5af 100644 --- a/.github/workflows/automerge.yml +++ b/.github/workflows/automerge.yml @@ -1,4 +1,5 @@ -name: "Automerge" +name: Automerge + on: workflow_run: workflows: diff --git a/CHANGELOG.md b/CHANGELOG.md index 1927747..3bd176b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +## [1.9.1] - 2021-12-04 + +### Added + +### Changed + +- Add support to `NODE_PATH` on `isPackageInstalled` + +### Fixed + +### Removed + ## [1.9.0] - 2021-11-18 ### Added diff --git a/jest.config.js b/jest.config.js index 1390ee2..7c7be42 100644 --- a/jest.config.js +++ b/jest.config.js @@ -12,7 +12,6 @@ module.exports = { "**/*.ts", "!./index.ts", "!./lib/get-root-path/index.ts", - "!./lib/is-package-installed/index.ts", ], coverageDirectory: "../coverage", testEnvironment: "node", diff --git a/package.json b/package.json index 18af19e..c0ef183 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@techmmunity/utils", - "version": "1.9.0", + "version": "1.9.1", "main": "index.js", "types": "index.d.ts", "license": "Apache-2.0", diff --git a/src/lib/is-package-installed/index.ts b/src/lib/is-package-installed/index.ts index ad37244..a15351c 100644 --- a/src/lib/is-package-installed/index.ts +++ b/src/lib/is-package-installed/index.ts @@ -11,5 +11,11 @@ import { getRootPath } from "../get-root-path"; export const isPackageInstalled = (packageName: string) => { const { existsSync } = require("fs"); - return existsSync(getRootPath(`node_modules/${packageName}`)); + const pathsToTry = [ + getRootPath(`node_modules/${packageName}`), + process.env.NODE_PATH && + getRootPath(`${process.env.NODE_PATH}/${packageName}`), + ].filter(Boolean); + + return pathsToTry.some(path => existsSync(path)); }; diff --git a/src/tests/is-package-installed.spec.ts b/src/tests/is-package-installed.spec.ts index d09659f..3ccd251 100644 --- a/src/tests/is-package-installed.spec.ts +++ b/src/tests/is-package-installed.spec.ts @@ -1,5 +1,65 @@ +/* eslint-disable sonarjs/no-identical-functions */ + +import { isPackageInstalled } from ".."; + describe("isPackageInstalled", () => { - it.todo( - "it uses only node features and other functions, so this cannot be truly tested", - ); + describe("With normal package", () => { + it("should return true if package exists", () => { + let result: any; + + try { + result = isPackageInstalled("jest"); + } catch (err: any) { + result = err; + } + + expect(result).toBe(true); + }); + + it("should return false if package doesn't exists", () => { + let result: any; + + try { + result = isPackageInstalled("foo"); + } catch (err: any) { + result = err; + } + + expect(result).toBe(false); + }); + }); + + describe("With NODE_PATH", () => { + beforeAll(() => { + process.env.NODE_PATH = "src"; + }); + + afterAll(() => { + process.env.NODE_PATH = undefined; + }); + + it("should return true if package exists", () => { + let result: any; + + try { + result = isPackageInstalled("lib"); + } catch (err: any) { + result = err; + } + + expect(result).toBe(true); + }); + + it("should return false if package doesn't exists", () => { + let result: any; + + try { + result = isPackageInstalled("foo"); + } catch (err: any) { + result = err; + } + + expect(result).toBe(false); + }); + }); });