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