From 93195a9cc90b6ebf3e1ecdbd618a5e6a800956b7 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Thu, 6 Apr 2023 21:38:11 +0300 Subject: [PATCH] Add Tests --- RhSolutions.Tests/CanReadProducts.cs | 63 ++++++++++++++++++ RhSolutions.Tests/RhSolutions.Tests.csproj | 3 + .../Specifications/HeatingFloor.xlsx | Bin 0 -> 10005 bytes RhSolutions.Tests/WorkbookValidationTests.cs | 16 +++-- 4 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 RhSolutions.Tests/CanReadProducts.cs create mode 100644 RhSolutions.Tests/TestWorkbooks/Specifications/HeatingFloor.xlsx diff --git a/RhSolutions.Tests/CanReadProducts.cs b/RhSolutions.Tests/CanReadProducts.cs new file mode 100644 index 0000000..e9be68c --- /dev/null +++ b/RhSolutions.Tests/CanReadProducts.cs @@ -0,0 +1,63 @@ +using Microsoft.Extensions.DependencyInjection; +using RhSolutions.AddIn; + +namespace RhSolutions.Tests; + +[ExcelTestSettings(OutOfProcess = true)] +public class CanReadProducts : IDisposable +{ + private RhSolutionsAddIn _addIn; + private IExcelReader _reader; + private Workbook _testWorkbook; + + public CanReadProducts() + { + _addIn = new(); + _testWorkbook = Util.Application.Workbooks.Add(); + _addIn.AutoOpen(); + _reader = RhSolutionsAddIn.ServiceProvider.GetRequiredService(); + } + + [ExcelFact] + public void CanReadRange() + { + Worksheet worksheet = _testWorkbook.Sheets[1]; + worksheet.Range["A1"].Value = "11600011001"; + worksheet.Range["A2"].Value = "11600011001"; + worksheet.Range["A3"].Value = "160002-001"; + worksheet.Range["A4"].Value = "Fuzz"; + worksheet.Range["B1"].Value = 10; + worksheet.Range["B2"].Value = 10; + worksheet.Range["B3"].Value = 5; + worksheet.Range["B5"].Value = 1000_000; + worksheet.Range["A6"].Value = "111111-111"; + worksheet.Range["B6"].Value = 100; + + Range testRange = worksheet.Range["A1:B6"]; + + var products = _reader.ReadProducts(testRange); + + Assert.NotNull(products); + Assert.NotEmpty(products); + Assert.Equal("11600011001", products.First().Key.ProductSku); + Assert.Equal(20.0, products.First().Value); + Assert.Equal(125.0, products.Sum(p => p.Value)); + Assert.Equal(3, products.Count()); + } + + [ExcelFact(Workbook = @"TestWorkbooks\Specifications\HeatingFloor.xlsx")] + public void CanReadWorkbook() + { + Worksheet worksheet = Util.Workbook.Worksheets[1]; + var products = _reader.ReadProducts(new[] { worksheet }); + + Assert.NotNull(products); + Assert.NotEmpty(products); + } + + public void Dispose() + { + _addIn.AutoClose(); + Util.Application.ActiveWindow.Close(SaveChanges: false); + } +} \ No newline at end of file diff --git a/RhSolutions.Tests/RhSolutions.Tests.csproj b/RhSolutions.Tests/RhSolutions.Tests.csproj index 9410802..63b9ae5 100644 --- a/RhSolutions.Tests/RhSolutions.Tests.csproj +++ b/RhSolutions.Tests/RhSolutions.Tests.csproj @@ -27,6 +27,9 @@ PreserveNewest + + Always + diff --git a/RhSolutions.Tests/TestWorkbooks/Specifications/HeatingFloor.xlsx b/RhSolutions.Tests/TestWorkbooks/Specifications/HeatingFloor.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f0b76f35da4c6b0e5d2275fdae3bd3d96b9fc760 GIT binary patch literal 10005 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