Add logic for import of combination from xls files
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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>());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user