public async Task GivenTenancyAgreementRef_WhenCreateAgreementsWithCorrectParameters_ShouldNotBeNull()
        {
            //Arrange
            var fakeArrearsAgreementService = new Mock <IArrearsAgreementServiceChannel>();

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

            var fakeCredentialsService = new Mock <ICredentialsService>();
            var serviceRequestBuilder  = new ArrearsServiceRequestBuilder(fakeCredentialsService.Object);

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

            var request = new ArrearsAgreementRequest
            {
                Agreement = new ArrearsAgreementInfo
                {
                    TenancyAgreementRef = "000017/01",
                    Comment             = "Testing",
                },
            };

            //act
            var response = await classUnderTest.CreateArrearsAgreementAsync(request, CancellationToken.None).ConfigureAwait(false);

            //assert
            response.Should().NotBeNull();
        }
        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 GivenTenancyAgreementRef_WhenCreateAgreementsWithCorrectParameters_ShouldReturnAValidObject(
            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>();
            var serviceRequestBuilder  = new ArrearsServiceRequestBuilder(fakeCredentialsService.Object);

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

            var request = new ArrearsAgreementRequest
            {
                Agreement = 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
            var response = await classUnderTest.CreateArrearsAgreementAsync(request, CancellationToken.None).ConfigureAwait(false);

            //assert
            response.Result.Agreement.TenancyAgreementRef.Should().Be(tenancyRef);
            response.Result.Agreement.Comment.Should().Be(comment);
            response.Result.Agreement.ArrearsAgreementStatusCode.Should().Be(agreementStatusCode);
            response.Result.Agreement.FcaDate.Should().Be(DateTime.Parse(fcaDate));
            response.Result.Agreement.FirstCheck.Should().Be(firstCheck);
            response.Result.Agreement.FirstCheckFrequencyTypeCode.Should().Be(firstCheckFrequencyTypeCode);
            response.Result.Agreement.IsBreached.Should().Be(isBreached);
            response.Result.Agreement.MonitorBalanceCode.Should().Be(monitorBalanceCode);
            response.Result.Agreement.NextCheck.Should().Be(nextCheck);
            response.Result.Agreement.NextCheckFrequencyTypeCode.Should().Be(nextCheckFrequencyTypeCode);
            response.Result.Agreement.StartBalance.Should().Be(startBalance);
            response.Result.Agreement.StartDate.Should().Be(DateTime.Parse(startDate));

            response.Result.Agreement.PaymentSchedule.Should().NotBeNull();
            var paymentSchedule = response.Result.Agreement.PaymentSchedule[0];

            paymentSchedule.Amount.Should().Be(amount);
            paymentSchedule.ArrearsFrequencyCode.Should().Be(arrearsFrequencyCode);
            paymentSchedule.Comments.Should().Be(payemntInfoComments);
            paymentSchedule.StartDate.Should().Be(DateTime.Parse(payementInfoStartDate));
        }
Esempio n. 4
0
        /// <summary>
        /// Creates Arrears Agreement
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <IExecuteWrapper <ArrearsAgreementResponse> > CreateArrearsAgreementAsync(ArrearsAgreementRequest request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request is null");
            }

            request = _arrearsServiceRequestBuilder.BuildArrearsRequest <ArrearsAgreementRequest>(request);
            var response = await _actionDiaryService.CreateArrearsAgreementAsync(request).ConfigureAwait(false);

            if (_actionDiaryService.State != CommunicationState.Closed)
            {
                _actionDiaryService.Close();
            }
            var executeResponse = new ExecuteWrapper <ArrearsAgreementResponse>(response);

            return(executeResponse);
        }