В процессе написания адаптер тестов

This commit is contained in:
2025-04-20 14:54:37 +04:00
parent 957d5adc0d
commit c28acf5bd5
3 changed files with 182 additions and 4 deletions

View File

@@ -6,9 +6,9 @@ namespace SquirrelContract.Infrastructure;
public class OperationResponse public class OperationResponse
{ {
protected HttpStatusCode StatusCode { get; set; } public HttpStatusCode StatusCode { get; set; }
protected object? Result { get; set; } public object? Result { get; set; }
public IActionResult GetResponse(HttpRequest request, HttpResponse response) public IActionResult GetResponse(HttpRequest request, HttpResponse response)
{ {

View File

@@ -0,0 +1,178 @@
using AutoMapper;
using Moq;
using SquirrelContract.AdapterContracts.OperationResponses;
using SquirrelContract.BindingModels;
using SquirrelContract.BusinessLogicContracts;
using SquirrelContract.DataModels;
using SquirrelContract.Exceptions;
using SquirrelContract.ViewModels;
using NUnit.Framework;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Net;
namespace SquirrelWebApi.Adapters.Tests
{
[TestFixture]
public class WarehouseAdapterTests
{
private Mock<IWarehouseBusinessLogicContract> _businessLogicMock;
private Mock<ILogger<WarehouseAdapter>> _loggerMock;
private WarehouseAdapter _adapter;
[OneTimeSetUp]
public void OneTimeSetUp()
{
_businessLogicMock = new Mock<IWarehouseBusinessLogicContract>();
_loggerMock = new Mock<ILogger<WarehouseAdapter>>();
_adapter = new WarehouseAdapter(
_businessLogicMock.Object,
_loggerMock.Object);
}
[Test]
public void GetAllWarehouses_WhenWarehousesExist_ReturnOk()
{
// Arrange
var warehouses = new List<WarehouseDataModel>
{
new WarehouseDataModel(Guid.NewGuid().ToString(), "Warehouse A", []),
new WarehouseDataModel(Guid.NewGuid().ToString(), "Warehouse B", [])
};
_businessLogicMock.Setup(x => x.GetAllWarehouses()).Returns(warehouses);
// Act
var result = _adapter.GetAllWarehouses();
var list = (List<WarehouseViewModel>)result.Result!;
// Assert
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK));
Assert.That(list.Count, Is.EqualTo(2));
}
[Test]
public void GetAllWarehouses_WhenListNull_ThrowsNotFound()
{
// Arrange
_businessLogicMock.Setup(x => x.GetAllWarehouses()).Throws(new NullListException());
// Act
var result = _adapter.GetAllWarehouses();
// Assert
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public void InsertWarehouse_ValidModel_ReturnsNoContent()
{
// Arrange
var model = new WarehouseBindingModel
{
Id = Guid.NewGuid().ToString(),
Name = "Test Name"
};
// Act
var result = _adapter.InsertWarehouse(model);
// Assert
var statusCodeValue = (int)result.StatusCode;
Assert.That(statusCodeValue, Is.EqualTo(204));
var warehouse = new WarehouseDataModel(model.Id,
model.Name,
It.IsAny<List<WarehouseCocktailDataModel>>());
_businessLogicMock.Verify(x => x.InsertWarehouse(
It.Is<WarehouseDataModel>(w =>
w.Id == model.Id &&
w.Name == model.Name
)), Times.Once);
}
[Test]
public void InsertWarehouse_ValidationException_ThrowsBadRequest()
{
var model = new WarehouseBindingModel { Id = "id", Name = "" };
_businessLogicMock
.Setup(x => x.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
.Throws(new ValidationException("Invalid"));
var result = _adapter.InsertWarehouse(model);
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public void DeleteWarehouse_ElementNotFound_ReturnsBadRequest()
{
_businessLogicMock
.Setup(x => x.DeleteWarehouse(It.IsAny<string>()))
.Throws(new ElementNotFoundException(""));
var result = _adapter.DeleteWarehouse("id");
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public void DeleteWarehouse_StorageException_ReturnsBadRequest()
{
_businessLogicMock
.Setup(x => x.DeleteWarehouse(It.IsAny<string>()))
.Throws(new StorageException(new InvalidOperationException()));
var result = _adapter.DeleteWarehouse("id");
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public void GetWarehouseByData_ValidId_ReturnsWarehouse()
{
var id = "id";
var data = new WarehouseDataModel(id, "Warehouse X", []);
_businessLogicMock.Setup(x => x.GetWarehouseByData(id)).Returns(data);
var result = _adapter.GetWarehouseByData(id);
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK));
}
[Test]
public void GetWarehouseByData_ElementNotFound_ReturnsNotFound()
{
var id = "missing-id";
_businessLogicMock.Setup(x => x.GetWarehouseByData(id)).Throws(new ElementNotFoundException(""));
var result = _adapter.GetWarehouseByData(id);
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public void GetWarehouseByData_ArgumentNullException_ReturnsBadRequest()
{
_businessLogicMock.Setup(x => x.GetWarehouseByData(null)).Throws(new ArgumentNullException());
var result = _adapter.GetWarehouseByData(null);
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public void GetWarehouseByData_StorageException_ReturnsInternalServerError()
{
_businessLogicMock.Setup(x => x.GetWarehouseByData("id")).Throws(new StorageException(new InvalidOperationException()));
var result = _adapter.GetWarehouseByData("id");
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError));
}
}
}

View File

@@ -210,10 +210,10 @@ internal class SupplyControllerTests : BaseWebApiControllerTest
public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test() public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test()
{ {
//Arrange //Arrange
var furniture = CreateModel(); var sale = CreateModel();
SquirrelDbContext.InsertSupplyToDatabaseAndReturn(Guid.NewGuid().ToString()); SquirrelDbContext.InsertSupplyToDatabaseAndReturn(Guid.NewGuid().ToString());
//Act //Act
var response = await HttpClient.PutAsync($"/api/supplies/changeinfo", MakeContent(furniture)); var response = await HttpClient.PutAsync($"/api/supplies/changeinfo", MakeContent(sale));
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
} }