diff --git a/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs b/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs new file mode 100644 index 0000000..5ea1254 --- /dev/null +++ b/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs @@ -0,0 +1,223 @@ +using Microsoft.Extensions.Logging.Abstractions; +using ProjectDiff.Core; +using ProjectDiff.Core.Entrypoints; +using ProjectDiff.Tests.Utils; + +namespace ProjectDiff.Tests.Core; + +public sealed class DirectoryBuildPropsTests +{ + [Fact] + public async Task ModifyingParentDirectoryBuildProps_ShouldNotAffectProjectInSubDirectory() + { + using var repo = await TestRepository.SetupAsync(async r => + { + await r.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + r.CreateDirectory("Sample"); + await r.WriteAllTextAsync( + "Sample/Directory.Build.props", + """ + + + Value + + + """ + ); + r.CreateProject("Sample/Sample.csproj"); + } + ); + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + SomeNewValue + + + """ + ); + + var result = await GetProjectDiff(repo); + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + Assert.Empty(result.Projects); + } + + [Fact] + public async Task DirectoryBuildProps_AffectsProjects_IfImportedByNestedDirectoryBuildProps() + { + using var repo = await TestRepository.SetupAsync(async r => + { + await r.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + r.CreateDirectory("Sample"); + await r.WriteAllTextAsync( + "Sample/Directory.Build.props", + """ + + + + + Value + + + """ + ); + r.CreateProject("Sample/Sample.csproj"); + } + ); + + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + SomeNewValue + + + """ + ); + + var result = await GetProjectDiff(repo); + + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + + var project = Assert.Single(result.Projects); + Assert.Equal(DiffStatus.Modified, project.Status); + } + + [Fact] + public async Task AddingDirectoryBuildProps_ShouldOnlyAffectProjectsInDirectory() + { + using var repo = await TestRepository.SetupAsync(r => + { + r.CreateDirectory("Sample"); + r.CreateProject("Sample/Sample.csproj"); + r.CreateDirectory("Other"); + r.CreateProject("Other/Other.csproj"); + return Task.CompletedTask; + } + ); + + await repo.WriteAllTextAsync( + "Sample/Directory.Build.props", + """ + + + Value + + + """ + ); + + var result = await GetProjectDiff(repo); + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + var project = Assert.Single(result.Projects); + + Assert.Equal(repo.GetPath("Sample", "Sample.csproj"), project.Path); + } + + [Fact] + public async Task AddingDirectoryBuildProps_ShouldAffectProjects() + { + using var repo = await TestRepository.SetupAsync(r => + { + r.CreateDirectory("Sample"); + r.CreateProject("Sample/Sample.csproj"); + return Task.CompletedTask; + } + ); + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + + var result = await GetProjectDiff(repo); + + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + + var project = Assert.Single(result.Projects); + + Assert.Equal(DiffStatus.Modified, project.Status); + } + + [Fact] + public async Task ModifyingDirectoryBuildProps_ShouldAffectProjects() + { + using var repo = await TestRepository.SetupAsync(async r => + { + await r.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + + r.CreateDirectory("Sample"); + r.CreateProject("Sample/Sample.csproj"); + } + ); + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + SomeNewValue + + + """ + ); + var result = await GetProjectDiff(repo); + + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + + var project = Assert.Single(result.Projects); + + Assert.Equal(DiffStatus.Modified, project.Status); + } + + + private static Task GetProjectDiff(TestRepository repo) + { + var executor = new ProjectDiffExecutor(new ProjectDiffExecutorOptions()); + return executor.GetProjectDiff( + repo.WorkingDirectory, + new DirectoryScanEntrypointProvider( + repo.WorkingDirectory, + NullLogger.Instance + ), + cancellationToken: TestContext.Current.CancellationToken + ); + } +} \ No newline at end of file diff --git a/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs b/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs index 3671179..56483d6 100644 --- a/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs +++ b/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs @@ -335,7 +335,7 @@ params string[] args var console = new TestConsole(repository.WorkingDirectory); var cli = ProjectDiffTool.BuildCli(console); - var exitCode = await cli.InvokeAsync(args.Append("--log-level=Debug").ToArray()); + var exitCode = await cli.InvokeAsync(args.Append("--log-level=None").ToArray()); if (exitCode != 0) { var stderr = console.GetStandardError();