From aca468c01596668c382c868102d28e2eb002ff57 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Tue, 16 May 2023 18:05:35 +0300 Subject: [PATCH] Add Workbook read tests --- RhSolutions.Tests/CanReadProducts.cs | 13 ++++++++----- RhSolutions.Tests/RhSolutions.Tests.csproj | 2 +- .../Specifications/HeatingFloor.xlsx | Bin 10391 -> 0 bytes .../TestWorkbooks/TestSpecificaion.xlsx | Bin 0 -> 11742 bytes 4 files changed, 9 insertions(+), 6 deletions(-) delete mode 100644 RhSolutions.Tests/TestWorkbooks/Specifications/HeatingFloor.xlsx create mode 100644 RhSolutions.Tests/TestWorkbooks/TestSpecificaion.xlsx diff --git a/RhSolutions.Tests/CanReadProducts.cs b/RhSolutions.Tests/CanReadProducts.cs index 1fa7357..df0ce73 100644 --- a/RhSolutions.Tests/CanReadProducts.cs +++ b/RhSolutions.Tests/CanReadProducts.cs @@ -45,14 +45,17 @@ public class CanReadProducts : IDisposable Assert.Equal(3, products.Count()); } - [ExcelFact(Workbook = @"TestWorkbooks\Specifications\HeatingFloor.xlsx")] + [ExcelFact(Workbook = @"TestWorkbooks\TestSpecificaion.xlsx")] public void CanReadWorkbook() { Worksheet worksheet = Util.Workbook.Worksheets[1]; - var products = _reader.ReadProducts(new[] { worksheet }); - - Assert.NotNull(products); - Assert.NotEmpty(products); + var result = _reader.ReadProducts(new[] { worksheet }); + Assert.NotNull(result); + Assert.NotEmpty(result); + Assert.Equal("TestSpecificaion", result.First().Item1); + var products = result.First().Item2; + Assert.Equal(46, products.Count()); + Assert.Equal(29266, products.Sum(p => p.Value)); } public void Dispose() diff --git a/RhSolutions.Tests/RhSolutions.Tests.csproj b/RhSolutions.Tests/RhSolutions.Tests.csproj index 63b9ae5..c1a28e0 100644 --- a/RhSolutions.Tests/RhSolutions.Tests.csproj +++ b/RhSolutions.Tests/RhSolutions.Tests.csproj @@ -27,7 +27,7 @@ PreserveNewest - + Always diff --git a/RhSolutions.Tests/TestWorkbooks/Specifications/HeatingFloor.xlsx b/RhSolutions.Tests/TestWorkbooks/Specifications/HeatingFloor.xlsx deleted file mode 100644 index 20416e01a6ac50ae650220b30592d0405647df06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10391 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 lh5y|e{uR#g{x9%9Y@?zK_}lIR05ESqzcYN#GDV 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 literal 0 HcmV?d00001