public async Task TestInteractor_NotExist() { // ARRANGE // Authorization Service Mocking var authServiceMock = new Mock <IAuthService>(); authServiceMock.Setup(d => d.IsAuthenticated()) .Returns(true); authServiceMock.Setup(d => d.IsAuthorized(AuthorizationRole.Admin)) .Returns(true); // Repository Mocking var repositoryMock = new Mock <IMotorcycleRepository>(); // Repository Delete Mocking var deleteTcs = new TaskCompletionSource <(OperationStatus, IError)>(); deleteTcs.SetResult((OperationStatus.NotFound, new Error("Does not exist."))); repositoryMock.Setup(d => d.DeleteAsync(It.IsAny <long>())) .Returns(deleteTcs.Task); var(request, _) = DeleteMotorcycleRequest.NewDeleteMotorcycleRequest(123); (DeleteMotorcycleInteractor interactor, _) = DeleteMotorcycleInteractor.NewDeleteMotorcycleInteractor(repositoryMock.Object, authServiceMock.Object); // ACT (_, IError error) = await interactor.HandleAsync(request); // ASSERT Assert.NotNull(error); }
public async Task TestInteractor_Delete() { // ARRANGE // Authorization Service Mocking var authServiceMock = new Mock <IAuthService>(); authServiceMock.Setup(d => d.IsAuthenticated()) .Returns(true); authServiceMock.Setup(d => d.IsAuthorized(AuthorizationRole.Admin)) .Returns(true); // Repository Mocking (Motorcycle motorcycle, _) = Motorcycle.NewMotorcycle("Honda", "Shadow", 2006, "01234567890123456"); motorcycle.Id = 1; var repositoryMock = new Mock <IMotorcycleRepository>(); // Repository Delete Mocking var deleteTcs = new TaskCompletionSource <(OperationStatus, IError)>(); deleteTcs.SetResult((OperationStatus.Ok, null)); repositoryMock.Setup(d => d.DeleteAsync(It.IsAny <long>())) .Returns(deleteTcs.Task); var(request, _) = DeleteMotorcycleRequest.NewDeleteMotorcycleRequest(motorcycle.Id); (DeleteMotorcycleInteractor interactor, _) = DeleteMotorcycleInteractor.NewDeleteMotorcycleInteractor(repositoryMock.Object, authServiceMock.Object); // ACT (DeleteMotorcycleResponse response, _) = await interactor.HandleAsync(request); // ASSERT Assert.True(response.Id == motorcycle.Id); }
public async Task TestInteractor_NotAuthenticated() { // ARRANGE var authServiceMock = new Mock <IAuthService>(); authServiceMock.Setup(d => d.IsAuthenticated()).Returns(false); var repositoryMock = new Mock <IMotorcycleRepository>(); var(request, _) = DeleteMotorcycleRequest.NewDeleteMotorcycleRequest(123); (DeleteMotorcycleInteractor interactor, _) = DeleteMotorcycleInteractor.NewDeleteMotorcycleInteractor(repositoryMock.Object, authServiceMock.Object); // ACT (_, IError error) = await interactor.HandleAsync(request); // ASSERT Assert.NotNull(error); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Handle processes the request message and generates the response message. It is performing /// the use case. The request message is a dto containing the required data for completing the /// use case. /// </summary> /// /// <param name="request"> The request. </param> /// /// <returns> /// On success, the method returns the (response message, nil), otherwise (nil, error). /// </returns> //////////////////////////////////////////////////////////////////////////////////////////////////// public async Task <(DeleteMotorcycleResponse response, IError error)> HandleAsync(DeleteMotorcycleRequest request) { // Verify that the user has been properly authenticated. if (!_authService.IsAuthenticated()) { return(DeleteMotorcycleResponse.NewDeleteMotorcycleResponse(request.Id, OperationStatus.NotAuthenticated, new Error("Delete operation failed due to not being authenticated."))); } // Verify that the user has the necessary authorizations. if (!_authService.IsAuthorized(AuthorizationRole.Admin)) { return(DeleteMotorcycleResponse.NewDeleteMotorcycleResponse(request.Id, OperationStatus.NotAuthorized, new Error("Delete operation failed due to not being authorized, so please contact your system administrator."))); } // Delete the motorcycle with Id from the repository. (OperationStatus status, IError error) = await _motorcycleRepository.DeleteAsync(request.Id); if (error != null) { return(DeleteMotorcycleResponse.NewDeleteMotorcycleResponse(request.Id, status, error)); } // Save the changes. (status, error) = await _motorcycleRepository.SaveAsync(); if (error != null) { return(DeleteMotorcycleResponse.NewDeleteMotorcycleResponse(request.Id, status, error)); } // Return the successful response message. return(DeleteMotorcycleResponse.NewDeleteMotorcycleResponse(request.Id, OperationStatus.Ok, null)); }