Files
OpenNest/OpenNest.Tests/Data/NestMaterialSelectionTests.cs
T
ajandClaude Opus 5.5 7bf753ce17 feat(storage): record material grade on server nests and pick it in Nest Info
Nest records gain a materialGrade field (server schema v8, blank for existing
rows) that is searched, sorted and versioned like the other metadata. The
Nest Info dialog gets a grade picker listing the machine configs' grades for
the chosen material; density survives only an unchanged name and grade. A
blank recorded grade keeps the archive's grade while the name matches, so
records saved before v8 do not lose it on open. Saved Nests shows a Grade column.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 23:37:57 -04:00

152 lines
4.5 KiB
C#

using OpenNest.Data;
namespace OpenNest.Tests.Data;
public class NestMaterialSelectionTests
{
[Fact]
public void Apply_UnchangedNameAndGrade_KeepsDensity()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.Apply(current, "Stainless", "304");
Assert.Equal("Stainless", result.Name);
Assert.Equal("304", result.Grade);
Assert.Equal(0.289, result.Density);
}
[Fact]
public void Apply_NameDifferingOnlyInSpacingAndCase_KeepsGradeAndDensityAndTakesTypedName()
{
var current = new Material("Cold Rolled Steel", "1008", 0.284);
var result = NestMaterialSelection.Apply(current, " cold rolled\tsteel ", "1008");
Assert.Equal(" cold rolled\tsteel ", result.Name);
Assert.Equal("1008", result.Grade);
Assert.Equal(0.284, result.Density);
}
[Fact]
public void Apply_ChangedName_GetsNameOnly()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.Apply(current, "Aluminum", "");
Assert.Equal("Aluminum", result.Name);
Assert.True(string.IsNullOrEmpty(result.Grade));
Assert.Equal(0, result.Density);
}
[Fact]
public void Apply_ClearedName_GetsEmptyNameOnly()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.Apply(current, "", "");
Assert.Equal("", result.Name);
Assert.True(string.IsNullOrEmpty(result.Grade));
Assert.Equal(0, result.Density);
}
[Fact]
public void Apply_NoCurrentMaterial_GetsNameOnly()
{
var result = NestMaterialSelection.Apply(null, "Stainless", null);
Assert.Equal("Stainless", result.Name);
Assert.True(string.IsNullOrEmpty(result.Grade));
Assert.Equal(0, result.Density);
}
[Fact]
public void Apply_ReturnsCopy_LeavingCurrentMaterialUnchanged()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.Apply(current, "stainless", "304");
result.Grade = "316";
result.Density = 1;
Assert.NotSame(current, result);
Assert.Equal("Stainless", current.Name);
Assert.Equal("304", current.Grade);
Assert.Equal(0.289, current.Density);
}
[Fact]
public void Apply_ChangedGrade_TakesGradeWithoutDensity()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.Apply(current, "Stainless", "316");
Assert.Equal("Stainless", result.Name);
Assert.Equal("316", result.Grade);
Assert.Equal(0, result.Density);
}
[Fact]
public void Apply_ChangedNameWithGrade_TakesNameAndGrade()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.Apply(current, "Aluminum", "5052");
Assert.Equal("Aluminum", result.Name);
Assert.Equal("5052", result.Grade);
Assert.Equal(0, result.Density);
}
[Theory]
[InlineData("")]
[InlineData(null)]
public void ApplyRecorded_BlankGradeWithSameName_KeepsArchivedGradeAndDensity(string? recordedGrade)
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.ApplyRecorded(current, "stainless", recordedGrade);
Assert.Equal("stainless", result.Name);
Assert.Equal("304", result.Grade);
Assert.Equal(0.289, result.Density);
}
[Fact]
public void ApplyRecorded_BlankGradeWithChangedName_GetsNameOnly()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.ApplyRecorded(current, "Aluminum", "");
Assert.Equal("Aluminum", result.Name);
Assert.Equal("", result.Grade);
Assert.Equal(0, result.Density);
}
[Fact]
public void ApplyRecorded_RecordedGrade_Wins()
{
var current = new Material("Stainless", "304", 0.289);
var result = NestMaterialSelection.ApplyRecorded(current, "Stainless", "316");
Assert.Equal("316", result.Grade);
Assert.Equal(0, result.Density);
}
[Theory]
[InlineData("Carbon Steel", "CARBON STEEL")]
[InlineData(" carbon \t steel\n", "CARBON STEEL")]
[InlineData("", "")]
[InlineData(" ", "")]
[InlineData(null, "")]
public void SharedListNamesKey_TrimsCollapsesWhitespaceAndUppercases(string? name, string expected)
{
Assert.Equal(expected, SharedListNames.Key(name));
}
}