using Microsoft.Extensions.DependencyInjection; using RhSolutions.AddIn; using System.IO; namespace RhSolutions.Tests; [ExcelTestSettings(OutOfProcess = true)] public class CanWriteProducts : IDisposable { private RhSolutionsAddIn _addIn; private IReader _reader; public CanWriteProducts() { _addIn = new(); _addIn.AutoOpen(); _reader = new ExcelReader(Util.Application, RhSolutionsAddIn.Configuration); } [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecification.xlsx")] public void CanWriteSingle() { Worksheet sourceSheet = Util.Workbook.Worksheets[1]; RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecification.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("TestSpecification", products.First().Item1); Assert.Equal("TargetSpecification", 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()); } [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationMultipleProductLines.xlsx")] public void CanWriteMultipleProductLines() { Worksheet sourceSheet = Util.Workbook.Worksheets[1]; RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationMultipleProductLines.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("TestSpecificationMultipleProductLines", products.First().Item1); Assert.Equal("TargetSpecificationMultipleProductLines", targetProducts.First().Item1); Assert.Equal(2, targetProducts.First().Item2.Count()); Assert.True(Enumerable.SequenceEqual(products.First().Item2, targetProducts.First().Item2)); } [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationNotFound.xlsx")] public void CanWriteNotFound() { Worksheet sourceSheet = Util.Workbook.Worksheets[1]; RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationNotFound.xlsx")); var products = _reader.ReadProducts(new[] { sourceSheet }); var _writer = new ExcelWriter(Util.Application, RhSolutionsAddIn.Configuration); _writer.WriteProducts(products); Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Assert.Equal("???", targetSheet.Range["B4"].Value2); Assert.Contains("Молот Тора", targetSheet.Range["C4"].Value2); Assert.Contains("15555551555", targetSheet.Range["C4"].Value2); } [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationReplaced.xlsx")] public void CanWriteReplaced() { Worksheet sourceSheet = Util.Workbook.Worksheets[1]; RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationReplaced.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("TestSpecificationReplaced", products.First().Item1); Assert.Equal("TargetSpecificationReplaced", targetProducts.First().Item1); var result = targetProducts.First().Item2.ToArray(); Assert.Contains("Молот Тора", result[0].Key.Name); Assert.Contains("15555551555", result[0].Key.Name); Assert.Equal(1, result[0].Value); Assert.Contains("Нога Вирта", result[1].Key.Name); Assert.Contains("17777771777", result[1].Key.Name); Assert.Equal(1, result[1].Value); } [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationNewVariant.xlsx")] public void CanWriteNewVariant() { Worksheet sourceSheet = Util.Workbook.Worksheets[1]; RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationNewVariant.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("TestSpecificationNewVariant", products.First().Item1); Assert.Equal("TargetSpecificationNewVariant", targetProducts.First().Item1); var result = targetProducts.First().Item2.ToArray(); Assert.Contains("Молот Тора", result[0].Key.Name); Assert.Contains("15555551555", result[0].Key.Name); Assert.Equal(1, result[0].Value); } public void Dispose() { _addIn.AutoClose(); Util.Application.ActiveWindow.Close(SaveChanges: false); } }