コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <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));
        }