using System.Reflection; using System.Security.Cryptography; using System.Windows.Forms; using OpenNest.Data; using OpenNest.Forms; using OpenNest.IO; using OpenNest.Shapes; namespace OpenNest.WinForms.Tests.Forms; public class DrawingLibraryFormTests { private const string Server = "http://library.test:8090"; private static readonly TimeSpan TestTimeout = TimeSpan.FromSeconds(60); [Fact] public void ListsTheNestFilteredPage_AndAddThenAddAgainRaisesTheQuantity() { StaTestThread.Run( () => { var library = new FakeLibrary(); var record = library.Add("SYN-101", "Synthetic Steel", "Grade A", 0.25, Units.Inches, "Deburr both sides"); var nest = MatchingNest(); var messages = new List(); using var form = new DrawingLibraryForm(library, Server, nest); form.ShowMessage = (text, _, _) => { messages.Add(text); return DialogResult.OK; }; // Only the adds' downloads are counted here; the preview has its own test. form.LoadPreview = (_, _) => Task.FromResult(null!); form.Show(); var grid = Field(form, "drawingGrid"); var notes = Field(form, "notesBox"); var quantity = Field(form, "quantityBox"); PumpUntil(() => grid.Rows.Count == 1, "the library page"); var query = Assert.Single(library.Queries); Assert.Equal(("Synthetic Steel", "Grade A", (double?)0.25), (query.MaterialName, query.MaterialGrade, query.Thickness)); Assert.Equal("SYN-101", grid.Rows[0].Cells["nameColumn"].Value); Assert.Equal("Laser", grid.Rows[0].Cells["cutTypeColumn"].Value); Assert.Equal("Deburr both sides", notes.Text); quantity.Value = 3; Run(form.AddSelectedAsync()); quantity.Value = 2; Run(form.AddSelectedAsync()); Assert.Empty(messages); var drawing = Assert.Single(nest.Drawings); Assert.Equal(5, drawing.Quantity.Required); Assert.Equal((Server, record.Id, record.Revision), (drawing.Library!.ServerKey, drawing.Library.Id, drawing.Library.Revision)); Assert.Same(drawing, Assert.Single(form.AddedDrawings)); Assert.Equal(new[] { (record.Id, record.Revision), (record.Id, record.Revision) }, library.Downloads); }, TestTimeout, "The drawing library dialog test did not complete."); } [Fact] public void SelectingADrawing_ShowsItsDetailsAndPreviewsItsGeometry() { StaTestThread.Run( () => { var library = new FakeLibrary(); var record = library.Add("SYN-505", "Synthetic Steel", "Grade A", 0.25, Units.Inches, ""); var nest = MatchingNest(); using var form = new DrawingLibraryForm(library, Server, nest); form.ShowMessage = (text, _, _) => throw new Xunit.Sdk.XunitException(text); form.Show(); var grid = Field(form, "drawingGrid"); var preview = Field(form, "previewBox"); PumpUntil(() => grid.Rows.Count == 1, "the library page"); Assert.Equal("SYN-505", Field