1b939fa09SCedric van Puttenimport { vol } from 'memfs';
2b939fa09SCedric van Puttenimport path from 'path';
3b939fa09SCedric van Putten
4*8d3f3824SCedric van Puttenimport { findPnpmWorkspaceRoot, PNPM_WORKSPACE_FILE } from '../nodeWorkspaces';
5b939fa09SCedric van Putten
6*8d3f3824SCedric van Puttenjest.mock('@expo/spawn-async');
7b939fa09SCedric van Puttenjest.mock('fs');
8*8d3f3824SCedric van Puttenjest.mock('path', () => jest.requireActual('path').posix); // Make tests run on Windows
9b939fa09SCedric van Putten
10*8d3f3824SCedric van Puttendescribe(findPnpmWorkspaceRoot, () => {
11*8d3f3824SCedric van Putten  const workspaceRoot = '/monorepo';
12*8d3f3824SCedric van Putten  const projectRoot = '/monorepo/packages/test';
13b939fa09SCedric van Putten
14b939fa09SCedric van Putten  afterEach(() => vol.reset());
15b939fa09SCedric van Putten
16*8d3f3824SCedric van Putten  it('resolves root from project', () => {
17b939fa09SCedric van Putten    vol.fromJSON(
18b939fa09SCedric van Putten      {
19*8d3f3824SCedric van Putten        'package.json': JSON.stringify({ private: true, name: '@acme/monorepo' }),
20*8d3f3824SCedric van Putten        [PNPM_WORKSPACE_FILE]: 'packages:\n  - packages/*',
21*8d3f3824SCedric van Putten        [path.join(projectRoot, 'package.json')]: JSON.stringify({ name: '@acme/test' }),
22b939fa09SCedric van Putten      },
23b939fa09SCedric van Putten      workspaceRoot
24b939fa09SCedric van Putten    );
25b939fa09SCedric van Putten
26*8d3f3824SCedric van Putten    expect(findPnpmWorkspaceRoot(projectRoot)).toBe(workspaceRoot);
27b939fa09SCedric van Putten  });
28b939fa09SCedric van Putten
29*8d3f3824SCedric van Putten  it('resolves root from workspace', () => {
30b939fa09SCedric van Putten    vol.fromJSON(
31b939fa09SCedric van Putten      {
32*8d3f3824SCedric van Putten        'package.json': JSON.stringify({ private: true, name: '@acme/monorepo' }),
33*8d3f3824SCedric van Putten        [PNPM_WORKSPACE_FILE]: 'packages:\n  - packages/*',
34*8d3f3824SCedric van Putten        [path.join(projectRoot, 'package.json')]: JSON.stringify({ name: '@acme/test' }),
35b939fa09SCedric van Putten      },
36b939fa09SCedric van Putten      workspaceRoot
37b939fa09SCedric van Putten    );
38b939fa09SCedric van Putten
39*8d3f3824SCedric van Putten    expect(findPnpmWorkspaceRoot(workspaceRoot)).toBe(workspaceRoot);
40b939fa09SCedric van Putten  });
41b939fa09SCedric van Putten
42*8d3f3824SCedric van Putten  it('ignores root from uncoupled project', () => {
43b939fa09SCedric van Putten    vol.fromJSON(
44b939fa09SCedric van Putten      {
45*8d3f3824SCedric van Putten        'package.json': JSON.stringify({ private: true, name: '@acme/monorepo' }),
46*8d3f3824SCedric van Putten        [PNPM_WORKSPACE_FILE]: 'packages:\n  - packages-not-included/*',
47*8d3f3824SCedric van Putten        [path.join(projectRoot, 'package.json')]: JSON.stringify({ name: '@acme/test' }),
48b939fa09SCedric van Putten      },
49b939fa09SCedric van Putten      workspaceRoot
50b939fa09SCedric van Putten    );
51b939fa09SCedric van Putten
52*8d3f3824SCedric van Putten    expect(findPnpmWorkspaceRoot(projectRoot)).toBeNull();
53b939fa09SCedric van Putten  });
54b939fa09SCedric van Putten});
55