2025-02-26 23:49:16 +04:00
|
|
|
|
using Moq;
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using CandyHouseBase.DataModels;
|
|
|
|
|
using CandyHouseBase.Enums;
|
|
|
|
|
using CandyHouseBase.Exceptions;
|
|
|
|
|
using CandyHouseBase.Extensions;
|
|
|
|
|
using CandyHouseBase.Implementations;
|
|
|
|
|
using CandyHouseBase.Interfaces.BusinessLogicsContracts;
|
|
|
|
|
using CandyHouseBase.Interfaces.StoragesContracts;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
|
|
|
|
namespace CandyHouseTests.BusinessLogicsContractsTests
|
|
|
|
|
{
|
|
|
|
|
[TestFixture]
|
|
|
|
|
internal class PositionBusinessLogicContractTests
|
|
|
|
|
{
|
|
|
|
|
private PositionBusinessLogicContract _positionBusinessLogicContract;
|
|
|
|
|
private Mock<IPositionStorageContact> _positionStorageContact;
|
|
|
|
|
|
|
|
|
|
[OneTimeSetUp]
|
|
|
|
|
public void OneTimeSetUp()
|
|
|
|
|
{
|
|
|
|
|
_positionStorageContact = new Mock<IPositionStorageContact>();
|
|
|
|
|
_positionBusinessLogicContract = new PositionBusinessLogicContract(
|
|
|
|
|
_positionStorageContact.Object,
|
|
|
|
|
new Mock<ILogger>().Object
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
|
public void SetUp()
|
|
|
|
|
{
|
|
|
|
|
_positionStorageContact.Reset();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetAllPositions_ReturnsListOfRecords_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var positions = new List<PositionDataModel>
|
|
|
|
|
{
|
|
|
|
|
new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
),
|
|
|
|
|
new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Medium,
|
|
|
|
|
"Pastry Chef"
|
|
|
|
|
)
|
|
|
|
|
};
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetList()).Returns(positions);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var list = _positionBusinessLogicContract.GetAllPositions();
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.That(list, Is.Not.Null);
|
|
|
|
|
Assert.That(list, Is.EquivalentTo(positions));
|
|
|
|
|
Assert.That(
|
|
|
|
|
list.All(p =>
|
|
|
|
|
Guid.TryParse(p.Id, out _) && !p.Title.IsEmpty() && Enum.IsDefined(typeof(PositionType), p.Type)),
|
|
|
|
|
Is.True);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetAllPositions_ReturnsEmptyList_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetList()).Returns(new List<PositionDataModel>());
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var list = _positionBusinessLogicContract.GetAllPositions();
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.That(list, Is.Not.Null);
|
|
|
|
|
Assert.That(list, Has.Count.EqualTo(0));
|
|
|
|
|
_positionStorageContact.Verify(x => x.GetList(), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetAllPositions_ReturnsNull_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetList()).Returns((List<PositionDataModel>)null);
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.GetAllPositions(), Throws.TypeOf<NullListException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.GetList(), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetAllPositions_StorageThrowError_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetList())
|
|
|
|
|
.Throws(new StorageException(new InvalidOperationException()));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.GetAllPositions(), Throws.TypeOf<StorageException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.GetList(), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetPositionByData_ReturnsPositionById_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var id = Guid.NewGuid().ToString();
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
id,
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetElementById(id)).Returns(position);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var element = _positionBusinessLogicContract.GetPositionByData(id);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.That(element, Is.Not.Null);
|
|
|
|
|
Assert.That(element.Id, Is.EqualTo(id));
|
|
|
|
|
Assert.That(Guid.TryParse(element.Id, out _), Is.True);
|
|
|
|
|
Assert.That(!element.Title.IsEmpty());
|
|
|
|
|
Assert.That(Regex.IsMatch(element.Title, @"^[A-Za-zА-Яа-яЁё\s\-]+$"), Is.True);
|
|
|
|
|
Assert.That(Enum.IsDefined(typeof(PositionType), element.Type), Is.True);
|
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetPositionByData_EmptyData_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.GetPositionByData(null),
|
|
|
|
|
Throws.TypeOf<ArgumentNullException>());
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.GetPositionByData(string.Empty),
|
|
|
|
|
Throws.TypeOf<ArgumentNullException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Never);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetPositionByData_NotFoundPosition_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
2025-02-27 02:25:39 +04:00
|
|
|
|
var id = Guid.NewGuid().ToString(); // Use a valid Guid to test not found scenario
|
2025-02-26 23:49:16 +04:00
|
|
|
|
_positionStorageContact.Setup(x => x.GetElementById(id)).Returns((PositionDataModel)null);
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.GetPositionByData(id),
|
|
|
|
|
Throws.TypeOf<ElementNotFoundException>());
|
2025-02-27 02:25:39 +04:00
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(id), Times.Once);
|
2025-02-26 23:49:16 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetPositionByData_StorageThrowError_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetElementById(It.IsAny<string>()))
|
|
|
|
|
.Throws(new StorageException(new InvalidOperationException()));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.GetPositionByData(Guid.NewGuid().ToString()),
|
|
|
|
|
Throws.TypeOf<StorageException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void InsertPosition_CorrectRecord_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var flag = false;
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.AddElement(It.IsAny<PositionDataModel>()))
|
|
|
|
|
.Callback((PositionDataModel x) =>
|
|
|
|
|
{
|
|
|
|
|
flag = x.Id == position.Id && x.Type == position.Type && x.Title == position.Title;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
_positionBusinessLogicContract.InsertPosition(position);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
_positionStorageContact.Verify(x => x.AddElement(It.IsAny<PositionDataModel>()), Times.Once);
|
|
|
|
|
Assert.That(flag);
|
|
|
|
|
Assert.That(Guid.TryParse(position.Id, out _), Is.True);
|
|
|
|
|
Assert.That(!position.Title.IsEmpty());
|
|
|
|
|
Assert.That(Regex.IsMatch(position.Title, @"^[A-Za-zА-Яа-яЁё\s\-]+$"), Is.True);
|
|
|
|
|
Assert.That(Enum.IsDefined(typeof(PositionType), position.Type), Is.True);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void InsertPosition_RecordWithExistsData_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.AddElement(It.IsAny<PositionDataModel>()))
|
|
|
|
|
.Throws(new ElementExistsException("ID", position.Id));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.InsertPosition(position),
|
|
|
|
|
Throws.TypeOf<ElementExistsException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.AddElement(It.IsAny<PositionDataModel>()), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void InsertPosition_NullRecord_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.InsertPosition(null),
|
|
|
|
|
Throws.TypeOf<ArgumentNullException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.AddElement(It.IsAny<PositionDataModel>()), Times.Never);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void InsertPosition_InvalidRecord_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.InsertPosition(new PositionDataModel(
|
|
|
|
|
"",
|
|
|
|
|
(PositionType)999,
|
|
|
|
|
"123"
|
|
|
|
|
)), Throws.TypeOf<ValidationException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.AddElement(It.IsAny<PositionDataModel>()), Times.Never);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void InsertPosition_StorageThrowError_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.AddElement(It.IsAny<PositionDataModel>()))
|
|
|
|
|
.Throws(new StorageException(new InvalidOperationException()));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.InsertPosition(position),
|
|
|
|
|
Throws.TypeOf<StorageException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.AddElement(It.IsAny<PositionDataModel>()), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void UpdatePosition_CorrectRecord_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var flag = false;
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.UpdateElement(It.IsAny<PositionDataModel>()))
|
|
|
|
|
.Callback((PositionDataModel x) =>
|
|
|
|
|
{
|
|
|
|
|
flag = x.Id == position.Id && x.Type == position.Type && x.Title == position.Title;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
_positionBusinessLogicContract.UpdatePosition(position);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
_positionStorageContact.Verify(x => x.UpdateElement(It.IsAny<PositionDataModel>()), Times.Once);
|
|
|
|
|
Assert.That(flag);
|
|
|
|
|
Assert.That(Guid.TryParse(position.Id, out _), Is.True);
|
|
|
|
|
Assert.That(!position.Title.IsEmpty());
|
|
|
|
|
Assert.That(Regex.IsMatch(position.Title, @"^[A-Za-zА-Яа-яЁё\s\-]+$"), Is.True);
|
|
|
|
|
Assert.That(Enum.IsDefined(typeof(PositionType), position.Type), Is.True);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void UpdatePosition_RecordNotFound_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.UpdateElement(It.IsAny<PositionDataModel>()))
|
|
|
|
|
.Throws(new ElementNotFoundException("Position not found"));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.UpdatePosition(position),
|
|
|
|
|
Throws.TypeOf<ElementNotFoundException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.UpdateElement(It.IsAny<PositionDataModel>()), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void UpdatePosition_NullRecord_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.UpdatePosition(null),
|
|
|
|
|
Throws.TypeOf<ArgumentNullException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.UpdateElement(It.IsAny<PositionDataModel>()), Times.Never);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void UpdatePosition_InvalidRecord_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.UpdatePosition(new PositionDataModel(
|
|
|
|
|
"", // Invalid ID
|
|
|
|
|
(PositionType)999,
|
|
|
|
|
"123"
|
|
|
|
|
)), Throws.TypeOf<ValidationException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.UpdateElement(It.IsAny<PositionDataModel>()), Times.Never);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void UpdatePosition_StorageThrowError_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
Guid.NewGuid().ToString(),
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
_positionStorageContact.Setup(x => x.UpdateElement(It.IsAny<PositionDataModel>()))
|
|
|
|
|
.Throws(new StorageException(new InvalidOperationException()));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.UpdatePosition(position),
|
|
|
|
|
Throws.TypeOf<StorageException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.UpdateElement(It.IsAny<PositionDataModel>()), Times.Once);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DeletePosition_CorrectId_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var id = Guid.NewGuid().ToString();
|
|
|
|
|
var position = new PositionDataModel(
|
|
|
|
|
id,
|
|
|
|
|
PositionType.Cool,
|
|
|
|
|
"Baker"
|
|
|
|
|
);
|
|
|
|
|
var flag = false;
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetElementById(id)).Returns(position);
|
|
|
|
|
_positionStorageContact.Setup(x => x.DeleteElement(id)).Callback(() => { flag = true; });
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
_positionBusinessLogicContract.DeletePosition(id);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
_positionStorageContact.Verify(x => x.DeleteElement(id), Times.Once);
|
|
|
|
|
Assert.That(flag);
|
|
|
|
|
Assert.That(Guid.TryParse(position.Id, out _), Is.True);
|
|
|
|
|
Assert.That(!position.Title.IsEmpty());
|
|
|
|
|
Assert.That(Regex.IsMatch(position.Title, @"^[A-Za-zА-Яа-яЁё\s\-]+$"), Is.True);
|
|
|
|
|
Assert.That(Enum.IsDefined(typeof(PositionType), position.Type), Is.True);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DeletePosition_RecordNotFound_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
2025-02-27 02:25:39 +04:00
|
|
|
|
var id = Guid.NewGuid().ToString(); // Use a valid Guid to test not found scenario
|
2025-02-26 23:49:16 +04:00
|
|
|
|
_positionStorageContact.Setup(x => x.GetElementById(id)).Returns((PositionDataModel)null);
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.DeletePosition(id),
|
|
|
|
|
Throws.TypeOf<ElementNotFoundException>());
|
2025-02-27 02:25:39 +04:00
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(id), Times.Once);
|
2025-02-26 23:49:16 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DeletePosition_NullOrEmptyId_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Act & Assert
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.DeletePosition(null),
|
|
|
|
|
Throws.TypeOf<ArgumentNullException>());
|
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.DeletePosition(string.Empty),
|
|
|
|
|
Throws.TypeOf<ArgumentNullException>());
|
|
|
|
|
_positionStorageContact.Verify(x => x.DeleteElement(It.IsAny<string>()), Times.Never);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DeletePosition_InvalidId_ThrowException_Test()
|
|
|
|
|
{
|
2025-02-27 02:25:39 +04:00
|
|
|
|
// Arrange
|
|
|
|
|
var id = "invalid";
|
|
|
|
|
// No need to setup GetElementById for invalid ID since validation should be after existence check
|
|
|
|
|
|
2025-02-26 23:49:16 +04:00
|
|
|
|
// Act & Assert
|
2025-02-27 02:25:39 +04:00
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.DeletePosition(id),
|
2025-02-26 23:49:16 +04:00
|
|
|
|
Throws.TypeOf<ValidationException>());
|
2025-02-27 02:25:39 +04:00
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(id), Times.Never);
|
2025-02-26 23:49:16 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DeletePosition_StorageThrowError_ThrowException_Test()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
2025-02-27 02:25:39 +04:00
|
|
|
|
var id = Guid.NewGuid().ToString();
|
|
|
|
|
var position = new PositionDataModel(id, PositionType.Cool, "Baker");
|
|
|
|
|
_positionStorageContact.Setup(x => x.GetElementById(id)).Returns(position);
|
|
|
|
|
_positionStorageContact.Setup(x => x.DeleteElement(id))
|
2025-02-26 23:49:16 +04:00
|
|
|
|
.Throws(new StorageException(new InvalidOperationException()));
|
|
|
|
|
|
|
|
|
|
// Act & Assert
|
2025-02-27 02:25:39 +04:00
|
|
|
|
Assert.That(() => _positionBusinessLogicContract.DeletePosition(id),
|
2025-02-26 23:49:16 +04:00
|
|
|
|
Throws.TypeOf<StorageException>());
|
2025-02-27 02:25:39 +04:00
|
|
|
|
_positionStorageContact.Verify(x => x.GetElementById(id), Times.Once);
|
|
|
|
|
_positionStorageContact.Verify(x => x.DeleteElement(id), Times.Once);
|
2025-02-26 23:49:16 +04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|