public void CallingCycloneDX_CreatesBomFromDirectory()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\Project1\packages.config"), Helpers.GetPackagesFileWithPackageReference("Package1", "1.2.3") },
                { XFS.Path(@"c:\SolutionPath\Project2\packages.config"), Helpers.GetPackagesFileWithPackageReference("Package2", "1.2.3") },
                { XFS.Path(@"c:\SolutionPath\Project3\packages.config"), Helpers.GetPackagesFileWithPackageReference("Package3", "1.2.3") },
            });
            var mockHttpClient = Helpers.GetNugetMockHttpClient(new List <NugetPackage>
            {
                new NugetPackage {
                    Name = "Package1", Version = "1.2.3"
                },
                new NugetPackage {
                    Name = "Package2", Version = "1.2.3"
                },
                new NugetPackage {
                    Name = "Package3", Version = "1.2.3"
                },
            });

            Program.fileSystem = mockFileSystem;
            Program.httpClient = mockHttpClient;
            var args = new string[]
            {
                XFS.Path(@"c:\SolutionPath"),
                "-o", XFS.Path(@"c:\SolutionPath")
            };

            var exitCode = Program.Main(args);

            Assert.Equal((int)ExitCode.OK, exitCode);
            Assert.True(mockFileSystem.FileExists(XFS.Path(@"c:\SolutionPath\bom.xml")));
        }
        public void CallingCycloneDX_CreatesOutputDirectory()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\SolutionFile.sln"), new MockFileData(@"
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""CycloneDX"", ""Project\Project.csproj"", ""{88DFA76C-1C0A-4A83-AA48-EA1D28A9ABED}""
                        ") },
                { XFS.Path(@"c:\SolutionPath\Project\Project.csproj"), Helpers.GetProjectFileWithPackageReference("Package", "1.2.3") },
            });
            var mockHttpClient = Helpers.GetNugetMockHttpClient(new List <NugetPackage>
            {
                new NugetPackage {
                    Name = "Package", Version = "1.2.3"
                },
            });

            Program.fileSystem = mockFileSystem;
            Program.httpClient = mockHttpClient;
            var args = new string[]
            {
                XFS.Path(@"c:\SolutionPath\SolutionFile.sln"),
                "-o", XFS.Path(@"c:\NewDirectory")
            };

            var exitCode = Program.Main(args);

            Assert.Equal((int)ExitCode.OK, exitCode);
            Assert.True(mockFileSystem.FileExists(XFS.Path(@"c:\NewDirectory\bom.xml")));
        }
