-
-
Notifications
You must be signed in to change notification settings - Fork 9.1k
/
Yarn2Proxy.test.ts
135 lines (109 loc) · 4.04 KB
/
Yarn2Proxy.test.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
125
126
127
128
129
130
131
132
133
134
135
import { Yarn2Proxy } from './Yarn2Proxy';
import * as PackageJsonHelper from './PackageJsonHelper';
describe('Yarn 2 Proxy', () => {
let yarn2Proxy: Yarn2Proxy;
beforeEach(() => {
yarn2Proxy = new Yarn2Proxy();
});
it('type should be yarn2', () => {
expect(yarn2Proxy.type).toEqual('yarn2');
});
describe('initPackageJson', () => {
it('should run `yarn init`', () => {
const executeCommandSpy = jest.spyOn(yarn2Proxy, 'executeCommand').mockReturnValue('');
yarn2Proxy.initPackageJson();
expect(executeCommandSpy).toHaveBeenCalledWith('yarn', ['init']);
});
});
describe('installDependencies', () => {
it('should run `yarn`', () => {
const executeCommandSpy = jest.spyOn(yarn2Proxy, 'executeCommand').mockReturnValue('');
yarn2Proxy.installDependencies();
expect(executeCommandSpy).toHaveBeenCalledWith('yarn', [], expect.any(String));
});
});
describe('addDependencies', () => {
it('with devDep it should run `yarn install -D @storybook/addons`', () => {
const executeCommandSpy = jest.spyOn(yarn2Proxy, 'executeCommand').mockReturnValue('');
yarn2Proxy.addDependencies({ installAsDevDependencies: true }, ['@storybook/addons']);
expect(executeCommandSpy).toHaveBeenCalledWith(
'yarn',
['add', '-D', '@storybook/addons'],
expect.any(String)
);
});
});
describe('removeDependencies', () => {
it('it should run `yarn remove @storybook/addons`', () => {
const executeCommandSpy = jest.spyOn(yarn2Proxy, 'executeCommand').mockReturnValue('');
yarn2Proxy.removeDependencies({}, ['@storybook/addons']);
expect(executeCommandSpy).toHaveBeenCalledWith(
'yarn',
['remove', '@storybook/addons'],
expect.any(String)
);
});
it('skipInstall should only change package.json without running install', () => {
const executeCommandSpy = jest.spyOn(yarn2Proxy, 'executeCommand').mockReturnValue('7.0.0');
const writePackageSpy = jest
.spyOn(PackageJsonHelper, 'writePackageJson')
.mockImplementation(jest.fn);
yarn2Proxy.removeDependencies(
{
skipInstall: true,
packageJson: {
devDependencies: {
'@storybook/manager-webpack5': 'x.x.x',
'@storybook/react': 'x.x.x',
},
},
},
['@storybook/manager-webpack5']
);
expect(writePackageSpy).toHaveBeenCalledWith({
devDependencies: {
'@storybook/react': 'x.x.x',
},
});
expect(executeCommandSpy).not.toHaveBeenCalled();
});
});
describe('latestVersion', () => {
it('without constraint it returns the latest version', async () => {
const executeCommandSpy = jest
.spyOn(yarn2Proxy, 'executeCommand')
.mockReturnValue('{"name":"@storybook/addons","version":"5.3.19"}');
const version = await yarn2Proxy.latestVersion('@storybook/addons');
expect(executeCommandSpy).toHaveBeenCalledWith('yarn', [
'npm',
'info',
'@storybook/addons',
'--fields',
'version',
'--json',
]);
expect(version).toEqual('5.3.19');
});
it('with constraint it returns the latest version satisfying the constraint', async () => {
const executeCommandSpy = jest
.spyOn(yarn2Proxy, 'executeCommand')
.mockReturnValue(
'{"name":"@storybook/addons","versions":["4.25.3","5.3.19","6.0.0-beta.23"]}'
);
const version = await yarn2Proxy.latestVersion('@storybook/addons', '5.X');
expect(executeCommandSpy).toHaveBeenCalledWith('yarn', [
'npm',
'info',
'@storybook/addons',
'--fields',
'versions',
'--json',
]);
expect(version).toEqual('5.3.19');
});
it('throws an error if command output is not a valid JSON', async () => {
jest.spyOn(yarn2Proxy, 'executeCommand').mockReturnValue('NOT A JSON');
await expect(yarn2Proxy.latestVersion('@storybook/addons')).rejects.toThrow();
});
});
});