using System.Reflection; using System.Windows.Forms; using OpenNest.Converters; using OpenNest.Data; using OpenNest.Forms; using OpenNest.Geometry; using OpenNest.IO; using OpenNest.IO.Bom; using OpenNest.Tests.Data; using DrawingSetBrowser = OpenNest.Controls.DrawingSetBrowser; namespace OpenNest.WinForms.Tests.Forms; /// Drawing Sets > More > Import BOM: a BOM becomes a prefilled set, and nothing is stored unasked. public sealed class ImportBomToSetFormTests : IDisposable { private const string Server = "http://library.test:8090"; private static readonly TimeSpan TestTimeout = TimeSpan.FromSeconds(60); private readonly string folder = Path.Combine(Path.GetTempPath(), "bom-to-set-" + Guid.NewGuid().ToString("N")); public ImportBomToSetFormTests() { Directory.CreateDirectory(folder); WriteSquare("PT01", 2); WriteSquare("PT02", 3); } public void Dispose() { if (Directory.Exists(folder)) Directory.Delete(folder, recursive: true); } [Fact] public void ImportBom_OpensTheEditorPrefilled_AndCancellingItStoresNoSet() { StaTestThread.Run( () => { var library = new InMemoryDrawingLibrary(); // PT01 was imported from this file before; the import reuses it as it is. var existing = library.Seed("PT01", "Steel", 0.25, Package("PT01"), customer: "Synthetic Co"); var sets = new InMemoryDrawingSets(); var confirmations = new List(); var editorChecked = false; using var form = new DrawingSetsForm(sets, library, Server); var browser = form.Browser; browser.ShowMessage = (text, _, _) => throw new Xunit.Sdk.XunitException(text); browser.ImportBom = () => { using var import = new ImportBomToSetForm(sets, library, Units.Inches, CutType.Laser, "synthetic operator"); import.ShowMessage = (text, _, _) => { confirmations.Add(text); return DialogResult.OK; }; import.Show(); Field(import, "customerBox").Text = "Synthetic Co"; Field(import, "nameBox").Text = "Job 7"; Run(import.AnalyzeAsync(Items(), folder, "Job 7 BOM.xlsx")); var grid = Field(import, "drawingGrid"); Assert.Equal( new[] { "In the library (revision 1)", "New library drawing", "Not imported: no drawing file found" }, grid.Rows.Cast().Select(r => r.Cells["libraryColumn"].Value)); Assert.Contains("no material or thickness", Field