From 7a7cdaab581adc3eff9f1b69722aeaf17ff31314 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Mon, 22 May 2023 08:05:44 +0300 Subject: [PATCH] Add Magic reader test --- RhSolutions.Tests/CanDoMagic.cs | 44 ++++++++++++++++++ .../TargetSpecificationMagic.xlsx | Bin 0 -> 11597 bytes .../TestWorkbooks/TestSpecificationMagic.xlsx | Bin 0 -> 11669 bytes 3 files changed, 44 insertions(+) create mode 100644 RhSolutions.Tests/CanDoMagic.cs create mode 100644 RhSolutions.Tests/TestWorkbooks/TargetSpecificationMagic.xlsx create mode 100644 RhSolutions.Tests/TestWorkbooks/TestSpecificationMagic.xlsx diff --git a/RhSolutions.Tests/CanDoMagic.cs b/RhSolutions.Tests/CanDoMagic.cs new file mode 100644 index 0000000..7988724 --- /dev/null +++ b/RhSolutions.Tests/CanDoMagic.cs @@ -0,0 +1,44 @@ +using Microsoft.Extensions.DependencyInjection; +using RhSolutions.AddIn; +using System.IO; + +namespace RhSolutions.Tests; + +[ExcelTestSettings(OutOfProcess = true)] +public class CanDoMagic : IDisposable +{ + private RhSolutionsAddIn _addIn; + private ReaderFactory _readerFactory; + private IReader _reader; + + public CanDoMagic() + { + _addIn = new(); + _addIn.AutoOpen(); + _readerFactory = RhSolutionsAddIn.ServiceProvider.GetRequiredService(); + _reader = _readerFactory.GetReader("Magic"); + } + + [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationMagic.xlsx")] + public void CanWrite() + { + Worksheet sourceSheet = Util.Workbook.Worksheets[1]; + RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationMagic.xlsx")); + var products = _reader.ReadProducts(new[] { sourceSheet }); + var _writer = new ExcelWriter(Util.Application, RhSolutionsAddIn.Configuration); + _writer.WriteProducts(products); + Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; + var targetProducts = _reader.ReadProducts(new[] { targetSheet }); + + Assert.Equal("TestSpecificationMagic", products.First().Item1); + Assert.Equal("TargetSpecificationMagic", targetProducts.First().Item1); + Assert.Equal(products.First().Item2.Count(), targetProducts.First().Item2.Count()); + Assert.Equal(products.First().Item2.Values.Sum(), targetProducts.First().Item2.Values.Sum()); + } + + public void Dispose() + { + _addIn.AutoClose(); + Util.Application.ActiveWindow.Close(SaveChanges: false); + } +} diff --git a/RhSolutions.Tests/TestWorkbooks/TargetSpecificationMagic.xlsx b/RhSolutions.Tests/TestWorkbooks/TargetSpecificationMagic.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e7bae5f986728a7a89e42649b35908c9f22bbcde GIT binary patch literal 11597 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 literal 0 HcmV?d00001 diff --git a/RhSolutions.Tests/TestWorkbooks/TestSpecificationMagic.xlsx b/RhSolutions.Tests/TestWorkbooks/TestSpecificationMagic.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d268c3ede9ccfab7d46c8696f34782041c05a219 GIT binary patch literal 11669 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 Ix<9`CKXM4fM*si- literal 0 HcmV?d00001