/
pnpm.package-manager.spec.ts
124 lines (118 loc) 路 4.67 KB
/
pnpm.package-manager.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import { join } from 'path';
import {
PnpmPackageManager,
PackageManagerCommands,
} from '../../../lib/package-managers';
import { PnpmRunner } from '../../../lib/runners/pnpm.runner';
jest.mock('../../../lib/runners/pnpm.runner');
describe('NpmPackageManager', () => {
let packageManager: PnpmPackageManager;
beforeEach(() => {
(PnpmRunner as any).mockClear();
(PnpmRunner as any).mockImplementation(() => {
return {
run: (): Promise<void> => Promise.resolve(),
};
});
packageManager = new PnpmPackageManager();
});
it('should be created', () => {
expect(packageManager).toBeInstanceOf(PnpmPackageManager);
});
it('should have the correct cli commands', () => {
const expectedValues: PackageManagerCommands = {
install: 'install',
add: 'install',
update: 'update',
remove: 'uninstall',
saveFlag: '--save',
saveDevFlag: '--save-dev',
};
expect(packageManager.cli).toMatchObject(expectedValues);
});
describe('install', () => {
it('should use the proper command for installing', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dirName = '/tmp';
const testDir = join(process.cwd(), dirName);
packageManager.install(dirName, 'pnpm');
expect(spy).toBeCalledWith('install --silent', true, testDir);
});
});
describe('addProduction', () => {
it('should use the proper command for adding production dependencies', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dependencies = ['@nestjs/common', '@nestjs/core'];
const tag = '5.0.0';
const command = `install --save ${dependencies
.map((dependency) => `${dependency}@${tag}`)
.join(' ')}`;
packageManager.addProduction(dependencies, tag);
expect(spy).toBeCalledWith(command, true);
});
});
describe('addDevelopment', () => {
it('should use the proper command for adding development dependencies', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dependencies = ['@nestjs/common', '@nestjs/core'];
const tag = '5.0.0';
const command = `install --save-dev ${dependencies
.map((dependency) => `${dependency}@${tag}`)
.join(' ')}`;
packageManager.addDevelopment(dependencies, tag);
expect(spy).toBeCalledWith(command, true);
});
});
describe('updateProduction', () => {
it('should use the proper command for updating production dependencies', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dependencies = ['@nestjs/common', '@nestjs/core'];
const command = `update ${dependencies.join(' ')}`;
packageManager.updateProduction(dependencies);
expect(spy).toBeCalledWith(command, true);
});
});
describe('updateDevelopment', () => {
it('should use the proper command for updating development dependencies', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dependencies = ['@nestjs/common', '@nestjs/core'];
const command = `update ${dependencies.join(' ')}`;
packageManager.updateDevelopment(dependencies);
expect(spy).toBeCalledWith(command, true);
});
});
describe('upgradeProduction', () => {
it('should use the proper command for upgrading production dependencies', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dependencies = ['@nestjs/common', '@nestjs/core'];
const tag = '5.0.0';
const uninstallCommand = `uninstall --save ${dependencies.join(' ')}`;
const installCommand = `install --save ${dependencies
.map((dependency) => `${dependency}@${tag}`)
.join(' ')}`;
return packageManager.upgradeProduction(dependencies, tag).then(() => {
expect(spy.mock.calls).toEqual([
[uninstallCommand, true],
[installCommand, true],
]);
});
});
});
describe('upgradeDevelopment', () => {
it('should use the proper command for upgrading production dependencies', () => {
const spy = jest.spyOn((packageManager as any).runner, 'run');
const dependencies = ['@nestjs/common', '@nestjs/core'];
const tag = '5.0.0';
const uninstallCommand = `uninstall --save-dev ${dependencies.join(' ')}`;
const installCommand = `install --save-dev ${dependencies
.map((dependency) => `${dependency}@${tag}`)
.join(' ')}`;
return packageManager.upgradeDevelopment(dependencies, tag).then(() => {
expect(spy.mock.calls).toEqual([
[uninstallCommand, true],
[installCommand, true],
]);
});
});
});
});