-
Notifications
You must be signed in to change notification settings - Fork 534
/
cli-monitor.acceptance.test.ts
149 lines (136 loc) · 4.39 KB
/
cli-monitor.acceptance.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import * as tap from 'tap';
import * as fs from 'fs';
import * as cli from '../../../src/cli/commands';
import { fakeServer } from '../fake-server';
import { getVersion } from '../../../src/lib/version';
const { test, only } = tap;
(tap as any).runOnly = false; // <- for debug. set to true, and replace a test to only(..)
const port = (process.env.PORT = process.env.SNYK_PORT = '12345');
const BASE_API = '/api/v1';
process.env.SNYK_API = 'http://localhost:' + port + BASE_API;
process.env.SNYK_HOST = 'http://localhost:' + port;
process.env.LOG_LEVEL = '0';
const apiKey = '123456789';
let oldkey;
let oldendpoint;
let versionNumber;
const server = fakeServer(BASE_API, apiKey);
const before = tap.runOnly ? only : test;
const after = tap.runOnly ? only : test;
// Should be after `process.env` setup.
import * as plugins from '../../../src/lib/plugins/index';
import { chdirWorkspaces } from '../workspace-helper';
// @later: remove this config stuff.
// Was copied straight from ../src/cli-server.js
before('setup', async (t) => {
versionNumber = await getVersion();
t.plan(3);
let key = await cli.config('get', 'api');
oldkey = key;
t.pass('existing user config captured');
key = await cli.config('get', 'endpoint');
oldendpoint = key;
t.pass('existing user endpoint captured');
await new Promise((resolve) => {
server.listen(port, resolve);
});
t.pass('started demo server');
t.end();
});
// @later: remove this config stuff.
// Was copied straight from ../src/cli-server.js
before('prime config', async (t) => {
await cli.config('set', 'api=' + apiKey);
t.pass('api token set');
await cli.config('unset', 'endpoint');
t.pass('endpoint removed');
t.end();
});
test('`wizard` for supported package managers', async (t) => {
chdirWorkspaces('npm-package-no-vulns');
// TODO(boost): confirm that monitor is called with correct params
// this currently fails as fake-server is not called?
// const monitorSpy = sinon.stub(snykMonitor, 'monitor').callThrough();
const result = await cli.wizard({ file: 'package-lock.json' });
t.contains(
result,
'You can see a snapshot of your dependencies here',
'wizard saves snapshot',
);
// t.equal(monitorSpy.calledOnceWith(
// 'npm-package-no-vulns',
// {} as MonitorMeta,
// [] as ScannedProject,
// {} as Options,
// {} as PluginMetadata,
// ), true);
try {
fs.unlinkSync('./.snyk');
} catch (err) {
throw new Error(
'Failed to delete test/acceptance/workspaces/npm-package-no-vulns/.snyk',
);
}
});
test('`wizard` for unsupported package managers', async (t) => {
chdirWorkspaces();
async function testUnsupported(data) {
try {
await cli.wizard({ file: data.file });
t.fail('should fail');
} catch (e) {
return e;
}
}
const cases = [
{ file: 'ruby-app/Gemfile.lock', type: 'RubyGems' },
{ file: 'maven-app/pom.xml', type: 'Maven' },
{ file: 'pip-app/requirements.txt', type: 'pip' },
{ file: 'sbt-app/build.sbt', type: 'SBT' },
{ file: 'gradle-app/build.gradle', type: 'Gradle' },
{ file: 'gradle-kotlin-dsl-app/build.gradle.kts', type: 'Gradle' },
{ file: 'golang-gomodules/go.mod', type: 'Go Modules' },
{ file: 'golang-app/Gopkg.lock', type: 'dep (Go)' },
{ file: 'golang-app/vendor/vendor.json', type: 'govendor' },
{ file: 'composer-app/composer.lock', type: 'Composer' },
{ file: 'cocoapods-app/Podfile.lock', type: 'CocoaPods' },
];
const results = await Promise.all(cases.map(testUnsupported));
results.map((result, i) => {
const type = cases[i].type;
t.equal(
result,
'Snyk wizard for ' + type + ' projects is not currently supported',
type,
);
});
});
// @later: try and remove this config stuff
// Was copied straight from ../src/cli-server.js
after('teardown', async (t) => {
t.plan(4);
delete process.env.SNYK_API;
delete process.env.SNYK_HOST;
delete process.env.SNYK_PORT;
t.notOk(process.env.SNYK_PORT, 'fake env values cleared');
await new Promise((resolve) => {
server.close(resolve);
});
t.pass('server shutdown');
let key = 'set';
let value = 'api=' + oldkey;
if (!oldkey) {
key = 'unset';
value = 'api';
}
await cli.config(key, value);
t.pass('user config restored');
if (oldendpoint) {
await cli.config('endpoint', oldendpoint);
t.pass('user endpoint restored');
t.end();
} else {
t.pass('no endpoint');
t.end();
}
});