96 lines
3.0 KiB
C#
96 lines
3.0 KiB
C#
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));
|
|
}
|
|
}
|