SSPC-Tester/SSPCTester.Tests/ReportFileHelperTests.cs

161 lines
5.5 KiB
C#
Raw Permalink Normal View History

using SSPCTester.Logic.Models;
using SSPCTester.Logic.Report;
namespace SSPCTester.Tests;
public sealed class ReportFileHelperTests
{
[Fact]
public void ResolveFileName_ExpandsVariablesAndKeepsPdfExtension()
{
var project = new Project
{
Name = "ProjectA",
Dut =
{
ProductName = "SSPC",
Model = "M24",
SerialNumber = "SN001"
},
Report = { FileName = "{ProjectName}_{SerialNumber}_{yyyyMMdd_HHmmss}.pdf" }
};
string fileName = ReportFileHelper.ResolveFileName(project, new DateTime(2026, 6, 28, 9, 8, 7));
Assert.Equal("ProjectA_SN001_20260628_090807.pdf", fileName);
}
[Fact]
public void ResolveFileName_CanUseWordExtensionFromSameTemplate()
{
var project = new Project
{
Name = "ProjectA",
Dut = { SerialNumber = "SN001" },
Report = { FileName = "{ProjectName}_{SerialNumber}_{yyyyMMdd_HHmmss}.pdf" }
};
string fileName = ReportFileHelper.ResolveFileName(project, new DateTime(2026, 6, 28, 9, 8, 7), ".docx");
Assert.Equal("ProjectA_SN001_20260628_090807.docx", fileName);
}
[Fact]
public void ResolveFileName_CleansInvalidCharactersAndAddsPdfExtension()
{
var project = new Project
{
Name = "A:B/C",
Report = { FileName = "{ProjectName}_{Date}" }
};
string fileName = ReportFileHelper.ResolveFileName(project, new DateTime(2026, 6, 28, 0, 0, 0));
Assert.Equal("A_B_C_20260628.pdf", fileName);
}
[Fact]
public void ResolveFileName_UsesFallbackForBlankTemplate()
{
var project = new Project { Name = "ProjectA", Report = { FileName = " " } };
string fileName = ReportFileHelper.ResolveFileName(project, new DateTime(2026, 6, 28, 1, 2, 3));
Assert.Equal("ProjectA_20260628_010203.pdf", fileName);
}
[Theory]
[InlineData("Pdf", ReportOutputFormat.Pdf)]
[InlineData("word", ReportOutputFormat.Word)]
[InlineData("BOTH", ReportOutputFormat.Both)]
[InlineData("invalid", ReportOutputFormat.Pdf)]
[InlineData(null, ReportOutputFormat.Pdf)]
public void ParseFormat_HandlesKnownValuesAndFallsBackToPdf(string? value, ReportOutputFormat expected)
{
Assert.Equal(expected, ReportFileHelper.ParseFormat(value));
}
[Fact]
public void EnumeratePdfFiles_SortsByLastWriteTimeDescending()
{
string folder = Path.Combine(Path.GetTempPath(), "SSPCTester-reports-" + Guid.NewGuid().ToString("N"));
try
{
Directory.CreateDirectory(folder);
string older = Path.Combine(folder, "older.pdf");
string newer = Path.Combine(folder, "newer.pdf");
string ignored = Path.Combine(folder, "ignored.txt");
File.WriteAllText(older, "old");
File.WriteAllText(newer, "new");
File.WriteAllText(ignored, "txt");
File.SetLastWriteTime(older, new DateTime(2026, 6, 27, 8, 0, 0));
File.SetLastWriteTime(newer, new DateTime(2026, 6, 28, 8, 0, 0));
var files = ReportFileHelper.EnumeratePdfFiles(folder);
Assert.Equal(2, files.Count);
Assert.Equal("newer.pdf", files[0].DisplayName);
Assert.Equal("older.pdf", files[1].DisplayName);
}
finally
{
if (Directory.Exists(folder)) Directory.Delete(folder, true);
}
}
[Fact]
public void EnumerateReportFiles_BothIncludesPdfAndWord()
{
string folder = Path.Combine(Path.GetTempPath(), "SSPCTester-reports-" + Guid.NewGuid().ToString("N"));
try
{
Directory.CreateDirectory(folder);
string pdf = Path.Combine(folder, "a.pdf");
string docx = Path.Combine(folder, "b.docx");
File.WriteAllText(pdf, "pdf");
File.WriteAllText(docx, "docx");
var files = ReportFileHelper.EnumerateReportFiles(folder, ReportOutputFormat.Both);
Assert.Contains(files, x => x.DisplayName == "a.pdf" && x.Kind == ReportFileKind.Pdf);
Assert.Contains(files, x => x.DisplayName == "b.docx" && x.Kind == ReportFileKind.Word);
}
finally
{
if (Directory.Exists(folder)) Directory.Delete(folder, true);
}
}
[Fact]
public void ReportInfo_RoundTripsBesideReport()
{
string folder = Path.Combine(Path.GetTempPath(), "SSPCTester-reports-" + Guid.NewGuid().ToString("N"));
try
{
Directory.CreateDirectory(folder);
string report = Path.Combine(folder, "report.docx");
File.WriteAllText(report, "");
var info = new ReportInfo
{
ProjectName = "ProjectA",
ProductName = "SSPC",
GeneratedAt = new DateTime(2026, 6, 28, 12, 0, 0),
Format = ReportOutputFormat.Word.ToString(),
WordPath = report,
OverallStatus = TestStatus.Pass.ToString()
};
ReportFileHelper.SaveInfo(info, ReportFileHelper.BuildInfoPath(report));
var loaded = ReportFileHelper.LoadInfoForReport(report);
Assert.NotNull(loaded);
Assert.Equal("ProjectA", loaded.ProjectName);
Assert.Equal(report, loaded.WordPath);
}
finally
{
if (Directory.Exists(folder)) Directory.Delete(folder, true);
}
}
}