Skip to content

Commit 6392a2e

Browse files
committed
Add tests
1 parent efcbdb7 commit 6392a2e

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

src/test/managers/common/packageChanges.unit.test.ts

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,101 @@ suite('packageChanges', () => {
169169
assert.ok(changes.some((c: { kind: PackageChangeKind }) => c.kind === PackageChangeKind.add));
170170
assert.ok(changes.some((c: { kind: PackageChangeKind }) => c.kind === PackageChangeKind.remove));
171171
});
172+
173+
test('marks transitive packages when getDirectPackageNames is provided', async () => {
174+
const after = [
175+
{ name: 'requests', version: '2.31.0' } as Package,
176+
{ name: 'urllib3', version: '2.0.0' } as Package,
177+
{ name: 'charset-normalizer', version: '3.0.0' } as Package,
178+
];
179+
getPackagesStub.resolves(after);
180+
const getDirectPackageNamesStub = sinon.stub().resolves(new Set(['requests']));
181+
(packageManager as unknown as Record<string, unknown>).getDirectPackageNames = getDirectPackageNamesStub;
182+
const onChanges = sinon.stub();
183+
184+
await updatePackagesAndNotify(packageManager, environment, undefined, onChanges);
185+
186+
assert.strictEqual(after[0].isTransitive, false, 'requests should be direct');
187+
assert.strictEqual(after[1].isTransitive, true, 'urllib3 should be transitive');
188+
assert.strictEqual(after[2].isTransitive, true, 'charset-normalizer should be transitive');
189+
});
190+
191+
test('does not mark packages transitive when getDirectPackageNames is not implemented', async () => {
192+
const after = [
193+
{ name: 'requests', version: '2.31.0' } as Package,
194+
{ name: 'urllib3', version: '2.0.0' } as Package,
195+
];
196+
getPackagesStub.resolves(after);
197+
const onChanges = sinon.stub();
198+
199+
await updatePackagesAndNotify(packageManager, environment, undefined, onChanges);
200+
201+
assert.strictEqual(after[0].isTransitive, undefined, 'should not be set');
202+
assert.strictEqual(after[1].isTransitive, undefined, 'should not be set');
203+
});
204+
205+
test('does not mark packages transitive when getDirectPackageNames returns undefined', async () => {
206+
const after = [
207+
{ name: 'requests', version: '2.31.0' } as Package,
208+
{ name: 'urllib3', version: '2.0.0' } as Package,
209+
];
210+
getPackagesStub.resolves(after);
211+
const getDirectPackageNamesStub = sinon.stub().resolves(undefined);
212+
(packageManager as unknown as Record<string, unknown>).getDirectPackageNames = getDirectPackageNamesStub;
213+
const onChanges = sinon.stub();
214+
215+
await updatePackagesAndNotify(packageManager, environment, undefined, onChanges);
216+
217+
assert.strictEqual(after[0].isTransitive, undefined, 'should not be set');
218+
assert.strictEqual(after[1].isTransitive, undefined, 'should not be set');
219+
});
220+
221+
test('does not mark packages transitive when getDirectPackageNames returns empty set', async () => {
222+
const after = [
223+
{ name: 'requests', version: '2.31.0' } as Package,
224+
{ name: 'urllib3', version: '2.0.0' } as Package,
225+
];
226+
getPackagesStub.resolves(after);
227+
const getDirectPackageNamesStub = sinon.stub().resolves(new Set<string>());
228+
(packageManager as unknown as Record<string, unknown>).getDirectPackageNames = getDirectPackageNamesStub;
229+
const onChanges = sinon.stub();
230+
231+
await updatePackagesAndNotify(packageManager, environment, undefined, onChanges);
232+
233+
assert.strictEqual(after[0].isTransitive, undefined, 'should not be set');
234+
assert.strictEqual(after[1].isTransitive, undefined, 'should not be set');
235+
});
236+
237+
test('all packages marked direct when all are in direct set', async () => {
238+
const after = [
239+
{ name: 'requests', version: '2.31.0' } as Package,
240+
{ name: 'flask', version: '3.0.0' } as Package,
241+
];
242+
getPackagesStub.resolves(after);
243+
const getDirectPackageNamesStub = sinon.stub().resolves(new Set(['requests', 'flask']));
244+
(packageManager as unknown as Record<string, unknown>).getDirectPackageNames = getDirectPackageNamesStub;
245+
const onChanges = sinon.stub();
246+
247+
await updatePackagesAndNotify(packageManager, environment, undefined, onChanges);
248+
249+
assert.strictEqual(after[0].isTransitive, false, 'requests should be direct');
250+
assert.strictEqual(after[1].isTransitive, false, 'flask should be direct');
251+
});
252+
253+
test('all packages marked transitive when none are in direct set', async () => {
254+
const after = [
255+
{ name: 'urllib3', version: '2.0.0' } as Package,
256+
{ name: 'charset-normalizer', version: '3.0.0' } as Package,
257+
];
258+
getPackagesStub.resolves(after);
259+
const getDirectPackageNamesStub = sinon.stub().resolves(new Set(['requests']));
260+
(packageManager as unknown as Record<string, unknown>).getDirectPackageNames = getDirectPackageNamesStub;
261+
const onChanges = sinon.stub();
262+
263+
await updatePackagesAndNotify(packageManager, environment, undefined, onChanges);
264+
265+
assert.strictEqual(after[0].isTransitive, true, 'urllib3 should be transitive');
266+
assert.strictEqual(after[1].isTransitive, true, 'charset-normalizer should be transitive');
267+
});
172268
});
173269
});

0 commit comments

Comments
 (0)