Example #3
0
        public async Task GetComponent_FromCachedNugetFile_DoNotReturnsHash_WhenDisabled()
        {
            var nuspecFileContents = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <package xmlns=""http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"">
                <metadata>
                    <id>testpackage</id>
                </metadata>
                </package>";

            var nugetFileContent = "FooBarBaz";
            var mockFileSystem   = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.nuspec"), new MockFileData(nuspecFileContents) },
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.1.0.0.nupkg"), new MockFileData(nugetFileContent) },
            });
            var nugetService = new NugetService(
                mockFileSystem,
                new List <string> {
                XFS.Path(@"c:\nugetcache")
            },
                new Mock <IGithubService>().Object,
                new HttpClient(),
                disableHashComputation: true);

            var component = await nugetService.GetComponentAsync("testpackage", "1.0.0", Component.ComponentScope.Required).ConfigureAwait(false);

            Assert.Null(component.Hashes);
        }
        public void SuccessfulDotNetRunnerExecution_ReturnsDependencyGraph()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>());

            // Arrange
            var dotNetRunner = new Mock <IDotNetRunner>();

            dotNetRunner.Setup(runner => runner.Run(It.IsAny <string>(), It.IsAny <string[]>()))
            .Returns(new RunStatus(string.Empty, string.Empty, 0))
            .Callback((string directory, string[] arguments) =>
            {
                // Grab the temp filename that was passed...
                string tempFileName = arguments[3].Replace("/p:RestoreGraphOutputPath=", string.Empty).Trim('"');

                // ... and stuff it with our dummy dependency graph
                mockFileSystem.AddFileFromEmbeddedResource(tempFileName, GetType().Assembly, "DotNetOutdated.Tests.TestData.test.dg");
            });

            var graphService = new DependencyGraphService(dotNetRunner.Object, mockFileSystem);

            // Act
            var dependencyGraph = graphService.GenerateDependencyGraph(_path);

            // Assert
            Assert.NotNull(dependencyGraph);
            Assert.Equal(3, dependencyGraph.Projects.Count);

            dotNetRunner.Verify(runner => runner.Run(XFS.Path(@"c:\"), It.Is <string[]>(a => a[0] == "msbuild" && a[1] == '\"' + _path + '\"')));
        }
Example #5
0
        public void GetPackageCachePaths_ReturnsGlobalCacheWithoutFallbackCachePath()
        {
            var fileSystem = new MockFileSystem();

            var dotnetCommandService = new Mock <IDotnetCommandService>();

            dotnetCommandService
            .Setup(m => m.Run("--list-sdks"))
            .Returns(new DotnetCommandResult
            {
                ExitCode = 0,
                StdOut   = @"2.2.402 [" + XFS.Path(@"c:\dotnet\sdk") + "]"
            });
            dotnetCommandService
            .Setup(m => m.Run("nuget locals global-packages --list"))
            .Returns(new DotnetCommandResult
            {
                ExitCode = 0,
                StdOut   = @"info : global-packages: " + XFS.Path(@"c:\user\.nuget\packages")
            });

            var dotnetUtilsService = new DotnetUtilsService(
                fileSystem, dotnetCommandService.Object);

            // act
            var cachePaths = dotnetUtilsService.GetPackageCachePaths();

            Assert.Collection(
                cachePaths.Result,
                path => Assert.Equal(XFS.Path(@"c:\user\.nuget\packages"), path));
        }
Example #6
0
        public void GetNuGetFallbackFolderPath_ReturnsCorrectFallbackPath()
        {
            var fileSystem = new MockFileSystem();

            fileSystem.Directory
            .CreateDirectory(XFS.Path(@"c:\dotnet\sdk\NuGetFallbackFolder"));

            var dotnetCommandService = new Mock <IDotnetCommandService>();

            dotnetCommandService
            .Setup(m => m.Run("--list-sdks"))
            .Returns(new DotnetCommandResult
            {
                ExitCode = 0,
                StdOut   = @"2.2.402 [" + XFS.Path(@"c:\dotnet\sdk") + "]"
            });

            var dotnetUtilsService = new DotnetUtilsService(
                fileSystem, dotnetCommandService.Object);

            // act
            var fallbackPath = dotnetUtilsService.GetNuGetFallbackFolderPath();

            Assert.Equal(
                XFS.Path(@"c:\dotnet\sdk\NuGetFallbackFolder"),
                fallbackPath.Result);
        }
Example #7
0
        public async Task GetSolutionProjectReferences_ReturnsListOfProjects_IncludingSecondaryProjectReferences()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\SolutionFile.sln"), new MockFileData(@"
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""CycloneDX"", ""Project1\Project1.csproj"", ""{88DFA76C-1C0A-4A83-AA48-EA1D28A9ABED}""
                        ") },
                { XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), Helpers.GetEmptyProjectFile() },
                { XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), Helpers.GetEmptyProjectFile() }
            });
            var mockProjectFileService = new Mock <IProjectFileService>();

            mockProjectFileService
            .SetupSequence(s => s.RecursivelyGetProjectReferencesAsync(It.IsAny <string>()))
            .ReturnsAsync(new HashSet <string>
            {
                XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"),
            })
            .ReturnsAsync(new HashSet <string>());
            var solutionFileService = new SolutionFileService(mockFileSystem, mockProjectFileService.Object);

            var projects = await solutionFileService.GetSolutionProjectReferencesAsync(XFS.Path(@"c:\SolutionPath\SolutionFile.sln")).ConfigureAwait(false);

            var sortedProjects = new List <string>(projects);

            sortedProjects.Sort();

            Assert.Collection(sortedProjects,
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), item),
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), item));
        }
