PCRB follow up client side logic
This commit is contained in:
95
MesaFabApproval.Client.Test/ApprovalServiceTests.cs
Normal file
95
MesaFabApproval.Client.Test/ApprovalServiceTests.cs
Normal file
@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using MesaFabApproval.Client.Services;
|
||||
using MesaFabApproval.Shared.Models;
|
||||
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
|
||||
using Moq;
|
||||
using Moq.Protected;
|
||||
|
||||
using Xunit;
|
||||
|
||||
namespace MesaFabApproval.Client.Test;
|
||||
|
||||
public class ApprovalServiceTests {
|
||||
private readonly Mock<IMemoryCache> _cacheMock;
|
||||
private readonly Mock<IHttpClientFactory> _httpClientFactoryMock;
|
||||
private readonly ApprovalService _approvalService;
|
||||
|
||||
public ApprovalServiceTests() {
|
||||
_cacheMock = new Mock<IMemoryCache>();
|
||||
_httpClientFactoryMock = new Mock<IHttpClientFactory>();
|
||||
_approvalService = new ApprovalService(_cacheMock.Object, _httpClientFactoryMock.Object);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteApproval_ValidApprovalID_DeletesApproval() {
|
||||
int approvalID = 1;
|
||||
|
||||
Mock<HttpMessageHandler> handlerMock = new Mock<HttpMessageHandler>();
|
||||
|
||||
handlerMock
|
||||
.Protected()
|
||||
.Setup<Task<HttpResponseMessage>>(
|
||||
"SendAsync",
|
||||
ItExpr.Is<HttpRequestMessage>(req => req.Method == HttpMethod.Delete),
|
||||
ItExpr.IsAny<CancellationToken>()
|
||||
)
|
||||
.ReturnsAsync(new HttpResponseMessage {
|
||||
StatusCode = HttpStatusCode.OK,
|
||||
});
|
||||
|
||||
HttpClient httpClient = new HttpClient(handlerMock.Object) {
|
||||
BaseAddress = new Uri("https://localhost:5000")
|
||||
};
|
||||
|
||||
_httpClientFactoryMock.Setup(_ => _.CreateClient(It.IsAny<string>())).Returns(httpClient);
|
||||
|
||||
await _approvalService.DeleteApproval(approvalID);
|
||||
|
||||
handlerMock.Protected().Verify(
|
||||
"SendAsync",
|
||||
Times.Once(),
|
||||
ItExpr.Is<HttpRequestMessage>(req => req.Method == HttpMethod.Delete),
|
||||
ItExpr.IsAny<CancellationToken>()
|
||||
);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteApproval_InvalidApprovalID_ThrowsArgumentException() {
|
||||
int approvalID = 0;
|
||||
|
||||
await Assert.ThrowsAsync<ArgumentException>(() => _approvalService.DeleteApproval(approvalID));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteApproval_DeletionFails_ThrowsException() {
|
||||
int approvalID = 1;
|
||||
|
||||
Mock<HttpMessageHandler> handlerMock = new Mock<HttpMessageHandler>();
|
||||
handlerMock
|
||||
.Protected()
|
||||
.Setup<Task<HttpResponseMessage>>(
|
||||
"SendAsync",
|
||||
ItExpr.Is<HttpRequestMessage>(req => req.Method == HttpMethod.Delete),
|
||||
ItExpr.IsAny<CancellationToken>()
|
||||
)
|
||||
.ReturnsAsync(new HttpResponseMessage {
|
||||
StatusCode = HttpStatusCode.BadRequest,
|
||||
ReasonPhrase = "Bad Request"
|
||||
});
|
||||
|
||||
HttpClient httpClient = new HttpClient(handlerMock.Object) {
|
||||
BaseAddress = new Uri("https://localhost:5000")
|
||||
};
|
||||
|
||||
_httpClientFactoryMock.Setup(_ => _.CreateClient(It.IsAny<string>())).Returns(httpClient);
|
||||
|
||||
await Assert.ThrowsAsync<Exception>(() => _approvalService.DeleteApproval(approvalID));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user