using Moq; using NUnit.Framework; using PapaCarloBusinessLogic.Implementations; using PapaCarloContracts.BusinessLogicContracts; using PapaCarloContracts.DataModels; using PapaCarloContracts.Exceptions; using PapaCarloContracts.StoragesContracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PapaCarloTests.BusinessLogicsContracts; [TestFixture] internal class BlankBusinessLogicContractTests { private IBlankBusinessLogicContract _blankBusinessLogicContract; private Mock _blankStorageContract; [OneTimeSetUp] public void OneTimeSetUp() { _blankStorageContract = new Mock(); _blankBusinessLogicContract = new BlankBusinessLogicContract(_blankStorageContract.Object); } [SetUp] public void SetUp() { _blankStorageContract.Reset(); } [Test] public void GetAllBlanks_ReturnListOfRecords_Test() { var listOriginal = new List() { new(Guid.NewGuid().ToString(),"Mahogany","",""), new(Guid.NewGuid().ToString(),"Birch","",""), new(Guid.NewGuid().ToString(),"Spruce","","") }; _blankStorageContract.Setup(x=> x.GetList()).Returns(listOriginal); var list = _blankBusinessLogicContract.GetAllBlanks(); Assert.That(list, Is.Not.Null); Assert.That(list, Is.EquivalentTo(listOriginal)); } [Test] public void GetAllBlanks_ReturnEmptyList_Test() { _blankStorageContract.Setup(x => x.GetList()).Returns([]); var list = _blankBusinessLogicContract.GetAllBlanks(); Assert.That(list, Is.Not.Null); Assert.That(list, Has.Count.EqualTo(0)); _blankStorageContract.Verify(x => x.GetList(), Times.Once); } [Test] public void GetAllBlanks_ReturnNull_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.GetAllBlanks(), Throws.TypeOf()); _blankStorageContract.Verify(x => x.GetList(), Times.Once); } [Test] public void GetAllBlanks_StorageThrowError_ThrowException_Test() { _blankStorageContract.Setup(x => x.GetList()).Throws(new StorageException(new InvalidOperationException())); Assert.That(() => _blankBusinessLogicContract.GetAllBlanks(), Throws.TypeOf()); _blankStorageContract.Verify(x => x.GetList(), Times.Once); } [Test] public void GetBlankByData_GetById_ReturnRecord_Test() { var id = Guid.NewGuid().ToString(); var record = new BlankDataModel(id, "Spruce", "", ""); _blankStorageContract.Setup(x => x.GetElementById(id)).Returns(record); var element = _blankBusinessLogicContract.GetBlankByData(id); Assert.That(element, Is.Not.Null); Assert.That(element.Id, Is.EqualTo(id)); _blankStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Once); } [Test] public void GetBlankByData_GetByName_ReturnRecord_Test() { var name = "Spruce"; var record = new BlankDataModel(Guid.NewGuid().ToString(), name, "", ""); _blankStorageContract.Setup(x => x.GetElementByName(name)).Returns(record); var element = _blankBusinessLogicContract.GetBlankByData(name); Assert.That(element, Is.Not.Null); Assert.That(element.BlankName, Is.EqualTo(name)); _blankStorageContract.Verify(x => x.GetElementByName(It.IsAny()), Times.Once); } public void GetBlankByData_GetByOldName_ReturnRecord_Test() { var oldName = "Spruce"; var record = new BlankDataModel(Guid.NewGuid().ToString(), "Birch", oldName, ""); _blankStorageContract.Setup(x => x.GetElementByOldName(oldName)).Returns(record); var element = _blankBusinessLogicContract.GetBlankByData(oldName); Assert.That(element, Is.Not.Null); Assert.That(element.PrevBlankName, Is.EqualTo(oldName)); _blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny()), Times.Once); } [Test] public void GetBlankByData_EmptyData_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.GetBlankByData(null), Throws.TypeOf()); Assert.That(() => _blankBusinessLogicContract.GetBlankByData(String.Empty), Throws.TypeOf()); _blankStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Never); _blankStorageContract.Verify(x => x.GetElementByName(It.IsAny()), Times.Never); _blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny()), Times.Never); } [Test] public void GetBlankByData_GetById_NotFoundRecord_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.GetBlankByData(Guid.NewGuid().ToString()), Throws.TypeOf()); _blankStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Once); _blankStorageContract.Verify(x => x.GetElementByName(It.IsAny()), Times.Never); _blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny()), Times.Never); } [Test] public void GetBlankByData_GetByName_NotFoundRecord_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.GetBlankByData("Name"), Throws.TypeOf()); _blankStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Never); _blankStorageContract.Verify(x => x.GetElementByName(It.IsAny()), Times.Once); _blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny()), Times.Never); } [Test] public void GetBlankByData_StorageThrowError_ThrowException_Test() { _blankStorageContract.Setup(x => x.GetElementById(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); _blankStorageContract.Setup(x => x.GetElementByName(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); Assert.That(() => _blankBusinessLogicContract.GetBlankByData(Guid.NewGuid().ToString()), Throws.TypeOf()); Assert.That(() => _blankBusinessLogicContract.GetBlankByData("Name"), Throws.TypeOf()); _blankStorageContract.Verify(x => x.GetElementById(It.IsAny()), Times.Once); _blankStorageContract.Verify(x => x.GetElementByName(It.IsAny()), Times.Once); } [Test] public void InsertBlank_CorrectRecord_Test() { var flag = false; var record = new BlankDataModel(Guid.NewGuid().ToString(), "Spruce", "", ""); _blankStorageContract.Setup(x => x.AddElement(It.IsAny())) .Callback((BlankDataModel x) => { flag = x.Id == record.Id && x.BlankName == record.BlankName; }); _blankBusinessLogicContract.InsertBlank(record); _blankStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); Assert.That(flag); } [Test] public void InsertBlank_RecordWithExistData_ThrowException_Test() { _blankStorageContract.Setup(x => x.AddElement(It.IsAny())).Throws(new ElementExistsException("Data", "Data")); Assert.That(() => _blankBusinessLogicContract.InsertBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } [Test] public void InsertBlank_NullRecord_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.InsertBlank(null), Throws.TypeOf()); _blankStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Never); } [Test] public void InsertBlank_InvalidRecord_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.InsertBlank(new BlankDataModel("id", "name", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Never); } [Test] public void InsertBlank_StorageThrowError_ThrowException_Test() { _blankStorageContract.Setup(x => x.AddElement(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); Assert.That(() => _blankBusinessLogicContract.InsertBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } [Test] public void UpdateBlank_RecordWithIncorrectData_ThrowException_Test() { _blankStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new ElementNotFoundException("")); Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } [Test] public void UpdateBlank_RecordWithExistData_ThrowException_Test() { _blankStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new ElementExistsException("Data","Data")); Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } [Test] public void UpdateBlank_NullRecord_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.UpdateBlank(null), Throws.TypeOf()); _blankStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } [Test] public void UpdateBlank_InvalidRecord_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new("id", "Spruce", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } [Test] public void DeleteBlank_CorrectRecord_Test() { var id = Guid.NewGuid().ToString(); var flag = false; _blankStorageContract.Setup(x => x.DelElement(It.Is((string x) => x == id))).Callback(() => { flag = true; }); _blankBusinessLogicContract.DeleteBlank(id); _blankStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Once); Assert.That(flag); } [Test] public void DeleteBlank_RecordWithIncorrectId_ThrowException_Test() { _blankStorageContract.Setup(x => x.DelElement(It.IsAny())).Throws(new ElementNotFoundException("")); Assert.That(() => _blankBusinessLogicContract.DeleteBlank(Guid.NewGuid().ToString()), Throws.TypeOf()); _blankStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Once); } [Test] public void DeleteBlank_IdIsNullOrEmpty_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.DeleteBlank(null), Throws.TypeOf()); Assert.That(() => _blankBusinessLogicContract.DeleteBlank(string.Empty), Throws.TypeOf()); _blankStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Never); } [Test] public void DeleteBlank_IdIsNotGuid_ThrowException_Test() { Assert.That(() => _blankBusinessLogicContract.DeleteBlank("id"), Throws.TypeOf()); _blankStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Never); } [Test] public void DeleteBlank_StorageThrowError_ThrowException_Test() { _blankStorageContract.Setup(x => x.DelElement(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); Assert.That(() => _blankBusinessLogicContract.DeleteBlank(Guid.NewGuid().ToString()), Throws.TypeOf()); _blankStorageContract.Verify(x => x.DelElement(It.IsAny()), Times.Once); } }