Example #8
0
        public void GetNugetPackages_PackageAsTopLevelAndTransitive(string framework, int frameworkMajor, int frameworkMinor)
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), Helpers.GetProjectFileWithPackageReferences(
                      new[] {
                        new NugetPackage
                        {
                            Name         = "Package1",
                            Version      = "1.5.0",
                            Dependencies = new Dictionary <string, string>
                            {
                                { "Package2", "[4.5, )" },
                            },
                        },
                        new NugetPackage
                        {
                            Name         = "Package2",
                            Version      = "4.5.1",
                            Dependencies = new Dictionary <string, string>(),
                        }
                    }) },
                { XFS.Path(@"c:\SolutionPath\Project1\obj\project.assets.json"), new MockFileData("") }
            });
            var mockDotnetCommandsService = new Mock <IDotnetCommandService>();

            mockDotnetCommandsService.Setup(m => m.Run(It.IsAny <string>()))
            .Returns(() => Helpers.GetDotnetListPackagesResult(
                         new[]
Example #9
0
        public async Task GetComponent_FromCachedNugetHashFile_ReturnsComponentWithHash()
        {
            var nuspecFileContents = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <package xmlns=""http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"">
                <metadata>
                    <id>testpackage</id>
                </metadata>
                </package>";

            byte[] sampleHash = new byte[] { 1, 2, 3, 4, 5, 6, 78, 125, 200 };

            var nugetHashFileContents = Convert.ToBase64String(sampleHash);
            var mockFileSystem        = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.nuspec"), new MockFileData(nuspecFileContents) },
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.1.0.0.nupkg.sha512"), new MockFileData(nugetHashFileContents) },
            });
            var nugetService = new NugetService(
                mockFileSystem,
                new List <string> {
                XFS.Path(@"c:\nugetcache")
            },
                new Mock <IGithubService>().Object,
                new HttpClient());

            var component = await nugetService.GetComponentAsync("testpackage", "1.0.0", Component.ComponentScope.Required).ConfigureAwait(false);

            Assert.Equal(Hash.HashAlgorithm.SHA_512, component.Hashes[0].Alg);
            Assert.Equal(BitConverter.ToString(sampleHash).Replace("-", string.Empty), component.Hashes[0].Content);
        }
Example #10
0
        public async Task RecursivelyGetProjectReferences_ReturnsProjectReferences()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), Helpers.GetProjectFileWithProjectReferences(
                      new string[] {
                        @"..\Project2\Project2.csproj",
                    }) },
                { XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), Helpers.GetProjectFileWithProjectReferences(
                      new string[] {
                        @"..\Project3\Project3.csproj",
                    }) },
                { XFS.Path(@"c:\SolutionPath\Project3\Project3.csproj"), new MockFileData(@"<Project></Project>") },
            });
            var mockDotnetUtilsService       = new Mock <IDotnetUtilsService>();
            var mockPackageFileService       = new Mock <IPackagesFileService>();
            var mockProjectAssetsFileService = new Mock <IProjectAssetsFileService>();
            var projectFileService           = new ProjectFileService(
                mockFileSystem,
                mockDotnetUtilsService.Object,
                mockPackageFileService.Object,
                mockProjectAssetsFileService.Object);

            var projects = await projectFileService.RecursivelyGetProjectReferencesAsync(XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj")).ConfigureAwait(false);

            var sortedProjects = new List <string>(projects);

            sortedProjects.Sort();

            Assert.Collection(sortedProjects,
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), item),
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project3\Project3.csproj"), item));
        }
        public async Task GetNugetPackages_ReturnsMultipleNugetPackages()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Project\packages.config"), Helpers.GetPackagesFileWithPackageReferences(
                      new List <NugetPackage> {
                        new NugetPackage {
                            Name = "Package1", Version = "1.2.3"
                        },
                        new NugetPackage {
                            Name = "Package2", Version = "1.2.3"
                        },
                        new NugetPackage {
                            Name = "Package3", Version = "1.2.3"
                        },
                    }) },
            });
            var packagesFileService = new PackagesFileService(mockFileSystem);

            var packages = await packagesFileService.GetNugetPackagesAsync(XFS.Path(@"c:\Project\packages.config")).ConfigureAwait(false);

            var sortedPackages = new List <NugetPackage>(packages);

            sortedPackages.Sort();

            Assert.Collection(sortedPackages,
                              item => Assert.Equal("Package1", item.Name),
                              item => Assert.Equal("Package2", item.Name),
                              item => Assert.Equal("Package3", item.Name));
        }
        public async Task GetSolutionProjectReferences_ReturnsListOfProjects_IncludingSecondaryProjectReferences()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\SolutionFile.sln"), new MockFileData(@"
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""CycloneDX"", ""Project1\Project1.csproj"", ""{88DFA76C-1C0A-4A83-AA48-EA1D28A9ABED}""
                        ") },
                { XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), Helpers.GetProjectFileWithProjectReferences(
                      new string[] {
                        @"..\Project2\Project2.csproj",
                    }) },
                { XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), new MockFileData(@"<Project></Project>") }
            });
            var solutionFileService = new SolutionFileService(mockFileSystem);

            var projects = await solutionFileService.GetSolutionProjectReferencesAsync(XFS.Path(@"c:\SolutionPath\SolutionFile.sln"));

            var sortedProjects = new List <string>(projects);

            sortedProjects.Sort();

            Assert.Collection(sortedProjects,
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), item),
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), item));
        }
        public async Task GetComponent_FromCachedNuspecFile_ReturnsComponent()
        {
            var nuspecFileContents = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <package xmlns=""http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"">
                <metadata>
                    <id>testpackage</id>
                </metadata>
                </package>";
            var mockFileSystem     = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.nuspec"), new MockFileData(nuspecFileContents) },
            });

            var nugetService = new NugetV3Service(null,
                                                  mockFileSystem,
                                                  new List <string> {
                XFS.Path(@"c:\nugetcache")
            },
                                                  new Mock <IGithubService>().Object,
                                                  new NullLogger(), false);

            var component = await nugetService.GetComponentAsync("testpackage", "1.0.0", Component.ComponentScope.Required).ConfigureAwait(false);

            Assert.Equal("testpackage", component.Name);
        }
