Добавил адаптер
This commit is contained in:
@@ -0,0 +1,426 @@
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using TwoFromTheCasketContracts.BindingModels;
|
||||
using TwoFromTheCasketContracts.BusinessLogicsContracts;
|
||||
using TwoFromTheCasketContracts.DataModels;
|
||||
using TwoFromTheCasketContracts.Exceptions;
|
||||
using TwoFromTheCasketContracts.ViewModels;
|
||||
using TwoFromTheCasketWebApi.Adapters;
|
||||
|
||||
namespace TwoFromTheCasketTests.AdapterTests;
|
||||
|
||||
[TestFixture]
|
||||
public class WarehouseAdapterTests
|
||||
{
|
||||
private WarehouseAdapter _adapter;
|
||||
private Mock<IWarehouseBuisnessLogicContract> _logic;
|
||||
private Mock<ILogger<WarehouseAdapter>> _logger;
|
||||
private Mock<HttpRequest> _request;
|
||||
private Mock<HttpResponse> _response;
|
||||
private int _status;
|
||||
|
||||
[OneTimeSetUp]
|
||||
public void OneTimeSetUp()
|
||||
{
|
||||
_logic = new Mock<IWarehouseBuisnessLogicContract>();
|
||||
_logger = new Mock<ILogger<WarehouseAdapter>>();
|
||||
_adapter = new WarehouseAdapter(_logic.Object, _logger.Object);
|
||||
_request = new Mock<HttpRequest>();
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_status = 0;
|
||||
_response = CreateMockResponse();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
_logic.Reset();
|
||||
_request.Reset();
|
||||
_response.Reset();
|
||||
}
|
||||
|
||||
private Mock<HttpResponse> CreateMockResponse()
|
||||
{
|
||||
var mock = new Mock<HttpResponse>();
|
||||
mock.Setup(x => x.StatusCode).Returns(_status);
|
||||
mock.SetupSet(x => x.StatusCode = It.IsAny<int>())
|
||||
.Callback<int>(code => _status = code);
|
||||
return mock;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetList_ReturnsRecords()
|
||||
{
|
||||
var data = new List<WarehouseDataModel>
|
||||
{
|
||||
new("id1", "W1", "L1", []),
|
||||
new("id2", "W2", "L2", [])
|
||||
};
|
||||
_logic.Setup(x => x.GetWarehousesByName(It.IsAny<string>())).Returns(data);
|
||||
|
||||
var r = _adapter.GetList().GetResponse(_request.Object, _response.Object) as ObjectResult;
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.OK));
|
||||
var list = r?.Value as List<WarehouseViewModel>;
|
||||
Assert.That(list?.Count, Is.EqualTo(data.Count));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetList_ReturnsEmpty()
|
||||
{
|
||||
_logic.Setup(x => x.GetWarehousesByName(It.IsAny<string>())).Returns([]);
|
||||
|
||||
var r = _adapter.GetList().GetResponse(_request.Object, _response.Object) as ObjectResult;
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.OK));
|
||||
var list = r?.Value as List<WarehouseViewModel>;
|
||||
Assert.That(list, Is.Empty);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetList_NullList()
|
||||
{
|
||||
_logic.Setup(x => x.GetWarehousesByName(It.IsAny<string>())).Throws<NullListException>();
|
||||
|
||||
var r = _adapter.GetList().GetResponse(_request.Object, _response.Object) as ObjectResult;
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetList_StorageException()
|
||||
{
|
||||
_logic.Setup(x => x.GetWarehousesByName(It.IsAny<string>()))
|
||||
.Throws(new StorageException(new System.Exception("err")));
|
||||
|
||||
var r = _adapter.GetList().GetResponse(_request.Object, _response.Object) as ObjectResult;
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetList_GenericException()
|
||||
{
|
||||
_logic.Setup(x => x.GetWarehousesByName(It.IsAny<string>()))
|
||||
.Throws(new System.Exception());
|
||||
|
||||
var r = _adapter.GetList().GetResponse(_request.Object, _response.Object) as ObjectResult;
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetElement_ReturnsRecord()
|
||||
{
|
||||
var id = Guid.NewGuid().ToString();
|
||||
var data = new WarehouseDataModel(id, "Name", "Loc", []);
|
||||
_logic.Setup(l => l.GetWarehouseByData(id)).Returns(data);
|
||||
|
||||
var res = _adapter.GetElement(id).GetResponse(_request.Object, _response.Object) as ObjectResult;
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.OK));
|
||||
var vm = res?.Value as WarehouseViewModel;
|
||||
Assert.That(vm?.Id, Is.EqualTo(id));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetElement_ArgumentNullException()
|
||||
{
|
||||
_logic.Setup(l => l.GetWarehouseByData(It.IsAny<string>()))
|
||||
.Throws<ArgumentNullException>();
|
||||
|
||||
_adapter.GetElement("").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetElement_ElementNotFoundException()
|
||||
{
|
||||
_logic.Setup(l => l.GetWarehouseByData(It.IsAny<string>()))
|
||||
.Throws(new ElementNotFoundException("msg"));
|
||||
|
||||
_adapter.GetElement("id").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetElement_StorageException()
|
||||
{
|
||||
_logic.Setup(l => l.GetWarehouseByData(It.IsAny<string>()))
|
||||
.Throws(new StorageException(new Exception("inner")));
|
||||
|
||||
_adapter.GetElement("id").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetElement_GenericException()
|
||||
{
|
||||
_logic.Setup(l => l.GetWarehouseByData(It.IsAny<string>()))
|
||||
.Throws(new Exception());
|
||||
|
||||
_adapter.GetElement("id").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Register_ValidRecord()
|
||||
{
|
||||
var bm = new WarehouseBindingModel { Id = Guid.NewGuid().ToString(), Name = "N", Location = "L" };
|
||||
var flag = false;
|
||||
|
||||
_logic.Setup(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Callback<WarehouseDataModel>(dm => flag = dm.Id == bm.Id && dm.Name == bm.Name && dm.Location == bm.Location);
|
||||
|
||||
var res = _adapter.Register(bm).GetResponse(_request.Object, _response.Object) as StatusCodeResult;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NoContent));
|
||||
Assert.That(flag, Is.True);
|
||||
_logic.Verify(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()), Times.Once);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Register_ArgumentNullException()
|
||||
{
|
||||
_logic.Setup(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws<ArgumentNullException>();
|
||||
|
||||
_adapter.Register(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Register_ValidationException()
|
||||
{
|
||||
_logic.Setup(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new ValidationException("bad"));
|
||||
|
||||
_adapter.Register(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Register_ElementExistsException()
|
||||
{
|
||||
_logic.Setup(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new ElementExistsException("exists", "Id"));
|
||||
|
||||
_adapter.Register(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Register_StorageException()
|
||||
{
|
||||
_logic.Setup(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new StorageException(new Exception("inner")));
|
||||
|
||||
_adapter.Register(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Register_GenericException()
|
||||
{
|
||||
_logic.Setup(l => l.InsertWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new Exception("oops"));
|
||||
|
||||
_adapter.Register(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_ValidRecord()
|
||||
{
|
||||
var bm = new WarehouseBindingModel { Id = Guid.NewGuid().ToString(), Name = "Upd", Location = "Loc" };
|
||||
var flag = false;
|
||||
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Callback<WarehouseDataModel>(dm => flag = dm.Id == bm.Id && dm.Name == bm.Name && dm.Location == bm.Location);
|
||||
|
||||
var res = _adapter.ChangeInfo(bm).GetResponse(_request.Object, _response.Object) as StatusCodeResult;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NoContent));
|
||||
Assert.That(flag, Is.True);
|
||||
_logic.Verify(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()), Times.Once);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_ArgumentNullException()
|
||||
{
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws<ArgumentNullException>();
|
||||
|
||||
_adapter.ChangeInfo(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_ValidationException()
|
||||
{
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new ValidationException("bad"));
|
||||
|
||||
_adapter.ChangeInfo(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_ElementNotFoundException()
|
||||
{
|
||||
var id = Guid.NewGuid().ToString();
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new ElementNotFoundException(id));
|
||||
|
||||
var bm = new WarehouseBindingModel { Id = id };
|
||||
_adapter.ChangeInfo(bm).GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_ElementExistsException()
|
||||
{
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new ElementExistsException("exists", "Id"));
|
||||
|
||||
_adapter.ChangeInfo(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_StorageException()
|
||||
{
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new StorageException(new Exception("inner")));
|
||||
|
||||
_adapter.ChangeInfo(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChangeInfo_GenericException()
|
||||
{
|
||||
_logic.Setup(l => l.UpdateWarehouse(It.IsAny<WarehouseDataModel>()))
|
||||
.Throws(new Exception("oops"));
|
||||
|
||||
_adapter.ChangeInfo(new WarehouseBindingModel())
|
||||
.GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_Valid()
|
||||
{
|
||||
var flag = false;
|
||||
const string id = "good‑id";
|
||||
|
||||
_logic.Setup(l => l.DeleteWarehouse(It.IsAny<string>()))
|
||||
.Callback<string>(x => flag = x == id);
|
||||
|
||||
var res = _adapter.Remove(id).GetResponse(_request.Object, _response.Object) as StatusCodeResult;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NoContent));
|
||||
Assert.That(flag, Is.True);
|
||||
_logic.Verify(l => l.DeleteWarehouse(It.IsAny<string>()), Times.Once);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_ArgumentNullException()
|
||||
{
|
||||
_logic.Setup(l => l.DeleteWarehouse(It.IsAny<string>()))
|
||||
.Throws<ArgumentNullException>();
|
||||
|
||||
_adapter.Remove("").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_ValidationException()
|
||||
{
|
||||
_logic.Setup(l => l.DeleteWarehouse(It.IsAny<string>()))
|
||||
.Throws(new ValidationException("bad"));
|
||||
|
||||
_adapter.Remove("bad").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_ElementNotFoundException()
|
||||
{
|
||||
const string id = "missing";
|
||||
_logic.Setup(l => l.DeleteWarehouse(It.IsAny<string>()))
|
||||
.Throws(new ElementNotFoundException(id));
|
||||
|
||||
_adapter.Remove(id).GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_StorageException()
|
||||
{
|
||||
_logic.Setup(l => l.DeleteWarehouse(It.IsAny<string>()))
|
||||
.Throws(new StorageException(new Exception("inner")));
|
||||
|
||||
_adapter.Remove("id").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_GenericException()
|
||||
{
|
||||
_logic.Setup(l => l.DeleteWarehouse(It.IsAny<string>()))
|
||||
.Throws(new Exception("oops"));
|
||||
|
||||
_adapter.Remove("id").GetResponse(_request.Object, _response.Object);
|
||||
|
||||
Assert.That(_status, Is.EqualTo((int)HttpStatusCode.InternalServerError));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -9,5 +9,5 @@ namespace TwoFromTheCasketTests.Infrastructure;
|
||||
|
||||
public class ConfigurationDatabaseTest : IConfigurationDatabase
|
||||
{
|
||||
public string ConnectionString => "Host=localhost;Port=5432;Database=TwoFromTheCasketDb2;Username=postgres;Password=123456";
|
||||
public string ConnectionString => "Host=localhost;Port=5432;Database=TwoFromTheCasketDb2;Username=postgres;Password=1234";
|
||||
}
|
||||
@@ -114,4 +114,6 @@ public class WarehouseAdapter : IWarehouseAdapter
|
||||
_ => WarehouseOperationResponse.InternalServerError(ex.Message)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user