Skip to content

Commit b1198a6

Browse files
Failing test showing package dependency in range does not work if more than one package references
1 parent ed8fd7d commit b1198a6

File tree

1 file changed

+55
-2
lines changed

1 file changed

+55
-2
lines changed

CycloneDX.Tests/ProgramTests.cs

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,17 @@
1818
using System;
1919
using System.Collections.Generic;
2020
using System.IO;
21+
using System.IO.Abstractions;
2122
using System.IO.Abstractions.TestingHelpers;
23+
using System.Runtime.Serialization.Formatters;
24+
using System.Security.Cryptography;
2225
using System.Threading.Tasks;
2326
using CycloneDX.Interfaces;
2427
using CycloneDX.Models;
28+
using CycloneDX.Services;
2529
using Moq;
2630
using Xunit;
31+
using static CycloneDX.Models.Component;
2732
using XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;
2833

2934
namespace CycloneDX.Tests
@@ -75,7 +80,7 @@ public async Task CallingCycloneDX_WithOutputFilename_CreatesOutputFilename()
7580
.Setup(s => s.GetSolutionDotnetDependencys(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<string>(), It.IsAny<string>()))
7681
.ReturnsAsync(new HashSet<DotnetDependency>());
7782

78-
Runner runner = new Runner(fileSystem: mockFileSystem, null, null, null, null, null, solutionFileService: mockSolutionFileService.Object, null);
83+
Runner runner = new Runner(fileSystem: mockFileSystem, null, null, null, null, null, solutionFileService: mockSolutionFileService.Object, null);
7984

8085
RunOptions runOptions = new RunOptions
8186
{
@@ -128,7 +133,55 @@ public async Task CallingCycloneDX_WithSolutionOrProjectFileThatDoesntExistsRetu
128133

129134
var exitCode = await runner.HandleCommandAsync(runOptions);
130135

131-
Assert.NotEqual((int)ExitCode.OK, exitCode);
136+
Assert.NotEqual((int)ExitCode.OK, exitCode);
137+
}
138+
139+
[Fact]
140+
public async Task CallingCycloneDX_WithMultipleReferencesToPackage_ResolvesOne()
141+
{
142+
var solutionFile = "test.sln";
143+
var mockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
144+
{
145+
{solutionFile,new MockFileData("") },
146+
});
147+
var mockSolutionFileService = new Mock<ISolutionFileService>();
148+
mockSolutionFileService
149+
.Setup(s => s.GetSolutionDotnetDependencys(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<string>(), It.IsAny<string>()))
150+
.ReturnsAsync(new HashSet<DotnetDependency>
151+
{
152+
new DotnetDependency { Name = "Package 1", Version = "1.2.3" },
153+
new DotnetDependency { Name = "Package 1", Version = "1.3.5" },
154+
new DotnetDependency { Name = "Package 2", Version = "2.0.0", Dependencies = new Dictionary<string, string>{{"Package 1", "[1.2.3, 1.2.3]" }} },
155+
});
156+
157+
var mockNugetService = new Mock<INugetService>();
158+
mockNugetService.Setup(s => s.GetComponentAsync(It.Is<DotnetDependency>(o => o.Name == "Package 1" && o.Version == "1.2.3")))
159+
.ReturnsAsync(new Component { Name = "Package 1", Version = "1.2.3", });
160+
mockNugetService.Setup(s => s.GetComponentAsync(It.Is<DotnetDependency>(o => o.Name == "Package 1" && o.Version == "1.3.5")))
161+
.ReturnsAsync(new Component { Name = "Package 1", Version = "1.3.5", });
162+
mockNugetService.Setup(s => s.GetComponentAsync(It.Is<DotnetDependency>(o => o.Name == "Package 2" && o.Version == "2.0.0")))
163+
.ReturnsAsync(new Component { Name = "Package 2", Version = "2.0.0", });
164+
165+
var mockNugetServiceFactory = new Mock<INugetServiceFactory>();
166+
mockNugetServiceFactory
167+
.Setup(s => s.Create(It.IsAny<RunOptions>(), It.IsAny<IFileSystem>(), It.IsAny<IGithubService>(), It.IsAny<List<string>>()))
168+
.Returns(mockNugetService.Object);
169+
170+
Runner runner = new Runner(fileSystem: mockFileSystem, null, null, null, null, null, solutionFileService: mockSolutionFileService.Object, nugetServiceFactory: mockNugetServiceFactory.Object);
171+
172+
RunOptions runOptions = new RunOptions
173+
{
174+
SolutionOrProjectFile = XFS.Path(solutionFile),
175+
scanProjectReferences = true,
176+
outputDirectory = XFS.Path(@"c:\NewDirectory"),
177+
outputFilename = XFS.Path(@"my_bom.xml")
178+
};
179+
180+
var exitCode = await runner.HandleCommandAsync(runOptions);
181+
182+
Assert.Equal((int)ExitCode.OK, exitCode);
183+
var output = mockFileSystem.GetFile("/NewDirectory/my_bom.xml");
184+
Assert.NotNull(output);
132185
}
133186
}
134187
}

0 commit comments

Comments
 (0)