Files
StructureHelper/StructureHelperTests/UnitTests/ConvertStrategiesTest/ProjectFromDTOConvertStrategyTests.cs
2024-11-09 21:52:05 +05:00

120 lines
4.4 KiB
C#

using DataAccess.DTOs;
using Moq;
using NUnit.Framework;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Analyses;
using StructureHelperCommon.Models.Projects;
namespace StructureHelperTests.UnitTests.ConvertStrategiesTest
{
[TestFixture]
public class ProjectFromDTOConvertStrategyTests
{
private Mock<IUpdateStrategy<IProject>> _mockUpdateStrategy;
private Mock<IDictionaryConvertStrategy<IVisualAnalysis, IVisualAnalysis>> _mockConvertLogic;
private Mock<IShiftTraceLogger> _mockTraceLogger;
private Dictionary<(Guid id, Type type), ISaveable> _referenceDictionary;
private ProjectFromDTOConvertStrategy _convertStrategy;
[SetUp]
public void SetUp()
{
_mockUpdateStrategy = new Mock<IUpdateStrategy<IProject>>();
_mockConvertLogic = new Mock<IDictionaryConvertStrategy<IVisualAnalysis, IVisualAnalysis>>();
_mockTraceLogger = new Mock<IShiftTraceLogger>();
_referenceDictionary = new Dictionary<(Guid, Type), ISaveable>();
_convertStrategy = new ProjectFromDTOConvertStrategy(
_mockUpdateStrategy.Object,
_mockConvertLogic.Object,
_referenceDictionary,
_mockTraceLogger.Object);
}
[Test]
public void GetNewItem_ShouldLogStartAndEndMessages()
{
// Arrange
var projectDto = new ProjectDTO
{
VisualAnalyses = new List<IVisualAnalysis> { new Mock<IVisualAnalysis>().Object }
};
_mockConvertLogic
.Setup(s => s.Convert(It.IsAny<IVisualAnalysis>()))
.Returns(new Mock<IVisualAnalysis>().Object);
// Act
var result = _convertStrategy.GetNewItem(projectDto);
// Assert
_mockTraceLogger.Verify(logger => logger.AddMessage("Converting of project is started"), Times.Once);
_mockTraceLogger.Verify(logger => logger.AddMessage("Converting of project has been finished successfully"), Times.Once);
}
[Test]
public void GetNewItem_ShouldLogWarningIfNoAnalyses()
{
// Arrange
var projectDto = new ProjectDTO
{
VisualAnalyses = Enumerable.Empty<IVisualAnalysis>().ToList()
};
// Act
var result = _convertStrategy.GetNewItem(projectDto);
// Assert
_mockTraceLogger.Verify(logger => logger.AddMessage("Project does not have any analyses, it is possible to work with project", TraceLogStatuses.Warning), Times.Once);
}
[Test]
public void GetAnalyses_ShouldConvertEachVisualAnalysisAndLogCount()
{
// Arrange
var projectDto = new ProjectDTO
{
VisualAnalyses = new List<IVisualAnalysis> { new Mock<IVisualAnalysis>().Object, new Mock<IVisualAnalysis>().Object }
};
var newItem = new Project();
_mockConvertLogic
.Setup(s => s.Convert(It.IsAny<IVisualAnalysis>()))
.Returns(new Mock<IVisualAnalysis>().Object);
// Act
var analyses = _convertStrategy.GetAnalyses(projectDto, newItem);
// Assert
Assert.AreEqual(projectDto.VisualAnalyses.Count, analyses.Count);
_mockConvertLogic.Verify(s => s.Convert(It.IsAny<IVisualAnalysis>()), Times.Exactly(projectDto.VisualAnalyses.Count));
_mockTraceLogger.Verify(logger => logger.AddMessage($"Source project has {projectDto.VisualAnalyses.Count} analyses"), Times.Once);
}
[Test]
public void GetAnalyses_ShouldLogConvertedAnalysisCount()
{
// Arrange
var projectDto = new ProjectDTO
{
VisualAnalyses = new List<IVisualAnalysis> { new Mock<IVisualAnalysis>().Object }
};
var newItem = new Project();
_mockConvertLogic
.Setup(s => s.Convert(It.IsAny<IVisualAnalysis>()))
.Returns(new Mock<IVisualAnalysis>().Object);
// Act
var result = _convertStrategy.GetNewItem(projectDto);
// Assert
_mockTraceLogger.Verify(logger => logger.AddMessage("Totaly 1 were(was) obtained"), Times.Once);
}
}
}