Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2021-05-27 00:16:36 +0300
committerGar <gar+gh@danger.computer>2021-05-27 01:41:50 +0300
commit399ff8cbccd5198f637518ccafa86c43bab47a4a (patch)
treeb84315af1d2fa50342d0888a333a6b1bd2b68efa /test
parent96367f93f46c24494d084c8b8d34e4de9cd375da (diff)
feat(link): add workspace support
PR-URL: https://github.com/npm/cli/pull/3312 Credit: @isaacs Close: #3312 Reviewed-by: @wraithgar
Diffstat (limited to 'test')
-rw-r--r--test/lib/link.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/test/lib/link.js b/test/lib/link.js
index d3e661852..3cad0ff90 100644
--- a/test/lib/link.js
+++ b/test/lib/link.js
@@ -84,6 +84,60 @@ t.test('link to globalDir when in current working dir of pkg and no args', (t) =
})
})
+t.test('link ws to globalDir when workspace specified and no args', (t) => {
+ t.plan(2)
+
+ const testdir = t.testdir({
+ 'global-prefix': {
+ lib: {
+ node_modules: {
+ a: {
+ 'package.json': JSON.stringify({
+ name: 'a',
+ version: '1.0.0',
+ }),
+ },
+ },
+ },
+ },
+ 'test-pkg-link': {
+ 'package.json': JSON.stringify({
+ name: 'test-pkg-link',
+ version: '1.0.0',
+ workspaces: ['packages/*'],
+ }),
+ packages: {
+ a: {
+ 'package.json': JSON.stringify({
+ name: 'a',
+ version: '1.0.0',
+ }),
+ },
+ },
+ },
+ })
+ npm.globalDir = resolve(testdir, 'global-prefix', 'lib', 'node_modules')
+ npm.prefix = resolve(testdir, 'test-pkg-link')
+ npm.localPrefix = resolve(testdir, 'test-pkg-link')
+
+ reifyOutput = async () => {
+ reifyOutput = undefined
+
+ const links = await printLinks({
+ path: resolve(npm.globalDir, '..'),
+ global: true,
+ })
+
+ t.matchSnapshot(links, 'should create a global link to current pkg')
+ }
+
+ // link.workspaces = ['a']
+ // link.workspacePaths = [resolve(testdir, 'test-pkg-link/packages/a')]
+ link.execWorkspaces([], ['a'], (err) => {
+ t.error(err, 'should not error out')
+ })
+})
+
t.test('link global linked pkg to local nm when using args', (t) => {
t.plan(2)
@@ -192,6 +246,124 @@ t.test('link global linked pkg to local nm when using args', (t) => {
})
})
+t.test('link global linked pkg to local workspace using args', (t) => {
+ t.plan(2)
+
+ const testdir = t.testdir({
+ 'global-prefix': {
+ lib: {
+ node_modules: {
+ '@myscope': {
+ foo: {
+ 'package.json': JSON.stringify({
+ name: '@myscope/foo',
+ version: '1.0.0',
+ }),
+ },
+ bar: {
+ 'package.json': JSON.stringify({
+ name: '@myscope/bar',
+ version: '1.0.0',
+ }),
+ },
+ linked: t.fixture('symlink', '../../../../scoped-linked'),
+ },
+ a: {
+ 'package.json': JSON.stringify({
+ name: 'a',
+ version: '1.0.0',
+ }),
+ },
+ b: {
+ 'package.json': JSON.stringify({
+ name: 'b',
+ version: '1.0.0',
+ }),
+ },
+ 'test-pkg-link': t.fixture('symlink', '../../../test-pkg-link'),
+ },
+ },
+ },
+ 'test-pkg-link': {
+ 'package.json': JSON.stringify({
+ name: 'test-pkg-link',
+ version: '1.0.0',
+ }),
+ },
+ 'link-me-too': {
+ 'package.json': JSON.stringify({
+ name: 'link-me-too',
+ version: '1.0.0',
+ }),
+ },
+ 'scoped-linked': {
+ 'package.json': JSON.stringify({
+ name: '@myscope/linked',
+ version: '1.0.0',
+ }),
+ },
+ 'my-project': {
+ 'package.json': JSON.stringify({
+ name: 'my-project',
+ version: '1.0.0',
+ workspaces: ['packages/*'],
+ }),
+ packages: {
+ x: {
+ 'package.json': JSON.stringify({
+ name: 'x',
+ version: '1.0.0',
+ dependencies: {
+ foo: '^1.0.0',
+ },
+ }),
+ },
+ },
+ node_modules: {
+ foo: {
+ 'package.json': JSON.stringify({
+ name: 'foo',
+ version: '1.0.0',
+ }),
+ },
+ },
+ },
+ })
+ npm.globalDir = resolve(testdir, 'global-prefix', 'lib', 'node_modules')
+ npm.prefix = resolve(testdir, 'my-project')
+ npm.localPrefix = resolve(testdir, 'my-project')
+
+ const _cwd = process.cwd()
+ process.chdir(npm.prefix)
+
+ reifyOutput = async () => {
+ reifyOutput = undefined
+ process.chdir(_cwd)
+
+ const links = await printLinks({
+ path: npm.prefix,
+ })
+
+ t.matchSnapshot(links, 'should create a local symlink to global pkg')
+ }
+
+ // installs examples for:
+ // - test-pkg-link: pkg linked to globalDir from local fs
+ // - @myscope/linked: scoped pkg linked to globalDir from local fs
+ // - @myscope/bar: prev installed scoped package available in globalDir
+ // - a: prev installed package available in globalDir
+ // - file:./link-me-too: pkg that needs to be reified in globalDir first
+ link.execWorkspaces([
+ 'test-pkg-link',
+ '@myscope/linked',
+ '@myscope/bar',
+ 'a',
+ 'file:../link-me-too',
+ ], ['x'], (err) => {
+ t.error(err, 'should not error out')
+ })
+})
+
t.test('link pkg already in global space', (t) => {
t.plan(3)