/
pnpm.spec.ts
64 lines (61 loc) · 2.54 KB
/
pnpm.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { exec as _exec } from 'child_process';
import { envMock, mockExecAll } from '../../../../test/exec-util';
import { mocked } from '../../../../test/util';
import * as _env from '../../../util/exec/env';
import * as _fs from '../../../util/fs/proxies';
import type { PostUpdateConfig } from '../../types';
import * as _pnpmHelper from './pnpm';
jest.mock('child_process');
jest.mock('../../../util/exec/env');
jest.mock('../../../util/fs/proxies');
jest.mock('./node-version');
const exec: jest.Mock<typeof _exec> = _exec as any;
const env = mocked(_env);
const fs = mocked(_fs);
const pnpmHelper = mocked(_pnpmHelper);
delete process.env.NPM_CONFIG_CACHE;
describe('generateLockFile', () => {
let config: PostUpdateConfig;
beforeEach(() => {
config = { cacheDir: 'some-cache-dir', constraints: { pnpm: '^2.0.0' } };
env.getChildProcessEnv.mockReturnValue(envMock.basic);
});
it('generates lock files', async () => {
const execSnapshots = mockExecAll(exec);
fs.readFile = jest.fn(() => 'package-lock-contents') as never;
const res = await pnpmHelper.generateLockFile('some-dir', {}, config);
expect(fs.readFile).toHaveBeenCalledTimes(1);
expect(res.lockFile).toEqual('package-lock-contents');
expect(execSnapshots).toMatchSnapshot();
});
it('catches errors', async () => {
const execSnapshots = mockExecAll(exec);
fs.readFile = jest.fn(() => {
throw new Error('not found');
}) as never;
const res = await pnpmHelper.generateLockFile('some-dir', {}, config);
expect(fs.readFile).toHaveBeenCalledTimes(1);
expect(res.error).toBe(true);
expect(res.lockFile).not.toBeDefined();
expect(execSnapshots).toMatchSnapshot();
});
it('finds pnpm globally', async () => {
const execSnapshots = mockExecAll(exec);
fs.readFile = jest.fn(() => 'package-lock-contents') as never;
const res = await pnpmHelper.generateLockFile('some-dir', {}, config);
expect(fs.readFile).toHaveBeenCalledTimes(1);
expect(res.lockFile).toEqual('package-lock-contents');
expect(execSnapshots).toMatchSnapshot();
});
it('performs lock file maintenance', async () => {
const execSnapshots = mockExecAll(exec);
fs.readFile = jest.fn(() => 'package-lock-contents') as never;
const res = await pnpmHelper.generateLockFile('some-dir', {}, config, [
{ isLockFileMaintenance: true },
]);
expect(fs.readFile).toHaveBeenCalledTimes(1);
expect(fs.remove).toHaveBeenCalledTimes(1);
expect(res.lockFile).toEqual('package-lock-contents');
expect(execSnapshots).toMatchSnapshot();
});
});