using Microsoft.Extensions.Logging; using Moq; using TheCyclopsBusinessLogic.Implementations; using TheCyclopsContracts.DataModels; using TheCyclopsContracts.Exceptions; using TheCyclopsContracts.StoragesContracts; namespace TheCyclopsTests.BusinessLogicsContractsTests; [TestFixture] internal class EmployeeBusinessLogicContractTest { private EmployeeBusinessLogicContract _employeeBusinessLogicContract; private Mock _employeeStorageContract; [OneTimeSetUp] public void OneTimeSetUp() { _employeeStorageContract = new Mock(); _employeeBusinessLogicContract = new EmployeeBusinessLogicContract(_employeeStorageContract.Object, new Mock().Object); } [SetUp] public void SetUp() { _employeeStorageContract.Reset(); } [Test] public void GetAllEmployees_ReturnListOfRecords_Test() { //Arrange var listOriginal = new List() { new(Guid.NewGuid().ToString(), "fio 1", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), new(Guid.NewGuid().ToString(), "fio 2", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, true), new(Guid.NewGuid().ToString(), "fio 3", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), }; _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(listOriginal); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployees(true); var list = _employeeBusinessLogicContract.GetAllEmployees(false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Is.EquivalentTo(listOriginal)); Assert.That(list, Is.EquivalentTo(listOriginal)); }); _employeeStorageContract.Verify(x => x.GetList(true, null, null, null, null, null), Times.Once); _employeeStorageContract.Verify(x => x.GetList(false, null, null, null, null, null), Times.Once); } [Test] public void GetAllEmployees_ReturnEmptyList_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns([]); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployees(true); var list = _employeeBusinessLogicContract.GetAllEmployees(false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Has.Count.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0)); }); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), null, null, null, null, null), Times.Exactly(2)); } [Test] public void GetAllEmployees_ReturnNull_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployees(It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployees_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployees(It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), null, null, null, null, null), Times.Once); } [Test] public void GetAllEmployeesByPost_ReturnListOfRecords_Test() { //Arrange var postId = Guid.NewGuid().ToString(); var listOriginal = new List() { new(Guid.NewGuid().ToString(), "fio 1","email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), new(Guid.NewGuid().ToString(), "fio 2", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, true), new(Guid.NewGuid().ToString(), "fio 3", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), }; _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(listOriginal); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployeesByPost(postId, true); var list = _employeeBusinessLogicContract.GetAllEmployeesByPost(postId, false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Is.EquivalentTo(listOriginal)); Assert.That(list, Is.EquivalentTo(listOriginal)); }); _employeeStorageContract.Verify(x => x.GetList(true, postId, null, null, null, null), Times.Once); _employeeStorageContract.Verify(x => x.GetList(false, postId, null, null, null, null), Times.Once); } [Test] public void GetAllEmployeesByPost_ReturnEmptyList_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns([]); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployeesByPost(Guid.NewGuid().ToString(), true); var list = _employeeBusinessLogicContract.GetAllEmployeesByPost(Guid.NewGuid().ToString(), false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Has.Count.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0)); }); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); } [Test] public void GetAllEmployeesByPost_PostIdIsNullOrEmpty_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByPost(null, It.IsAny()), Throws.TypeOf()); Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByPost(string.Empty, It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void GetAllEmployeesByPost_PostIdIsNotGuid_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByPost("postId", It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void GetAllEmployeesByPost_ReturnNull_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByPost(Guid.NewGuid().ToString(), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployeesByPost_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByPost(Guid.NewGuid().ToString(), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployeesByBirthDate_ReturnListOfRecords_Test() { //Arrange var date = DateTime.UtcNow; var listOriginal = new List() { new(Guid.NewGuid().ToString(), "fio 1", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), new(Guid.NewGuid().ToString(), "fio 2", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, true), new(Guid.NewGuid().ToString(), "fio 3","email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), }; _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(listOriginal); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(date, date.AddDays(1), true); var list = _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(date, date.AddDays(1), false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Is.EquivalentTo(listOriginal)); Assert.That(list, Is.EquivalentTo(listOriginal)); }); _employeeStorageContract.Verify(x => x.GetList(true, null, date, date.AddDays(1), null, null), Times.Once); _employeeStorageContract.Verify(x => x.GetList(false, null, date, date.AddDays(1), null, null), Times.Once); } [Test] public void GetAllEmployeesByBirthDate_ReturnEmptyList_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns([]); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), true); var list = _employeeBusinessLogicContract.GetAllEmployees(false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Has.Count.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0)); }); _employeeStorageContract.Verify(x => x.GetList(true, null, It.IsAny(), It.IsAny(), null, null), Times.Once); _employeeStorageContract.Verify(x => x.GetList(false, null, It.IsAny(), It.IsAny(), null, null), Times.Once); } [Test] public void GetAllEmployeesByBirthDate_IncorrectDates_ThrowException_Test() { //Arrange var date = DateTime.UtcNow; //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(date, date, It.IsAny()), Throws.TypeOf()); Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(date, date.AddSeconds(-1), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void GetAllEmployeesByBirthDate_ReturnNull_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployeesByBirthDate_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByBirthDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployeesByEmploymentDate_ReturnListOfRecords_Test() { //Arrange var date = DateTime.UtcNow; var listOriginal = new List() { new(Guid.NewGuid().ToString(), "fio 1", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), new(Guid.NewGuid().ToString(), "fio 2", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, true), new(Guid.NewGuid().ToString(), "fio 3", "email@mail.com",Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false), }; _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(listOriginal); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(date, date.AddDays(1), true); var list = _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(date, date.AddDays(1), false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Is.EquivalentTo(listOriginal)); Assert.That(list, Is.EquivalentTo(listOriginal)); }); _employeeStorageContract.Verify(x => x.GetList(true, null, null, null, date, date.AddDays(1)), Times.Once); _employeeStorageContract.Verify(x => x.GetList(false, null, null, null, date, date.AddDays(1)), Times.Once); } [Test] public void GetAllEmployeesByEmploymentDate_ReturnEmptyList_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns([]); //Act var listOnlyActive = _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), true); var list = _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), false); //Assert Assert.Multiple(() => { Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null); Assert.That(listOnlyActive, Has.Count.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0)); }); _employeeStorageContract.Verify(x => x.GetList(true, null, null, null, It.IsAny(), It.IsAny()), Times.Once); _employeeStorageContract.Verify(x => x.GetList(false, null, null, null, It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployeesByEmploymentDate_IncorrectDates_ThrowException_Test() { //Arrange var date = DateTime.UtcNow; //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(date, date, It.IsAny()), Throws.TypeOf()); Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(date, date.AddSeconds(-1), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void GetAllEmployeesByEmploymentDate_ReturnNull_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetAllEmployeesByEmploymentDate_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), It.IsAny()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void GetEmployeeByData_GetById_ReturnRecord_Test() { //Arrange var id = Guid.NewGuid().ToString(); var record = new EmployeeDataModel(id, "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false); _employeeStorageContract.Setup(x => x.GetElementById(id)).Returns(record); //Act var element = _employeeBusinessLogicContract.GetEmployeeByData(id); //Assert Assert.That(element, Is.Not.Null); Assert.That(element.Id, Is.EqualTo(id)); _employeeStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Once); } [Test] public void GetEmployeeByData_GetByFio_ReturnRecord_Test() { //Arrange var fio = "fio"; var record = new EmployeeDataModel(Guid.NewGuid().ToString(), fio, "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false); _employeeStorageContract.Setup(x => x.GetElementByFIO(fio)).Returns(record); //Act var element = _employeeBusinessLogicContract.GetEmployeeByData(fio); //Assert Assert.That(element, Is.Not.Null); Assert.That(element.FIO, Is.EqualTo(fio)); _employeeStorageContract.Verify(x => x.GetElementByFIO(It.IsAny()), Times.Once); } [Test] public void GetEmployeeByData_EmptyData_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetEmployeeByData(null), Throws.TypeOf()); Assert.That(() => _employeeBusinessLogicContract.GetEmployeeByData(string.Empty), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Never); _employeeStorageContract.Verify(x => x.GetElementByFIO(It.IsAny()), Times.Never); } [Test] public void GetEmployeeByData_GetById_NotFoundRecord_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetEmployeeByData(Guid.NewGuid().ToString()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Once); _employeeStorageContract.Verify(x => x.GetElementByFIO(It.IsAny()), Times.Never); } [Test] public void GetEmployeeByData_GetByFio_NotFoundRecord_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetEmployeeByData("fio"), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Never); _employeeStorageContract.Verify(x => x.GetElementByFIO(It.IsAny()), Times.Once); } [Test] public void GetEmployeeByData_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.GetElementById(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); _employeeStorageContract.Setup(x => x.GetElementByFIO(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.GetEmployeeByData(Guid.NewGuid().ToString()), Throws.TypeOf()); Assert.That(() => _employeeBusinessLogicContract.GetEmployeeByData("fio"), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Once); _employeeStorageContract.Verify(x => x.GetElementByFIO(It.IsAny()), Times.Once); } [Test] public void InsertEmployee_CorrectRecord_Test() { //Arrange var flag = false; var record = new EmployeeDataModel(Guid.NewGuid().ToString(), "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false); _employeeStorageContract.Setup(x => x.AddElement(It.IsAny())) .Callback((EmployeeDataModel x) => { flag = x.Id == record.Id && x.FIO == record.FIO && x.PostId == record.PostId && x.BirthDate == record.BirthDate && x.EmploymentDate == record.EmploymentDate && x.IsDeleted == record.IsDeleted; }); //Act _employeeBusinessLogicContract.InsertEmployee(record); //Assert _employeeStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); Assert.That(flag); } [Test] public void InsertEmployee_RecordWithExistsData_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.AddElement(It.IsAny())).Throws(new ElementExistsException("Data", "Data")); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.InsertEmployee(new(Guid.NewGuid().ToString(), "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false)), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } [Test] public void InsertEmployee_NullRecord_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.InsertEmployee(null), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Never); } [Test] public void InsertEmployee_InvalidRecord_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.InsertEmployee(new EmployeeDataModel("id", "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false)), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Never); } [Test] public void InsertEmployee_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.AddElement(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.InsertEmployee(new(Guid.NewGuid().ToString(), "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false)), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } [Test] public void UpdateEmployee_CorrectRecord_Test() { //Arrange var flag = false; var record = new EmployeeDataModel(Guid.NewGuid().ToString(), "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false); _employeeStorageContract.Setup(x => x.UpdElement(It.IsAny())) .Callback((EmployeeDataModel x) => { flag = x.Id == record.Id && x.FIO == record.FIO && x.PostId == record.PostId && x.BirthDate == record.BirthDate && x.EmploymentDate == record.EmploymentDate && x.IsDeleted == record.IsDeleted; }); //Act _employeeBusinessLogicContract.UpdateEmployee(record); //Assert _employeeStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); Assert.That(flag); } [Test] public void UpdateEmployee_RecordWithIncorrectData_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new ElementNotFoundException("")); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.UpdateEmployee(new(Guid.NewGuid().ToString(), "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false)), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } [Test] public void UpdateEmployee_NullRecord_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.UpdateEmployee(null), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } [Test] public void UpdateEmployee_InvalidRecord_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.UpdateEmployee(new EmployeeDataModel("id", "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false)), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } [Test] public void UpdateEmployee_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.UpdateEmployee(new(Guid.NewGuid().ToString(), "fio", "email@mail.com", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-16).AddDays(-1), DateTime.Now, false)), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } [Test] public void DeleteEmployee_CorrectRecord_Test() { //Arrange var id = Guid.NewGuid().ToString(); var flag = false; _employeeStorageContract.Setup(x => x.DelElement(It.Is((string x) => x == id))).Callback(() => { flag = true; }); //Act _employeeBusinessLogicContract.DeleteEmployee(id); //Assert _employeeStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Once); Assert.That(flag); } [Test] public void DeleteEmployee_RecordWithIncorrectId_ThrowException_Test() { //Arrange var id = Guid.NewGuid().ToString(); _employeeStorageContract.Setup(x => x.DelElement(It.Is((string x) => x != id))).Throws(new ElementNotFoundException(id)); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.DeleteEmployee(Guid.NewGuid().ToString()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Once); } [Test] public void DeleteEmployee_IdIsNullOrEmpty_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.DeleteEmployee(null), Throws.TypeOf()); Assert.That(() => _employeeBusinessLogicContract.DeleteEmployee(string.Empty), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Never); } [Test] public void DeleteEmployee_IdIsNotGuid_ThrowException_Test() { //Act&Assert Assert.That(() => _employeeBusinessLogicContract.DeleteEmployee("id"), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Never); } [Test] public void DeleteEmployee_StorageThrowError_ThrowException_Test() { //Arrange _employeeStorageContract.Setup(x => x.DelElement(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _employeeBusinessLogicContract.DeleteEmployee(Guid.NewGuid().ToString()), Throws.TypeOf()); _employeeStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Once); } }