Add logic for import of combination from xls files

This commit is contained in:
Evgeny Redikultsev
2025-01-18 22:13:11 +05:00
parent 13c3022c2f
commit f508399846
43 changed files with 1140 additions and 227 deletions

View File

@@ -0,0 +1,84 @@
using NUnit.Framework;
using Moq;
using System.IO;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models;
namespace StructureHelperTests.UnitTests.ForcesTests
{
[TestFixture]
public class CheckColumnedFilePropertyLogicTests
{
private Mock<IShiftTraceLogger> _mockTraceLogger;
private Mock<IColumnedFileProperty> _mockFileProperty;
private CheckColumnedFilePropertyLogic _logic;
[SetUp]
public void SetUp()
{
_mockTraceLogger = new Mock<IShiftTraceLogger>();
_mockFileProperty = new Mock<IColumnedFileProperty>();
_logic = new CheckColumnedFilePropertyLogic
{
TraceLogger = _mockTraceLogger.Object,
Entity = _mockFileProperty.Object
};
}
[Test]
public void Check_ShouldReturnTrue_WhenFileExistsAndSkipRowsAreValid()
{
// Arrange
_mockFileProperty.Setup(x => x.SkipRowBeforeHeaderCount).Returns(1);
_mockFileProperty.Setup(x => x.SkipRowHeaderCount).Returns(1);
_mockFileProperty.Setup(x => x.FilePath).Returns("tmp_valid_file.xlsx");
File.Create("tmp_valid_file.xlsx").Dispose(); // Create a temporary file
// Act
var result = _logic.Check();
// Assert
Assert.That(result, Is.True);
// Cleanup
File.Delete("tmp_valid_file.xlsx");
}
[Test]
public void Check_ShouldReturnFalse_WhenSkipRowsAreNegative()
{
// Arrange
_mockFileProperty.Setup(x => x.SkipRowBeforeHeaderCount).Returns(-1);
_mockFileProperty.Setup(x => x.SkipRowHeaderCount).Returns(-1);
// Act
var result = _logic.Check();
// Assert
Assert.That(result, Is.False);
Assert.That(_logic.CheckResult, Does.Contain("skip row count must be greater or equal to 0"));
_mockTraceLogger.Verify(x => x.AddMessage(It.IsAny<string>(), TraceLogStatuses.Error), Times.Once);
}
[Test]
public void Check_ShouldReturnFalse_WhenFileDoesNotExist()
{
// Arrange
_mockFileProperty.Setup(x => x.SkipRowBeforeHeaderCount).Returns(1);
_mockFileProperty.Setup(x => x.SkipRowHeaderCount).Returns(1);
_mockFileProperty.Setup(x => x.FilePath).Returns("non_existent_file.xlsx");
// Act
var result = _logic.Check();
// Assert
Assert.That(result, Is.False);
Assert.That(_logic.CheckResult, Does.Contain("File non_existent_file.xlsx does not exist"));
_mockTraceLogger.Verify(x => x.AddMessage(It.IsAny<string>(), TraceLogStatuses.Error), Times.Once);
}
}
}

View File

@@ -0,0 +1,59 @@
using NUnit.Framework;
using Moq;
using System.Text;
using ExcelDataReader;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models;
namespace StructureHelperTests.UnitTests.ForcesTests
{
[TestFixture]
public class GetTupleByExcelReaderLogicTests
{
private Mock<IShiftTraceLogger> _mockTraceLogger;
private Mock<IColumnedFileProperty> _mockFileProperty;
private Mock<IExcelDataReader> _mockReader;
private Mock<IFillTupleArrayByColumnNameLogic> _mockFillArray;
private GetTupleByExcelReaderLogic _logic;
[SetUp]
public void SetUp()
{
_mockTraceLogger = new Mock<IShiftTraceLogger>();
_mockFileProperty = new Mock<IColumnedFileProperty>();
_mockReader = new Mock<IExcelDataReader>();
_mockFillArray = new Mock<IFillTupleArrayByColumnNameLogic>();
_logic = new GetTupleByExcelReaderLogic(_mockFillArray.Object)
{
TraceLogger = _mockTraceLogger.Object,
ForceFileProperty = _mockFileProperty.Object
};
}
[Test]
public void GetForceTuple_ShouldReturnForceTuple_WhenDataIsValid()
{
// Arrange
var columnProperties = new List<IColumnProperty>
{
new Mock<IColumnProperty>().SetupAllProperties().Object
};
_mockFileProperty.Setup(x => x.ColumnProperties).Returns(columnProperties);
_mockFileProperty.Setup(x => x.GlobalFactor).Returns(1.0);
_mockFillArray.Setup(x => x.ProceeForceTupleArray(It.IsAny<double[]>(), It.IsAny<double>(), It.IsAny<string>(),It.IsAny<string>()));
_mockReader.Setup(x => x.GetValue(It.IsAny<int>())).Returns("1");
// Act
var result = _logic.GetForceTuple(_mockReader.Object);
// Assert
Assert.That(result, Is.InstanceOf<IForceTuple>());
}
}
}

