using ClosedXML.Excel;
using FluentAssertions;
using Workflow.Application.BuildFlow.Common.Services;
using Xunit;
namespace BuildFlow.Workflow.Tests.Performance;
///
/// Excel 导入行惰性枚举契约测试。
///
public class LazyExcelRowTests
{
[Fact]
public void ParseReturnsLazyEnumerableInsteadOfMaterializedList()
{
var service = new FormSchemaExcelService();
var template = service.BuildTemplate(Schema, "惰性导入");
using var input = new MemoryStream(template);
using var workbook = new XLWorkbook(input);
var worksheet = workbook.Worksheets.First();
worksheet.Cell(2, 1).Value = "first";
worksheet.Cell(3, 1).Value = "second";
worksheet.Cell(4, 1).Value = "third";
using var output = new MemoryStream();
workbook.SaveAs(output);
output.Position = 0;
var rows = service.Parse(Schema, output, 100, 32_767);
rows.Should().NotBeAssignableTo>();
rows.Take(1).Should().ContainSingle(x =>
x.RowNumber == 2 && x.JsonObject.Contains("first", StringComparison.Ordinal));
}
private const string Schema = """
{
"type": "object",
"properties": {
"name": { "type": "string", "title": "名称", "required": true, "x-component": "Input" }
}
}
""";
}