mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-03 13:31:39 -05:00
Nine persistence test classes turned a nest or a single drawing into archive bytes with their own Write helpers, and one kept a private copy of NestJson. They now use NestArchiveJson.ArchiveBytes and NestJson. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
106 lines
3.9 KiB
C#
106 lines
3.9 KiB
C#
using OpenNest.Dimensions;
|
|
using static OpenNest.IO.Tests.NestArchiveJson;
|
|
|
|
namespace OpenNest.IO.Tests;
|
|
|
|
public class DimensionPersistenceTests
|
|
{
|
|
private static Drawing WithDimensions()
|
|
{
|
|
var drawing = DrawingPackageFixture.Build();
|
|
drawing.Dimensions.Add(new DrawingDimension { Kind = DimensionKind.OverallHorizontal, Offset = -1.25 });
|
|
drawing.Dimensions.Add(new DrawingDimension { Kind = DimensionKind.OverallVertical, Offset = 0.75 });
|
|
return drawing;
|
|
}
|
|
|
|
[Fact]
|
|
public void Dimensions_RoundTripEveryField()
|
|
{
|
|
var (restored, warnings) = RoundTrip(ArchiveBytes(WithDimensions()));
|
|
|
|
Assert.Empty(warnings);
|
|
var dimensions = Assert.Single(restored.Drawings).Dimensions;
|
|
Assert.Equal(2, dimensions.Count);
|
|
Assert.Equal(DimensionKind.OverallHorizontal, dimensions[0].Kind);
|
|
Assert.Equal(-1.25, dimensions[0].Offset);
|
|
Assert.Equal(DimensionKind.OverallVertical, dimensions[1].Kind);
|
|
Assert.Equal(0.75, dimensions[1].Offset);
|
|
}
|
|
|
|
[Fact]
|
|
public void NoDimensions_AreOmittedFromTheFile()
|
|
{
|
|
var archive = ArchiveBytes(DrawingPackageFixture.Build());
|
|
|
|
Assert.False(NestJson(archive)["drawings"]![0]!.AsObject().ContainsKey("dimensions"));
|
|
Assert.Empty(Assert.Single(RoundTrip(archive).Nest.Drawings).Dimensions);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("kind", "Radial")]
|
|
[InlineData("kind", "0")]
|
|
[InlineData("offset", 0.0)]
|
|
public void UnreadableDimension_IsDroppedWithAWarning_AndTheRestLoad(string field, object value)
|
|
{
|
|
var archive = ArchiveBytes(WithDimensions());
|
|
var json = NestJson(archive);
|
|
json["drawings"]![0]!["dimensions"]![0]![field] = value is string text ? text : (double)value;
|
|
|
|
var (restored, warnings) = RoundTrip(ReplaceNestJson(archive, json));
|
|
|
|
var dimension = Assert.Single(Assert.Single(restored.Drawings).Dimensions);
|
|
Assert.Equal(DimensionKind.OverallVertical, dimension.Kind);
|
|
Assert.Contains(warnings, w => w.Contains("dimension 1 could not be read"));
|
|
}
|
|
|
|
private static Drawing WithRadial()
|
|
{
|
|
var drawing = DrawingPackageFixture.Build();
|
|
drawing.Dimensions.Add(new DrawingDimension { Kind = DimensionKind.OverallHorizontal, Offset = -1.25 });
|
|
drawing.Dimensions.Add(new DrawingDimension
|
|
{
|
|
Kind = DimensionKind.Diameter,
|
|
EntityId = RadialId,
|
|
Angle = 0.75,
|
|
Offset = 0.5,
|
|
});
|
|
return drawing;
|
|
}
|
|
|
|
private static readonly Guid RadialId = Guid.Parse("6d6f0d55-2f5b-4e83-9d1e-5a0b8f1c2a11");
|
|
|
|
[Fact]
|
|
public void RadialDimensions_RoundTripTheirCurveAndAngle_AndOverallOnesOmitThem()
|
|
{
|
|
var archive = ArchiveBytes(WithRadial());
|
|
var json = NestJson(archive)["drawings"]![0]!["dimensions"]!;
|
|
|
|
Assert.False(json[0]!.AsObject().ContainsKey("entityId"));
|
|
Assert.False(json[0]!.AsObject().ContainsKey("angle"));
|
|
|
|
var (restored, warnings) = RoundTrip(archive);
|
|
Assert.Empty(warnings);
|
|
var radial = Assert.Single(restored.Drawings).Dimensions[1];
|
|
Assert.Equal(DimensionKind.Diameter, radial.Kind);
|
|
Assert.Equal(RadialId, radial.EntityId);
|
|
Assert.Equal(0.75, radial.Angle);
|
|
Assert.Equal(0.5, radial.Offset);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("entityId")]
|
|
[InlineData("angle")]
|
|
public void RadialDimensionWithoutItsCurveOrAngle_IsDroppedWithAWarning(string field)
|
|
{
|
|
var archive = ArchiveBytes(WithRadial());
|
|
var json = NestJson(archive);
|
|
json["drawings"]![0]!["dimensions"]![1]!.AsObject().Remove(field);
|
|
|
|
var (restored, warnings) = RoundTrip(ReplaceNestJson(archive, json));
|
|
|
|
var dimension = Assert.Single(Assert.Single(restored.Drawings).Dimensions);
|
|
Assert.Equal(DimensionKind.OverallHorizontal, dimension.Kind);
|
|
Assert.Contains(warnings, w => w.Contains("dimension 2 could not be read"));
|
|
}
|
|
}
|