Красная зона на тестах по заготовкам

This commit is contained in:
Tonb73 2025-02-18 10:55:27 +03:00
parent 449e378d85
commit f16055973e
10 changed files with 356 additions and 2 deletions

View File

@ -1,5 +1,6 @@
using PapaCarloContracts.BusinessLogicContracts; using PapaCarloContracts.BusinessLogicContracts;
using PapaCarloContracts.DataModels; using PapaCarloContracts.DataModels;
using PapaCarloContracts.StoragesContracts;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -8,8 +9,9 @@ using System.Threading.Tasks;
namespace PapaCarloBusinessLogic.Implementations namespace PapaCarloBusinessLogic.Implementations
{ {
internal class BlankBusinessLogicContract : IBlankBusinessLogicContract internal class BlankBusinessLogicContract(IBlankStorageContract storageContract) : IBlankBusinessLogicContract
{ {
private IBlankStorageContract _storageContract = storageContract;
public void DeleteBlank(string id) public void DeleteBlank(string id)
{ {
} }

View File

@ -6,6 +6,11 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="PapaCarloTests" />
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\PapaCarloContracts\PapaCarloContracts.csproj" /> <ProjectReference Include="..\PapaCarloContracts\PapaCarloContracts.csproj" />
</ItemGroup> </ItemGroup>

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PapaCarloContracts.Exceptions;
public class ElementExistsException : Exception
{
public string ParamName { get; private set; }
public string ParamValue { get; private set; }
public ElementExistsException(string paramName, string paramValue) : base($"There is already an element with value{paramValue} of parameter {paramName}")
{
ParamName = paramName;
ParamValue = paramValue;
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PapaCarloContracts.Exceptions;
public class ElementNotFoundException : Exception
{
public string Value { get; private set; }
public ElementNotFoundException(string value) : base($"Element not found at value = {value}")
{
Value = value;
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PapaCarloContracts.Exceptions;
public class NullListException : Exception
{
public NullListException() : base("The returned list is null") { }
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PapaCarloContracts.Exceptions;
public class StorageException : Exception
{
public StorageException(Exception ex) : base($"Error while working in storage: {ex.Message}", ex) { }
}

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace PapaCarloContracts.StoragesContracts; namespace PapaCarloContracts.StoragesContracts;
public interface IManufacturerStorageContract public interface IBlankStorageContract
{ {
List<BlankDataModel> GetList(); List<BlankDataModel> GetList();
BlankDataModel? GetElementById(string id); BlankDataModel? GetElementById(string id);

View File

@ -0,0 +1,284 @@
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<IBlankStorageContract> _blankStorageContract;
[OneTimeSetUp]
public void OneTimeSetUp()
{
_blankStorageContract = new Mock<IBlankStorageContract>();
_blankBusinessLogicContract = new BlankBusinessLogicContract(_blankStorageContract.Object);
}
[SetUp]
public void SetUp()
{
_blankStorageContract.Reset();
}
[Test]
public void GetAllBlanks_ReturnListOfRecords_Test()
{
var listOriginal = new List<BlankDataModel>()
{
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<NullListException>());
_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<StorageException>());
_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<string>()), 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<string>()), 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<string>()), Times.Once);
}
[Test]
public void GetBlankByData_EmptyData_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.GetBlankByData(null), Throws.TypeOf<ArgumentNullException>());
Assert.That(() => _blankBusinessLogicContract.GetBlankByData(String.Empty), Throws.TypeOf<ArgumentNullException>());
_blankStorageContract.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Never);
_blankStorageContract.Verify(x => x.GetElementByName(It.IsAny<string>()), Times.Never);
_blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny<string>()), Times.Never);
}
[Test]
public void GetBlankByData_GetById_NotFoundRecord_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.GetBlankByData(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
_blankStorageContract.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Once);
_blankStorageContract.Verify(x => x.GetElementByName(It.IsAny<string>()), Times.Never);
_blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny<string>()), Times.Never);
}
[Test]
public void GetBlankByData_GetByName_NotFoundRecord_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.GetBlankByData("Name"), Throws.TypeOf<ElementNotFoundException>());
_blankStorageContract.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Never);
_blankStorageContract.Verify(x => x.GetElementByName(It.IsAny<string>()), Times.Once);
_blankStorageContract.Verify(x => x.GetElementByOldName(It.IsAny<string>()), Times.Never);
}
[Test]
public void GetBlankByData_StorageThrowError_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())).Throws(new StorageException(new InvalidOperationException()));
_blankStorageContract.Setup(x => x.GetElementByName(It.IsAny<string>())).Throws(new StorageException(new InvalidOperationException()));
Assert.That(() => _blankBusinessLogicContract.GetBlankByData(Guid.NewGuid().ToString()), Throws.TypeOf<StorageException>());
Assert.That(() => _blankBusinessLogicContract.GetBlankByData("Name"), Throws.TypeOf<StorageException>());
_blankStorageContract.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Once);
_blankStorageContract.Verify(x => x.GetElementByName(It.IsAny<string>()), 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<BlankDataModel>()))
.Callback((BlankDataModel x) =>
{
flag = x.Id == record.Id && x.BlankName == record.BlankName;
});
_blankBusinessLogicContract.InsertBlank(record);
_blankStorageContract.Verify(x => x.AddElement(It.IsAny<BlankDataModel>()), Times.Once);
Assert.That(flag);
}
[Test]
public void InsertBlank_RecordWithExistData_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.AddElement(It.IsAny<BlankDataModel>())).Throws(new ElementExistsException("Data", "Data"));
Assert.That(() => _blankBusinessLogicContract.InsertBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf<ElementExistsException>());
_blankStorageContract.Verify(x => x.AddElement(It.IsAny<BlankDataModel>()), Times.Once);
}
[Test]
public void InsertBlank_NullRecord_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.InsertBlank(null), Throws.TypeOf<ArgumentNullException>());
_blankStorageContract.Verify(x => x.AddElement(It.IsAny<BlankDataModel>()), Times.Never);
}
[Test]
public void InsertBlank_InvalidRecord_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.InsertBlank(new BlankDataModel("id", "name", "", "")), Throws.TypeOf<ValidationException>());
_blankStorageContract.Verify(x => x.AddElement(It.IsAny<BlankDataModel>()), Times.Never);
}
[Test]
public void InsertBlank_StorageThrowError_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.AddElement(It.IsAny<BlankDataModel>())).Throws(new StorageException(new InvalidOperationException()));
Assert.That(() => _blankBusinessLogicContract.InsertBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf<StorageException>());
_blankStorageContract.Verify(x => x.AddElement(It.IsAny<BlankDataModel>()), Times.Once);
}
[Test]
public void UpdateBlank_RecordWithIncorrectData_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.UpdElement(It.IsAny<BlankDataModel>())).Throws(new ElementNotFoundException(""));
Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf<ElementNotFoundException>());
_blankStorageContract.Verify(x => x.UpdElement(It.IsAny<BlankDataModel>()), Times.Once);
}
[Test]
public void UpdateBlank_RecordWithExistData_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.UpdElement(It.IsAny<BlankDataModel>())).Throws(new ElementExistsException("Data","Data"));
Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf<ElementNotFoundException>());
_blankStorageContract.Verify(x => x.UpdElement(It.IsAny<BlankDataModel>()), Times.Once);
}
[Test]
public void UpdateBlank_NullRecord_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.UpdateBlank(null), Throws.TypeOf<ArgumentNullException>());
_blankStorageContract.Verify(x => x.UpdElement(It.IsAny<BlankDataModel>()), Times.Never);
}
[Test]
public void UpdateBlank_InvalidRecord_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new("id", "Spruce", "", "")), Throws.TypeOf<ValidationException>());
_blankStorageContract.Verify(x => x.UpdElement(It.IsAny<BlankDataModel>()), 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<string>()), Times.Once);
Assert.That(flag);
}
[Test]
public void DeleteBlank_RecordWithIncorrectId_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.DelElement(It.IsAny<string>())).Throws(new ElementNotFoundException(""));
Assert.That(() => _blankBusinessLogicContract.DeleteBlank(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
_blankStorageContract.Verify(x => x.DelElement(It.IsAny<string>()), Times.Once);
}
[Test]
public void DeleteBlank_IdIsNullOrEmpty_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.DeleteBlank(null), Throws.TypeOf<ArgumentNullException>());
Assert.That(() => _blankBusinessLogicContract.DeleteBlank(string.Empty), Throws.TypeOf<ArgumentNullException>());
_blankStorageContract.Verify(x => x.DelElement(It.IsAny<string>()), Times.Never);
}
[Test]
public void DeleteBlank_IdIsNotGuid_ThrowException_Test()
{
Assert.That(() => _blankBusinessLogicContract.DeleteBlank("id"), Throws.TypeOf<ValidationException>());
_blankStorageContract.Verify(x => x.DelElement(It.IsAny<string>()), Times.Never);
}
[Test]
public void DeleteBlank_StorageThrowError_ThrowException_Test()
{
_blankStorageContract.Setup(x => x.DelElement(It.IsAny<string>())).Throws(new StorageException(new InvalidOperationException()));
Assert.That(() => _blankBusinessLogicContract.DeleteBlank(Guid.NewGuid().ToString()), Throws.TypeOf<StorageException>());
_blankStorageContract.Verify(x => x.DelElement(It.IsAny<string>()), Times.Once);
}
}

View File

@ -11,12 +11,14 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.2" /> <PackageReference Include="coverlet.collector" Version="6.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="NUnit" Version="4.2.2" /> <PackageReference Include="NUnit" Version="4.2.2" />
<PackageReference Include="NUnit.Analyzers" Version="4.3.0" /> <PackageReference Include="NUnit.Analyzers" Version="4.3.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" /> <PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\PapaCarloBusinessLogic\PapaCarloBusinessLogic.csproj" />
<ProjectReference Include="..\PapaCarloContracts\PapaCarloContracts.csproj" /> <ProjectReference Include="..\PapaCarloContracts\PapaCarloContracts.csproj" />
</ItemGroup> </ItemGroup>