using ClosedXML.Excel; using JdeScoping.Core.Models.SearchResults; using JdeScoping.ExcelIO.Generators; using JdeScoping.ExcelIO.Mapping; using JdeScoping.ExcelIO.Mapping.Maps; using JdeScoping.ExcelIO.Options; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using NSubstitute; namespace JdeScoping.ExcelIO.Tests.Fixtures; public abstract class WorkbookFixtureBase : IDisposable { public XLWorkbook Workbook { get; } public SearchModel SearchModel { get; } protected abstract SearchModel CreateSearchModel(); protected WorkbookFixtureBase() { SearchModel = CreateSearchModel(); var service = CreateExportService(); var bytes = service.GenerateAsync(SearchModel).GetAwaiter().GetResult(); Workbook = new XLWorkbook(new MemoryStream(bytes)); } private static ExcelExportService CreateExportService() { var logger = Substitute.For>(); var options = Microsoft.Extensions.Options.Options.Create(new ExcelExportOptions { CriteriaSheetPassword = "TestCriteriaPass", DataSheetPassword = "TestDataPass" }); var registry = CreateTestRegistry(); var tableWriter = new FluentTableWriter(registry); var criteriaGenerator = new CriteriaSheetGenerator(options, tableWriter); return new ExcelExportService(logger, options, criteriaGenerator, tableWriter, registry); } private static ExcelMapRegistry CreateTestRegistry() { var registry = new ExcelMapRegistry(); registry.Register(new SearchResultMap()); registry.Register(new MisSearchResultMap()); registry.Register(new MisNonMatchSearchResultMap()); registry.Register(new TimespanFilterMap()); registry.Register(new WorkOrderFilterEntryMap()); registry.Register(new ItemNumberFilterEntryMap()); registry.Register(new ProfitCenterFilterEntryMap()); registry.Register(new WorkCenterFilterEntryMap()); registry.Register(new OperatorFilterEntryMap()); registry.Register(new ComponentLotFilterEntryMap()); registry.Register(new ItemOperationMisFilterEntryMap()); return registry; } public void Dispose() { Workbook.Dispose(); GC.SuppressFinalize(this); } }