Files
WCTDataMiner/tests/Gpulse.WCT.DataAnalyzer.Tests/Commands/ExportCommandTests.cs
2026-08-17 09:24:57 +08:00

106 lines
3.5 KiB
C#

using Gpulse.WCT.DataAnalyzer.Core.Domain.Release;
namespace Gpulse.WCT.DataAnalyzer.Tests.Commands;
[TestFixture]
public class ExportCommandTests : CommandTestBase
{
private static string ResolveOutputDir(params string[] segments) =>
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Join(Path.DirectorySeparatorChar, segments));
[Test]
public async Task Export_ChargingParametersCsv_WritesFile()
{
Host.ReleaseDb.ChargingParameters.Add(new ChargingParameterRecord
{
CarFactory = "TestFactory",
CarModel = "ModelX",
PhoneBrand = "Apple",
PhoneModel = "iPhone15",
Power350mW = 100,
Power500mW = 200,
});
await Host.ReleaseDb.SaveChangesAsync();
var (code, stdout, _) = await Export().RunCaptureAsync(
"--format", "csv",
"--type", "charging-parameters",
"--output", "data/output/export_cp");
Assert.Multiple(() =>
{
Assert.That(code, Is.EqualTo(0));
Assert.That(stdout, Does.Contain("ChargingParameterDatabase CSV exported"));
});
var file = Path.Combine(ResolveOutputDir("data", "output", "export_cp"), "WCT-ChargingParameterDatabase.csv");
Assert.That(File.Exists(file), Is.True);
var content = await File.ReadAllTextAsync(file);
Assert.Multiple(() =>
{
Assert.That(content, Does.Contain("车厂"));
Assert.That(content, Does.Contain("TestFactory"));
Assert.That(content, Does.Contain("iPhone15"));
});
}
[Test]
public async Task Export_QfodCsv_AfterParse_WritesFile()
{
var dir = NewDir();
var file = TestFixtures.WriteQfodLog(dir, TestFixtures.QfodFileName, 20, 25, 21);
await Parse().RunCaptureAsync("--file", file);
// 导出文件名带时间戳,先清空输出目录避免跨运行残留文件
var outDir = ResolveOutputDir("data", "output", "export_qfod");
if (Directory.Exists(outDir))
Directory.Delete(outDir, recursive: true);
var (code, stdout, _) = await Export().RunCaptureAsync(
"--format", "csv",
"--type", "qfod",
"--output", "data/output/export_qfod");
Assert.Multiple(() =>
{
Assert.That(code, Is.EqualTo(0));
Assert.That(stdout, Does.Contain("Qfod CSV exported"));
});
var exported = Directory.GetFiles(outDir, "qfod_export_*.csv").Single();
var content = await File.ReadAllTextAsync(exported);
Assert.Multiple(() =>
{
Assert.That(content, Does.Contain("delta_q"));
Assert.That(content, Does.Contain("iPhone15"));
});
}
[Test]
public async Task Export_UnknownFormat_PrintsMessage()
{
var (code, stdout, _) = await Export().RunCaptureAsync("--format", "xml");
Assert.Multiple(() =>
{
Assert.That(code, Is.EqualTo(0));
Assert.That(stdout, Does.Contain("Unknown format: xml. Use 'csv' or 'json'."));
});
}
[Test]
public async Task Export_PathTraversal_PrintsFailure()
{
var (code, stdout, _) = await Export().RunCaptureAsync(
"--format", "csv",
"--output", "../evil");
Assert.Multiple(() =>
{
Assert.That(code, Is.EqualTo(0));
Assert.That(stdout, Does.Contain("Export failed"));
});
}
}