Adds NestResponse type to OpenNest.Api with SaveAsync/LoadAsync for .nestquote format — a ZIP containing request.json, response.json (metrics), and an embedded nest.nest. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
64 lines
2.0 KiB
C#
64 lines
2.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using OpenNest.Api;
|
|
using OpenNest.Geometry;
|
|
|
|
namespace OpenNest.Tests.Api;
|
|
|
|
public class NestResponsePersistenceTests
|
|
{
|
|
[Fact]
|
|
public async Task SaveAsync_LoadAsync_RoundTrips()
|
|
{
|
|
var nest = new Nest("test-nest");
|
|
var plate = new Plate(new Size(60, 120));
|
|
nest.Plates.Add(plate);
|
|
|
|
var request = new NestRequest
|
|
{
|
|
Parts = [new NestRequestPart { DxfPath = "test.dxf", Quantity = 5 }],
|
|
SheetSize = new Size(60, 120),
|
|
Material = "Steel",
|
|
Thickness = 0.125,
|
|
Spacing = 0.1
|
|
};
|
|
|
|
var original = new NestResponse
|
|
{
|
|
SheetCount = 1,
|
|
Utilization = 0.75,
|
|
CutTime = TimeSpan.FromMinutes(12.5),
|
|
Elapsed = TimeSpan.FromSeconds(3.2),
|
|
Nest = nest,
|
|
Request = request
|
|
};
|
|
|
|
var path = Path.Combine(Path.GetTempPath(), $"test-{Guid.NewGuid()}.nestquote");
|
|
|
|
try
|
|
{
|
|
await original.SaveAsync(path);
|
|
var loaded = await NestResponse.LoadAsync(path);
|
|
|
|
Assert.Equal(original.SheetCount, loaded.SheetCount);
|
|
Assert.Equal(original.Utilization, loaded.Utilization, precision: 4);
|
|
Assert.Equal(original.CutTime, loaded.CutTime);
|
|
Assert.Equal(original.Elapsed, loaded.Elapsed);
|
|
|
|
Assert.Equal(original.Request.Material, loaded.Request.Material);
|
|
Assert.Equal(original.Request.Thickness, loaded.Request.Thickness);
|
|
Assert.Equal(original.Request.Parts.Count, loaded.Request.Parts.Count);
|
|
Assert.Equal(original.Request.Parts[0].DxfPath, loaded.Request.Parts[0].DxfPath);
|
|
Assert.Equal(original.Request.Parts[0].Quantity, loaded.Request.Parts[0].Quantity);
|
|
|
|
Assert.NotNull(loaded.Nest);
|
|
Assert.Single(loaded.Nest.Plates);
|
|
}
|
|
finally
|
|
{
|
|
File.Delete(path);
|
|
}
|
|
}
|
|
}
|