diff --git a/src/PackagesConfig/NugetPackage.ts b/src/PackagesConfig/NugetPackage.ts index 04b88c0..f4bfb00 100644 --- a/src/PackagesConfig/NugetPackage.ts +++ b/src/PackagesConfig/NugetPackage.ts @@ -54,7 +54,7 @@ export class NugetPackage { } const depArray: any = lodash.get(metaDataDep, 'dependency'); if (depArray) { - for (const dependency of depArray) { + for (const dependency of Array.isArray(depArray) ? depArray : [depArray]) { this._dependencies?.set(dependency.id, true); } } @@ -62,9 +62,9 @@ export class NugetPackage { // Dependencies might be grouped. const groupArray: any = lodash.get(metaDataDep, 'group'); if (groupArray) { - for (const group of groupArray) { + for (const group of Array.isArray(groupArray) ? groupArray : [groupArray]) { if (group.dependency) { - for (const dependency of group.dependency) { + for (const dependency of Array.isArray(group.dependency) ? group.dependency : [group.dependency]) { this._dependencies?.set(dependency.id, true); } } diff --git a/test/PackagesConfig.spec.ts b/test/PackagesConfig.spec.ts index b39ca6d..5e7fcac 100644 --- a/test/PackagesConfig.spec.ts +++ b/test/PackagesConfig.spec.ts @@ -1,8 +1,67 @@ import * as path from 'path'; import { PackagesExtractor } from '../src/PackagesConfig/Extractor'; import { DependencyDetails, CaseInsensitiveMap } from '../model'; +import { NugetPackage } from '../src/PackagesConfig/NugetPackage'; describe('Packages Config Tests', () => { + test('NugetPackage group.dependency handles array and single object', () => { + // Single dependency object + const nuspecSingle: string = ` + + + testpkg + 1.0.0 + + + + + + + `; + const pkgSingle: NugetPackage = new NugetPackage('testpkg', '1.0.0', nuspecSingle); + expect(pkgSingle.dependencies.has('dep1')).toBe(true); + + // Multiple dependencies array + const nuspecArray: string = ` + + + testpkg + 1.0.0 + + + + + + + + `; + const pkgArray: NugetPackage = new NugetPackage('testpkg', '1.0.0', nuspecArray); + expect(pkgArray.dependencies.has('dep1')).toBe(true); + expect(pkgArray.dependencies.has('dep2')).toBe(true); + + // Multiple groups with mixed one/multiple dependencies + const nuspecMixed: string = ` + + + testpkg + 1.0.0 + + + + + + + + + + + `; + const pkgMixed: NugetPackage = new NugetPackage('testpkg', '1.0.0', nuspecMixed); + expect(pkgMixed.dependencies.has('dep1')).toBe(true); + expect(pkgMixed.dependencies.has('dep2')).toBe(true); + expect(pkgMixed.dependencies.has('dep3')).toBe(true); + }); + const resources: string = path.join(__dirname, 'resources'); const packagesCache: string = path.join(resources, 'packagesconfig', 'packages');