mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-04 16:01:35 -05:00
Priority worked like a rank (lower first) with a default of 0, and the Edit Drawing form stopped at 0, so moving one part ahead of the rest meant renumbering every other drawing. Higher-first lets a user raise a single part to 1 and leave everything else at the default. Every engine, filler and candidate comparer now serves the highest tier first. Stored values keep their order: - .nest files add `nestPriority` and keep writing the negated value under `priority`, so older readers nest in the same order; files without `nestPriority` are negated on read. Drawing packages strip both, so package hashes are unchanged. - Library settings send both keys the same way for older clients. - Server schema v18 negates stored drawing priorities (an older server refuses the upgraded database). - Job documents move to version 2; version 1 jobs are converted, and an older worker refuses version 2 instead of reversing the order. The Edit Drawing form now accepts negative priorities and says higher numbers nest first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
40 lines
1.2 KiB
C#
40 lines
1.2 KiB
C#
using System.Text.Json;
|
|
using OpenNest.Data;
|
|
|
|
namespace OpenNest.Tests.Data;
|
|
|
|
/// <summary>
|
|
/// Library settings carry priority (higher first) as <c>nestPriority</c> and keep the
|
|
/// lower-first legacy value under <c>priority</c>, which older clients read and send.
|
|
/// </summary>
|
|
public class DrawingNestingSettingsPriorityTests
|
|
{
|
|
private static readonly JsonSerializerOptions Web = new(JsonSerializerDefaults.Web);
|
|
|
|
[Fact]
|
|
public void WritesTheLegacyValueBeforeTheNewOne()
|
|
{
|
|
var json = JsonSerializer.Serialize(new DrawingNestingSettings { Priority = 4 }, Web);
|
|
|
|
Assert.Contains("\"priority\":-4,\"nestPriority\":4", json);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReadsAnOlderClientsLegacyValue()
|
|
{
|
|
var settings = JsonSerializer.Deserialize<DrawingNestingSettings>("""{"cutFirst":true,"priority":2}""", Web)!;
|
|
|
|
Assert.Equal(-2, settings.Priority);
|
|
}
|
|
|
|
[Fact]
|
|
public void RoundTripsAndStaysEqual()
|
|
{
|
|
var settings = new DrawingNestingSettings { Priority = 7, CutFirst = true };
|
|
|
|
var back = JsonSerializer.Deserialize<DrawingNestingSettings>(JsonSerializer.Serialize(settings, Web), Web);
|
|
|
|
Assert.Equal(settings, back);
|
|
}
|
|
}
|