View File

@@ -0,0 +1,119 @@
using NUnit.Framework;
using Moq;
using System.Collections.Generic;
using System.Text;
using System.IO;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Infrastructures.Exceptions;
namespace StructureHelperTests.UnitTests.ForcesTests
{
[TestFixture]
public class GetTuplesFromFileLogicTests
{
private Mock<IGetTupleByExcelReaderLogic> _mockExcelReaderLogic;
private Mock<ICheckEntityLogic<IColumnedFileProperty>> _mockCheckEntityLogic;
private Mock<IShiftTraceLogger> _mockTraceLogger;
private GetTuplesFromFileLogic _logic;
[SetUp]
public void SetUp()
{
_mockExcelReaderLogic = new Mock<IGetTupleByExcelReaderLogic>();
_mockCheckEntityLogic = new Mock<ICheckEntityLogic<IColumnedFileProperty>>();
_mockTraceLogger = new Mock<IShiftTraceLogger>();
_logic = new GetTuplesFromFileLogic(
_mockExcelReaderLogic.Object,
_mockCheckEntityLogic.Object
)
{
TraceLogger = _mockTraceLogger.Object
};
}
[Test]
public void GetTuples_ShouldReturnListOfForceTuples_WhenDataIsValid()
{
// Arrange
var mockFileProperty = new Mock<IColumnedFileProperty>();
mockFileProperty.Setup(x => x.FilePath).Returns("valid_file.xlsx");
mockFileProperty.Setup(x => x.SkipRowBeforeHeaderCount).Returns(2);
mockFileProperty.Setup(x => x.SkipRowHeaderCount).Returns(1);
_logic.ForceFileProperty = mockFileProperty.Object;
var mockForceTuple = new Mock<IForceTuple>();
var forceTuples = new List<IForceTuple> { mockForceTuple.Object };
_mockCheckEntityLogic.Setup(x => x.Check()).Returns(true);
_mockExcelReaderLogic.Setup(x => x.GetForceTuple(It.IsAny<ExcelDataReader.IExcelDataReader>())).Returns(mockForceTuple.Object);
// Mock file reading and ExcelReader behavior
var fileStream = new MemoryStream(Encoding.UTF8.GetBytes("mock data"));
FileStream mockStream = MockFileHelper.CreateMockFileStream(fileStream);
// Act
var result = _logic.GetTuples();
// Assert
Assert.That(result, Is.Not.Null);
Assert.That(result.Count, Is.EqualTo(forceTuples.Count));
_mockCheckEntityLogic.Verify(x => x.Check(), Times.Once);
_mockExcelReaderLogic.Verify(x => x.GetForceTuple(It.IsAny<ExcelDataReader.IExcelDataReader>()), Times.AtLeastOnce);
}
[Test]
public void GetTuples_ShouldThrowException_WhenCheckFails()
{
// Arrange
_mockCheckEntityLogic.Setup(x => x.Check()).Returns(false);
_mockCheckEntityLogic.Setup(x => x.CheckResult).Returns("Invalid file property");
// Act & Assert
var ex = Assert.Throws<StructureHelperException>(() => _logic.GetTuples());
Assert.That(ex.Message, Is.EqualTo("Invalid file property"));
}
[Test]
public void GetTuples_ShouldLogErrorAndThrowException_WhenExceptionOccursInDataProcessing()
{
// Arrange
var mockFileProperty = new Mock<IColumnedFileProperty>();
mockFileProperty.Setup(x => x.FilePath).Returns("valid_file.xlsx");
mockFileProperty.Setup(x => x.SkipRowBeforeHeaderCount).Returns(1);
mockFileProperty.Setup(x => x.SkipRowHeaderCount).Returns(1);
_logic.ForceFileProperty = mockFileProperty.Object;
_mockCheckEntityLogic.Setup(x => x.Check()).Returns(true);
_mockExcelReaderLogic.Setup(x => x.GetForceTuple(It.IsAny<ExcelDataReader.IExcelDataReader>()))
.Throws(new StructureHelperException("Mock exception"));
// Act & Assert
var ex = Assert.Throws<StructureHelperException>(() => _logic.GetTuples());
Assert.That(ex.Message, Does.Contain("Mock exception"));
_mockTraceLogger.Verify(x => x.AddMessage(It.IsAny<string>(), TraceLogStatuses.Error), Times.AtLeastOnce);
}
public static class MockFileHelper
{
public static FileStream CreateMockFileStream(Stream inputStream)
{
var tempFilePath = Path.GetTempFileName();
using (var fileStream = File.Create(tempFilePath))
{
inputStream.CopyTo(fileStream);
}
return new FileStream(tempFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096, FileOptions.DeleteOnClose);
}
}
}
}