Example #14
0
        public async Task GetComponent_FromCachedNugetFile_ReturnsComponentWithHash()
        {
            var nuspecFileContents = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <package xmlns=""http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"">
                <metadata>
                    <id>testpackage</id>
                </metadata>
                </package>";

            var nugetFileContent = "FooBarBaz";
            var mockFileSystem   = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.nuspec"), new MockFileData(nuspecFileContents) },
                { XFS.Path(@"c:\nugetcache\testpackage\1.0.0\testpackage.1.0.0.nupkg"), new MockFileData(nugetFileContent) },
            });
            var nugetService = new NugetService(
                mockFileSystem,
                new List <string> {
                XFS.Path(@"c:\nugetcache")
            },
                new Mock <IGithubService>().Object,
                new HttpClient());

            var component = await nugetService.GetComponentAsync("testpackage", "1.0.0", Component.ComponentScope.Required).ConfigureAwait(false);

            byte[] hashBytes;
            using (SHA512 sha = new SHA512Managed())
            {
                hashBytes = sha.ComputeHash(Encoding.UTF8.GetBytes(nugetFileContent));
            }

            Assert.Equal(Hash.HashAlgorithm.SHA_512, component.Hashes[0].Alg);
            Assert.Equal(BitConverter.ToString(hashBytes).Replace("-", string.Empty), component.Hashes[0].Content);
        }
        private static MockFileSystem CreateMockFileSystem()
        {
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddFile(XFS.Path(@"C:\assets\dir1\dir1_1\file1.txt"), new MockFileData("data"));
            mockFileSystem.AddFile(XFS.Path(@"C:\assets\dir1\dir1_1\file2.txt"), new MockFileData("data"));
            mockFileSystem.AddFile(XFS.Path(@"C:\assets\dir2\file2.zip"), new MockFileData("data"));
            return(mockFileSystem);
        }
        public void CallingCycloneDX_WithNoPackages_GeneratesEmptyBom()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Solution\Solution.sln"), new MockFileData(@"Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26124.0
MinimumVisualStudioVersion = 15.0.26124.0
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""Project"", ""Project\Project.csproj"", ""{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}""
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Debug|x64.ActiveCfg = Debug|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Debug|x64.Build.0 = Debug|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Debug|x86.ActiveCfg = Debug|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Debug|x86.Build.0 = Debug|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Release|Any CPU.Build.0 = Release|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Release|x64.ActiveCfg = Release|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Release|x64.Build.0 = Release|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Release|x86.ActiveCfg = Release|Any CPU
{318AD44C-F5E0-49E4-B474-AE5D20C74A1A}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal") },
                {
                    XFS.Path(@"c:\Solution\Project\Project.csproj"),
                    new MockFileData(@"<Project Sdk=""Microsoft.NET.Sdk""><ItemGroup></ItemGroup></Project>")
                },
            });

            Program.fileSystem = mockFileSystem;

            var exitCode = Program.Main(new string[] {
                XFS.Path(@"c:\Solution\Solution.sln"),
                "--noSerialNumber",
                "--out", XFS.Path(@"c:\Solution")
            });
            var bomContents = mockFileSystem.File.ReadAllText(XFS.Path(@"c:\Solution\bom.xml"));

            Assert.Equal(@"<?xml version=""1.0"" encoding=""utf-8""?>
<bom version=""1"" xmlns=""http://cyclonedx.org/schema/bom/1.1"">
  <components />
</bom>", bomContents);
        }
        public void GetPackagesConfigFiles_DoesNotReturnNonPackagesConfigFiles_InSpecifiedPath()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Project\something.config"), new MockFileData("") },
            });
            var fileDiscoveryService = new FileDiscoveryService(mockFileSystem);

            var files = fileDiscoveryService.GetPackagesConfigFiles(XFS.Path(@"c:\Project"));

            Assert.Empty(files);
        }
        public async Task GetProjectNugetPackages_IgnoresImplicitPackageVersions()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Project\Project.csproj"), Helpers.GetProjectFileWithPackageReference("Package", "") },
            });
            var projectFileService = new ProjectFileService(mockFileSystem);

            var packages = await projectFileService.GetProjectNugetPackagesAsync(XFS.Path(@"c:\Project\Project.csproj"));

            Assert.Empty(packages);
        }
