using Moq; using NUnit.Framework; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Materials; using StructureHelperLogics.Models.Materials; namespace StructureHelperTests.UnitTests.MaterialTests { [TestFixture] public class ReinforcementLibUpdateStrategyTests { private Mock> libUpdateStrategyMock; private ReinforcementLibUpdateStrategy strategy; [SetUp] public void SetUp() { libUpdateStrategyMock = new Mock>(); strategy = new ReinforcementLibUpdateStrategy(libUpdateStrategyMock.Object); } [Test] public void Update_SourceIsNull_Throws() { // Arrange var target = new Mock().Object; // Act & Assert Assert.Throws(() => strategy.Update(target, null)); } [Test] public void Update_TargetIsNull_Throws() { // Arrange var source = new Mock().Object; // Act & Assert Assert.Throws(() => strategy.Update(null, source)); } [Test] public void Update_SourceAndTargetAreSameInstance_DoesNothing() { // Arrange var materialMock = new Mock(); // Act strategy.Update(materialMock.Object, materialMock.Object); // Assert libUpdateStrategyMock.Verify( x => x.Update(It.IsAny(), It.IsAny()), Times.Never); } [Test] public void Update_ValidObjects_DelegatesToLibMaterialUpdateStrategy() { // Arrange var sourceMock = new Mock(); var targetMock = new Mock(); // Act strategy.Update(targetMock.Object, sourceMock.Object); // Assert libUpdateStrategyMock.Verify( x => x.Update(targetMock.Object, sourceMock.Object), Times.Once); } } }