diff --git a/docs/reqstream/review-mark/self-test/validation.yaml b/docs/reqstream/review-mark/self-test/validation.yaml index 622ccd1..2c6641d 100644 --- a/docs/reqstream/review-mark/self-test/validation.yaml +++ b/docs/reqstream/review-mark/self-test/validation.yaml @@ -32,3 +32,4 @@ sections: tests: - Validation_Run_WithTrxResultsFile_WritesFile - Validation_Run_WithXmlResultsFile_WritesFile + - Validation_Run_WithResultsFileInNewDirectory_CreatesDirectory diff --git a/src/DemaConsulting.ReviewMark/SelfTest/Validation.cs b/src/DemaConsulting.ReviewMark/SelfTest/Validation.cs index 6fd8197..60f66ef 100644 --- a/src/DemaConsulting.ReviewMark/SelfTest/Validation.cs +++ b/src/DemaConsulting.ReviewMark/SelfTest/Validation.cs @@ -531,6 +531,12 @@ private static void WriteResultsFile(Context context, DemaConsulting.TestResults return; } + var directory = Path.GetDirectoryName(context.ResultsFile); + if (!string.IsNullOrEmpty(directory)) + { + Directory.CreateDirectory(directory); + } + File.WriteAllText(context.ResultsFile, content); context.WriteLine($"Results written to {context.ResultsFile}"); } diff --git a/test/DemaConsulting.ReviewMark.Tests/SelfTest/ValidationTests.cs b/test/DemaConsulting.ReviewMark.Tests/SelfTest/ValidationTests.cs index 1949dd6..3576944 100644 --- a/test/DemaConsulting.ReviewMark.Tests/SelfTest/ValidationTests.cs +++ b/test/DemaConsulting.ReviewMark.Tests/SelfTest/ValidationTests.cs @@ -202,4 +202,35 @@ public void Validation_Run_WithXmlResultsFile_WritesFile() } } } + + /// + /// Test that Run creates the parent directory when --results specifies a path with a non-existent parent. + /// + [TestMethod] + public void Validation_Run_WithResultsFileInNewDirectory_CreatesDirectory() + { + // Arrange — use TestDirectory as the root; the 'output' subdirectory does not exist yet + using var tempDir = new TestDirectory(); + var subDir = Path.Combine(tempDir.DirectoryPath, "output"); + var resultsFile = Path.Combine(subDir, "results.trx"); + + var originalOut = Console.Out; + try + { + using var outWriter = new StringWriter(); + Console.SetOut(outWriter); + using var context = Context.Create(["--validate", "--results", resultsFile]); + + // Act + Validation.Run(context); + + // Assert — directory and results file were created + Assert.IsTrue(Directory.Exists(subDir), "Parent directory was not created"); + Assert.IsTrue(File.Exists(resultsFile), "TRX results file was not created in new directory"); + } + finally + { + Console.SetOut(originalOut); + } + } }