Example #19
0
        public async Task GetProjectNugetPackages_WithPackagesConfig_ReturnsMultipleNugetPackages()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Project\Project.csproj"), "" },
                { XFS.Path(@"c:\Project\packages.config"), "" },
            });
            var mockDotnetUtilsService = new Mock <IDotnetUtilsService>();

            mockDotnetUtilsService
            .Setup(s => s.Restore(It.IsAny <string>()))
            .Returns(new DotnetUtilsResult());
            var mockPackageFileService = new Mock <IPackagesFileService>();

            mockPackageFileService
            .Setup(s => s.GetNugetPackagesAsync(It.IsAny <string>()))
            .ReturnsAsync(
                new HashSet <NugetPackage>
            {
                new NugetPackage {
                    Name = "Package1", Version = "1.2.3"
                },
                new NugetPackage {
                    Name = "Package2", Version = "1.2.3"
                },
                new NugetPackage {
                    Name = "Package3", Version = "1.2.3"
                },
            }
                );
            var mockProjectAssetsFileService = new Mock <IProjectAssetsFileService>();

            mockProjectAssetsFileService
            .Setup(s => s.GetNugetPackages(It.IsAny <string>()))
            .Returns(new HashSet <NugetPackage>());
            var projectFileService = new ProjectFileService(
                mockFileSystem,
                mockDotnetUtilsService.Object,
                mockPackageFileService.Object,
                mockProjectAssetsFileService.Object);

            var packages = await projectFileService.GetProjectNugetPackagesAsync(XFS.Path(@"c:\Project\Project.csproj")).ConfigureAwait(false);

            var sortedPackages = new List <NugetPackage>(packages);

            sortedPackages.Sort();

            Assert.Collection(sortedPackages,
                              item => Assert.Equal("Package1", item.Name),
                              item => Assert.Equal("Package2", item.Name),
                              item => Assert.Equal("Package3", item.Name));
        }
        public void SearchRecursively_RecursiveFilesDoNotExist_ReturnsEmpty()
        {
            // Arrange
            var mockFileSystem = CreateMockFileSystem();

            var ant = new AntDirectory(new Ant("/assets/**/*.xml"), mockFileSystem);

            // Act
            var files = ant.SearchRecursively(XFS.Path(@"C:\"));

            // Assert
            files.Should().BeEmpty();
        }
        public void SearchRecursively_PatternWithThreeQuestionMarks_ReturnsEmpty()
        {
            // Arrange
            var mockFileSystem = CreateMockFileSystem();

            var ant = new AntDirectory(new Ant("/assets/dir1/*/file???.txt"), mockFileSystem);

            // Act
            var files = ant.SearchRecursively(XFS.Path(@"C:\"));

            // Assert
            files.Should().BeEmpty();
        }
        public void GetPackagesConfigFiles_ReturnsPackagesConfigFiles_InSpecifiedPathSubdirectories()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Project\Subdirectory\packages.config"), new MockFileData("") },
            });
            var fileDiscoveryService = new FileDiscoveryService(mockFileSystem);

            var files = fileDiscoveryService.GetPackagesConfigFiles(XFS.Path(@"c:\Project"));

            Assert.Collection(files,
                              item => Assert.Equal(XFS.Path(@"c:\Project\Subdirectory\packages.config"), item));
        }
        public void MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfBytesAreNull()
        {
            // Arrange
            MockFileSystem fileSystem = new MockFileSystem();
            string         path       = XFS.Path(@"c:\something\demo.txt");

            // Act
            Action action = () => fileSystem.File.WriteAllBytes(path, null);

            // Assert
            ArgumentNullException exception = Assert.Throws <ArgumentNullException>(action);

            Assert.StartsWith("Value cannot be null.", exception.Message);
            Assert.Equal(exception.ParamName, "bytes");
        }
        public void SearchRecursively_WithDirectoryPathSetting_ReturnsExpectedValue(
            bool includeDirectoryPath)
        {
            var ant   = new AntDirectory(new Ant("/assets/dir1/*/file?.txt"), CreateMockFileSystem());
            var match = ant.SearchRecursively(XFS.Path(@"C:\"), includeDirectoryPath);

            if (includeDirectoryPath)
            {
                match.First().Should().StartWith(XFS.Path(@"C:\"));
            }
            else
            {
                match.First().Should().NotStartWith(XFS.Path(@"C:\"));
            }
        }
        public void SearchRecursively_PatternWithQuestionMark_ReturnsTwoFiles()
        {
            // Arrange
            var mockFileSystem = CreateMockFileSystem();

            var ant = new AntDirectory(new Ant("/assets/dir1/*/file?.txt"), mockFileSystem);

            // Act
            var files = ant.SearchRecursively(XFS.Path(@"C:\")).ToList();

            // Assert
            files.Should().HaveCount(2);
            files.Should().Contain(f => f == XFS.Path(@"assets\dir1\dir1_1\file1.txt"));
            files.Should().Contain(f => f == XFS.Path(@"assets\dir1\dir1_1\file2.txt"));
        }
        public void MockFile_WriteAllBytes_ShouldWriteDataToMemoryFileSystem()
        {
            // Arrange
            string         path       = XFS.Path(@"c:\something\demo.txt");
            MockFileSystem fileSystem = new MockFileSystem();

            byte[] fileContent = new byte[] { 1, 2, 3, 4 };

            // Act
            fileSystem.File.WriteAllBytes(path, fileContent);

            // Assert
            Assert.Equal(
                fileContent,
                fileSystem.GetFile(path).Contents);
        }
        public async Task GetSolutionProjectReferences_ReturnsProjectThatExists()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\SolutionPath\SolutionFile.sln"), new MockFileData(@"
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""CycloneDX"", ""Project\Project.csproj"", ""{88DFA76C-1C0A-4A83-AA48-EA1D28A9ABED}""
                        ") },
                { XFS.Path(@"c:\SolutionPath\Project\Project.csproj"), new MockFileData(@"<Project></Project>") },
            });
            var solutionFileService = new SolutionFileService(mockFileSystem);

            var projects = await solutionFileService.GetSolutionProjectReferencesAsync(XFS.Path(@"c:\SolutionPath\SolutionFile.sln"));

            Assert.Collection(projects,
                              item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project\Project.csproj"), item));
        }
        public async Task GetNugetPackages_ReturnsNugetPackage()
        {
            var mockFileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { XFS.Path(@"c:\Project\packages.config"), Helpers.GetPackagesFileWithPackageReference("Package", "1.2.3") },
            });
            var packagesFileService = new PackagesFileService(mockFileSystem);

            var packages = await packagesFileService.GetNugetPackagesAsync(XFS.Path(@"c:\Project\packages.config")).ConfigureAwait(false);

            Assert.Collection(packages,
                              item => {
                Assert.Equal("Package", item.Name);
                Assert.Equal("1.2.3", item.Version);
            });
        }
        public void SearchRecursively_PatternRecursiveWithWildcard_ReturnsThreeFiles()
        {
            // Arrange
            var mockFileSystem = CreateMockFileSystem();

            var ant = new AntDirectory(new Ant("/assets/**/*.*"), mockFileSystem);

            // Act
            var files = ant.SearchRecursively(XFS.Path(@"C:\")).ToList();

            // Assert
            files.Should().HaveCount(3);
            files.Should().Contain(f => f == XFS.Path(@"assets\dir1\dir1_1\file1.txt"));
            files.Should().Contain(f => f == XFS.Path(@"assets\dir1\dir1_1\file2.txt"));
            files.Should().Contain(f => f == XFS.Path(@"assets\dir2\file2.zip"));
        }
        public void MockFile_WriteAllBytes_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()
        {
            // Arrange
            string         path       = XFS.Path(@"c:\something\demo.txt");
            MockFileSystem fileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { path, new MockFileData("this is hidden") },
            });

            fileSystem.File.SetAttributes(path, FileAttributes.Hidden);

            // Act
            Action action = () => fileSystem.File.WriteAllBytes(path, new byte[] { 123 });

            // Assert
            Assert.Throws <UnauthorizedAccessException>(action);
        }