public async void Handle_GivenValidRegistrationDetails_ShouldSucceed() { // arrange // 1. We need to store the user data somehow var mockUserRepository = new Mock <IUserRepository>(); mockUserRepository .Setup(repo => repo.Delete(It.IsAny <string>())) .ReturnsAsync(new DTO.GatewayResponses.Repositories.DeleteUserResponse("", true)); // 2. The use case and star of this test var useCase = new DeleteUserUseCase(mockUserRepository.Object); // 3. The output port is the mechanism to pass response data from the use case to a Presenter // for final preparation to deliver back to the UI/web page/api response etc. var mockOutputPort = new Mock <IOutputPort <UseCaseResponseMessage> >(); mockOutputPort.Setup(outputPort => outputPort.Handle(It.IsAny <UseCaseResponseMessage>())); // act // 4. We need a request model to carry data into the use case from the upper layer (UI, Controller etc.) var response = await useCase.Handle(new DeleteUserRequest("userName"), mockOutputPort.Object); // assert Assert.True(response); mockUserRepository.VerifyAll(); mockOutputPort.VerifyAll(); }
public async Task Handle_NotExistingUser_PassesFailedResultToOutputPort() { // Arrange var userId = Guid.NewGuid(); var deleteUserRequest = new DeleteUserRequest(userId); _userRepositoryMock .Setup(mock => mock.Get(userId)) .ReturnsAsync((User)null); // Act await _deleteUserUseCase.Handle(deleteUserRequest, _outputPortMock.Object); // Assert _userRepositoryMock.Verify(mock => mock.Delete(It.IsAny <User>()), Times.Never); _outputPortMock.Verify(mock => mock.Handle(It.Is <Response <User> >(response => response.SuccessFul == false)), Times.Once); _outputPortMock.Verify(mock => mock.Handle(It.Is <Response <User> >(response => response.SuccessFul)), Times.Never); }