public async Task GivenValidCreateArrearsAgreementRequest_ShouldReturn200()
        {
            //arrange
            _mock.Setup(s => s.ExecuteAsync(It.IsAny <CreateArrearsAgreementRequest>(), CancellationToken.None))
            .ReturnsAsync(new ExecuteWrapper <CreateArrearsAgreementResponse>(new CreateArrearsAgreementResponse
            {
            }));
            var request = new CreateArrearsAgreementRequest();
            //act
            var response = await _classUnderTest.Post(request);

            //assert
            response.Should().NotBeNull();
            response.Should().BeOfType <ObjectResult>();
        }
        public async Task GivenInvalidInput_GatewayResponseWith_Failure()
        {
            //arrange
            var request = new CreateArrearsAgreementRequest
            {
            };
            //act
            var response = await _classUnderTest.ExecuteAsync(request, CancellationToken.None);

            //assert
            response.IsSuccess.Should().BeFalse();
            response.Result.Should().BeNull();
            response.Error.Should().NotBeNull();
            response.Error.IsValid.Should().BeFalse();
            response.Error.ValidationErrors.Should().NotBeNullOrEmpty();
        }
        public async Task WhenGivenCorrectParamaters_AndThereIsExceptionFromWebService_ApiShouldRespondWith500()
        {
            //Arrange

            _mock.Setup(s => s.ExecuteAsync(It.IsAny <CreateArrearsAgreementRequest>(), CancellationToken.None))
            .ReturnsAsync(new ExecuteWrapper <CreateArrearsAgreementResponse>(new ArrearsAgreementResponse
            {
                Success      = false,
                ErrorMessage = "there is no field",
                ErrorCode    = 1
            }));

            //Act
            var request = new CreateArrearsAgreementRequest
            {
                AgreementInfo = new ArrearsAgreementInfo
                {
                    TenancyAgreementRef        = "s",
                    Comment                    = "testing",
                    ArrearsAgreementStatusCode = "1",
                },
                PaymentSchedule = new List <ArrearsScheduledPaymentInfo>
                {
                    new ArrearsScheduledPaymentInfo
                    {
                        Amount = 10,
                        ArrearsFrequencyCode = "200",
                        Comments             = "testing",
                    }
                }.ToArray()
            };

            var response = await _classUnderTest.Post(request);

            //Assert
            Assert.IsType <ObjectResult>(response);
            var responseResult = response as ObjectResult;

            responseResult.StatusCode.Should().Be(500);
            responseResult.Value.Should().NotBeNull();
            var apiResponse = responseResult.Value as APIResponse <CreateArrearsAgreementResponse>;

            apiResponse.Data.Should().BeNull();
            apiResponse.Error.Errors.Should().NotBeNull();
            apiResponse.Error.Errors[0].Code    = "UH_1";
            apiResponse.Error.Errors[0].Message = "there is no field";
        }
        public async Task GivenValidedInput_GatewayResponseWith_Success()
        {
            //arrange
            _fakeGateway.Setup(s => s.CreateArrearsAgreementAsync(It.IsAny <ArrearsAgreementRequest>(), CancellationToken.None))
            .ReturnsAsync(new ExecuteWrapper <ArrearsAgreementResponse>(new ArrearsAgreementResponse
            {
                Success = true
            }));

            var request = new CreateArrearsAgreementRequest
            {
                AgreementInfo = new ArrearsAgreementInfo
                {
                    Reference = "ref"
                },
                PaymentSchedule = new List <ArrearsScheduledPaymentInfo>()
            };
            //act
            var response = await _classUnderTest.ExecuteAsync(request, CancellationToken.None);

            //assert
            response?.Result?.Agreement.Reference.Should().Be("ref");
        }
        public async Task <IExecuteWrapper <CreateArrearsAgreementResponse> > ExecuteAsync(CreateArrearsAgreementRequest request, CancellationToken cancellationToken)
        {
            //validate
            if (request == null)
            {
                return(new ExecuteWrapper <CreateArrearsAgreementResponse>(new RequestValidationResponse(false, "")));
            }

            var validationResponse = request.Validate(request);

            if (!validationResponse.IsValid)
            {
                return(new ExecuteWrapper <CreateArrearsAgreementResponse>(validationResponse));
            }

            //execute business logic
            var webServiceRequest = new ArrearsAgreementRequest
            {
                Agreement       = request?.AgreementInfo,
                PaymentSchedule = request?.PaymentSchedule?.ToArray()
            };
            var response = await _arrearsAgreementGateway.CreateArrearsAgreementAsync(webServiceRequest, cancellationToken).ConfigureAwait(false);

            //marshall unsuccessful WCF Service response
            if (!response.IsSuccess)
            {
                return(new ExecuteWrapper <CreateArrearsAgreementResponse>(response.Error));
            }
            //marshall successful WCF Service response
            var useCaseResponse = new CreateArrearsAgreementResponse
            {
                Agreement = response?.Result?.Agreement
            };

            return(new ExecuteWrapper <CreateArrearsAgreementResponse>(useCaseResponse));
        }
        public async Task GivenValidInput_ThenRequestBuilder_AddsCredentials_ToRequest(
            string tenancyRef, string comment, decimal startBalance, string startDate, string agreementStatusCode,
            bool isBreached, int firstCheck, string firstCheckFrequencyTypeCode, int nextCheck, string nextCheckFrequencyTypeCode,
            string fcaDate, string monitorBalanceCode, decimal amount, string arrearsFrequencyCode,
            string payementInfoStartDate, string payemntInfoComments)
        {
            //Arrange
            var fakeArrearsAgreementService = new Mock <IArrearsAgreementServiceChannel>();

            fakeArrearsAgreementService.Setup(s => s.CreateArrearsAgreementAsync(It.IsAny <ArrearsAgreementRequest>()))
            .ReturnsAsync(new ArrearsAgreementResponse());

            var fakeCredentialsService = new Mock <ICredentialsService>();

            fakeCredentialsService.Setup(s => s.GetUhSourceSystem()).Returns("testSourceSystem");
            fakeCredentialsService.Setup(s => s.GetUhUserCredentials()).Returns(new UserCredential
            {
                UserName     = "******",
                UserPassword = "******",
            });
            var serviceRequestBuilder = new ArrearsServiceRequestBuilder(fakeCredentialsService.Object);

            IArrearsAgreementGateway gateway = new ArrearsAgreementGateway(fakeArrearsAgreementService.Object, serviceRequestBuilder);
            var classUnderTest = new CreateArrearsAgreementUseCase(gateway);

            var request = new CreateArrearsAgreementRequest
            {
                AgreementInfo = new ArrearsAgreementInfo
                {
                    TenancyAgreementRef         = tenancyRef,
                    Comment                     = comment,
                    ArrearsAgreementStatusCode  = agreementStatusCode,
                    FcaDate                     = DateTime.Parse(fcaDate),
                    FirstCheck                  = firstCheck,
                    FirstCheckFrequencyTypeCode = firstCheckFrequencyTypeCode,
                    IsBreached                  = isBreached,
                    MonitorBalanceCode          = monitorBalanceCode,
                    NextCheck                   = nextCheck,
                    NextCheckFrequencyTypeCode  = nextCheckFrequencyTypeCode,
                    StartBalance                = startBalance,
                    StartDate                   = DateTime.Parse(startDate)
                },
                PaymentSchedule = new List <ArrearsScheduledPaymentInfo>
                {
                    new ArrearsScheduledPaymentInfo
                    {
                        Amount = amount,
                        ArrearsFrequencyCode = arrearsFrequencyCode,
                        Comments             = payemntInfoComments,
                        StartDate            = DateTime.Parse(payementInfoStartDate)
                    }
                }.ToArray()
            };

            fakeArrearsAgreementService.Setup(s => s.CreateArrearsAgreementAsync(It.IsAny <ArrearsAgreementRequest>()))
            .ReturnsAsync(new ArrearsAgreementResponse
            {
                Success   = true,
                Agreement = new ArrearsAgreementDto
                {
                    TenancyAgreementRef         = tenancyRef,
                    Comment                     = comment,
                    ArrearsAgreementStatusCode  = agreementStatusCode,
                    FcaDate                     = DateTime.Parse(fcaDate),
                    FirstCheck                  = firstCheck,
                    FirstCheckFrequencyTypeCode = firstCheckFrequencyTypeCode,
                    IsBreached                  = isBreached,
                    MonitorBalanceCode          = monitorBalanceCode,
                    NextCheck                   = nextCheck,
                    NextCheckFrequencyTypeCode  = nextCheckFrequencyTypeCode,
                    StartBalance                = startBalance,
                    StartDate                   = DateTime.Parse(startDate),

                    PaymentSchedule = new List <ArrearsScheduledPaymentDto>
                    {
                        new ArrearsScheduledPaymentDto
                        {
                            Amount = amount,
                            ArrearsFrequencyCode = arrearsFrequencyCode,
                            Comments             = payemntInfoComments,
                            StartDate            = DateTime.Parse(payementInfoStartDate)
                        }
                    }.ToArray()
                },
            });
            //act
            await classUnderTest.ExecuteAsync(request, CancellationToken.None);

            //assert
            fakeArrearsAgreementService.Verify(v => v.CreateArrearsAgreementAsync(It.Is <ArrearsAgreementRequest>(i => i.DirectUser != null && !string.IsNullOrEmpty(i.SourceSystem))));
        }
        public async Task GivenInValidInput_ThenUseCase_ShouldReturnInValidResponse(
            string tenancyRef, string comment, decimal startBalance, string startDate, string agreementStatusCode,
            bool isBreached, int firstCheck, string firstCheckFrequencyTypeCode, int nextCheck, string nextCheckFrequencyTypeCode,
            string fcaDate, string monitorBalanceCode, decimal amount, string arrearsFrequencyCode,
            string payementInfoStartDate, string payemntInfoComments)
        {
            //Arrange
            var fakeArrearsAgreementService = new Mock <IArrearsAgreementServiceChannel>();

            fakeArrearsAgreementService.Setup(s => s.CreateArrearsAgreementAsync(It.IsAny <ArrearsAgreementRequest>()))
            .ReturnsAsync(new ArrearsAgreementResponse
            {
                Success      = false,
                ErrorCode    = 1,
                ErrorMessage = "Not enough field",
                Agreement    = new ArrearsAgreementDto
                {
                    TenancyAgreementRef = tenancyRef,
                    Comment             = comment,
                },
            });

            var fakeCredentialsService = new Mock <ICredentialsService>();

            fakeCredentialsService.Setup(s => s.GetUhSourceSystem()).Returns("testSourceSystem");
            fakeCredentialsService.Setup(s => s.GetUhUserCredentials()).Returns(new UserCredential
            {
                UserName     = "******",
                UserPassword = "******",
            });
            var serviceRequestBuilder = new ArrearsServiceRequestBuilder(fakeCredentialsService.Object);

            IArrearsAgreementGateway gateway = new ArrearsAgreementGateway(fakeArrearsAgreementService.Object, serviceRequestBuilder);
            var classUnderTest = new CreateArrearsAgreementUseCase(gateway);

            var request = new CreateArrearsAgreementRequest
            {
                AgreementInfo = new ArrearsAgreementInfo
                {
                    TenancyAgreementRef         = tenancyRef,
                    Comment                     = comment,
                    ArrearsAgreementStatusCode  = agreementStatusCode,
                    FcaDate                     = DateTime.Parse(fcaDate),
                    FirstCheck                  = firstCheck,
                    FirstCheckFrequencyTypeCode = firstCheckFrequencyTypeCode,
                    IsBreached                  = isBreached,
                    MonitorBalanceCode          = monitorBalanceCode,
                    NextCheck                   = nextCheck,
                    NextCheckFrequencyTypeCode  = nextCheckFrequencyTypeCode,
                    StartBalance                = startBalance,
                    StartDate                   = DateTime.Parse(startDate)
                },
                PaymentSchedule = new List <ArrearsScheduledPaymentInfo>
                {
                    new ArrearsScheduledPaymentInfo
                    {
                        Amount = amount,
                        ArrearsFrequencyCode = arrearsFrequencyCode,
                        Comments             = payemntInfoComments,
                        StartDate            = DateTime.Parse(payementInfoStartDate)
                    }
                }.ToArray()
            };


            //act
            var response = await classUnderTest.ExecuteAsync(request, CancellationToken.None);

            //assert
            response.IsSuccess.Should().BeFalse();
            response.Result.Should().BeNull();
            response.Error.Errors.Should().NotBeNullOrEmpty();
            response.Error.Errors[0].Code.Should().Be("UH_1");
            response.Error.Errors[0].Message.Should().Be("Not enough field");
        }
Esempio n. 8
0
        public async Task <IActionResult> Post([FromBody][Required] CreateArrearsAgreementRequest request)
        {
            var result = await _createArrearsAgreementUseCase.ExecuteAsync(request, HttpContext.GetCancellationToken()).ConfigureAwait(false);

            return(HandleResponse(result));
        }