Esempio n. 1
0
            public async Task CreateVersion_Stages_Reopen(string testCase, string strCostAction, string shouldClearExchangeRateDate)
            {
                // Arrange
                var costHasExchangeRateDate = string.IsNullOrWhiteSpace(shouldClearExchangeRateDate)
                    ? true
                    : false;
                var cost = await SetupCostStageData(testCase);

                CostAction action      = (CostAction)Enum.Parse(typeof(CostAction), strCostAction);
                var        newRevision = new CostStageRevision {
                    Name = cost.LatestCostStageRevision.Name
                };

                _costStageRevisionServiceMock.Setup(crs => crs.CreateVersion(It.IsAny <CostStageRevision>(), It.IsAny <Guid>(), It.IsAny <BuType>(), action))
                .ReturnsAsync(newRevision);
                CostStatusServiceMock.Setup(b => b.UpdateCostStatus(It.IsAny <BuType>(), cost.Id, action))
                .ReturnsAsync(new OperationResponse {
                });
                CostApprovalServiceMock.Setup(b => b.UpdateApprovals(It.IsAny <Guid>(), User.Id, It.IsAny <BuType>()))
                .Returns(Task.FromResult(default(object)));
                _activityLogServiceMock.Setup(b => b.Log(It.IsAny <CostReopened>()))
                .Returns(Task.FromResult(default(object)));

                // Act
                var response = await CostActionService.CreateVersion(cost.Id, User, action);

                // Assert
                var updatedCost = await _eFContext.Cost.FindAsync(cost.Id);

                updatedCost.ExchangeRateDate.HasValue.Should().Be(costHasExchangeRateDate);
                updatedCost.ExchangeRate.HasValue.Should().Be(costHasExchangeRateDate);
            }
Esempio n. 2
0
            public async Task CalculatePaymentAmount_AfterSubmission()
            {
                // Arrange
                CostBuilderMock    = new Mock <ICostBuilder>(MockBehavior.Strict);
                PaymentServiceMock = new Mock <IPaymentService>(MockBehavior.Strict);

                var cost     = MockCost();
                var sequence = new MockSequence();

                CostBuilderMock.InSequence(sequence).Setup(b => b.IsValidForSubmittion(cost.Id))
                .ReturnsAsync(new OperationResponse {
                    Success = true
                });

                CostBuilderMock.InSequence(sequence).Setup(b => b.SubmitCost(cost.Id))
                .Returns(Task.CompletedTask);

                PaymentServiceMock.InSequence(sequence).Setup(p =>
                                                              p.CalculatePaymentAmount(cost.LatestCostStageRevision.Id, true))
                .ReturnsAsync(new PaymentAmountResult());

                CostBuilder = new List <Lazy <ICostBuilder, PluginMetadata> >
                {
                    new Lazy <ICostBuilder, PluginMetadata>(() => CostBuilderMock.Object, new PluginMetadata {
                        BuType = BuType.Pg
                    })
                };
                PaymentServiceBuilder = new List <Lazy <IPaymentService, PluginMetadata> >
                {
                    new Lazy <IPaymentService, PluginMetadata>(() => PaymentServiceMock.Object, new PluginMetadata {
                        BuType = BuType.Pg
                    })
                };
                CostActionService = new CostActionService(
                    _eFContext,
                    ApprovalServiceMock.Object,
                    _eventServiceMock.Object,
                    _costStageRevisionServiceMock.Object,
                    _costStageServiceMock.Object,
                    CostStatusServiceMock.Object,
                    CostBuilder,
                    CostApprovalServiceMock.Object,
                    PaymentServiceBuilder,
                    _valueReportingMock.Object,
                    _activityLogServiceMock.Object,
                    SupportNotificationServiceMock.Object
                    );

                // Act
                await CostActionService.Submit(cost.Id, User);

                // Assert
                CostBuilderMock.Verify(b => b.IsValidForSubmittion(cost.Id), Times.Once);
                CostBuilderMock.Verify(b => b.SubmitCost(cost.Id), Times.Once);
                PaymentServiceMock.Verify(p => p.CalculatePaymentAmount(cost.LatestCostStageRevision.Id, true), Times.Once);
            }
Esempio n. 3
0
            public async Task SetStatusToCancel()
            {
                // Arrange
                var cost = MockCost();

                // Act
                await CostActionService.CompleteCancel(cost.Id, BuType.Pg);

                // Assert
                CostStatusServiceMock.Verify(cs => cs.UpdateCostStageRevisionStatus(cost.Id, CostStageRevisionStatus.Cancelled, BuType.Pg), Times.Once);
            }
Esempio n. 4
0
            public async Task SetStatusToCancel()
            {
                // Arrange
                var cost = MockCost();

                // Act
                await CostActionService.Cancel(User.BuType, cost.Id);

                // Assert
                CostStatusServiceMock.Verify(cs => cs.UpdateCostStatus(User.BuType, cost.Id, CostAction.Cancel), Times.Once);
            }
Esempio n. 5
0
            public async Task SetStatusToRecall()
            {
                // Arrange
                var cost = MockCost();

                // Act
                var response = await CostActionService.CompleteRecall(cost.Id, User);

                // Assert
                response.Should().NotBeNull();
                CostStatusServiceMock.Verify(cs => cs.UpdateCostStageRevisionStatus(cost.Id, CostStageRevisionStatus.Recalled, BuType.Pg), Times.Once);
            }
Esempio n. 6
0
            public async Task ReturnFailureReponse_WhenCostIsNotValidForSubmittion()
            {
                // Arrange
                var cost = MockCost();

                CostBuilderMock.Setup(b => b.IsValidForSubmittion(cost.Id)).ReturnsAsync(new OperationResponse {
                    Success = false
                });

                // Act
                var response = await CostActionService.Submit(cost.Id, User);

                // Assert
                response.Success.Should().BeFalse();
            }
Esempio n. 7
0
            public async Task UpdateCostStatusAndSendForApproval()
            {
                // Arrange
                var cost = MockCost();

                CostBuilderMock.Setup(b => b.IsValidForSubmittion(cost.Id)).ReturnsAsync(new OperationResponse {
                    Success = true
                });

                // Act
                await CostActionService.Submit(cost.Id, User);

                // Assert
                ApprovalServiceMock.Verify(cs => cs.SubmitApprovals(It.IsAny <Cost>(), It.IsAny <CostUser>(), It.IsAny <IEnumerable <Approval> >(), It.IsAny <BuType>()), Times.Once);
                CostStatusServiceMock.Verify(cs => cs.UpdateCostStatus(User.BuType, cost.Id, CostAction.Submit), Times.Once);
            }
Esempio n. 8
0
            public async Task UpdateSubmittedAtOfTheCostStageRevision()
            {
                // Arrange
                var cost = MockCost();
                var timeJustBeforeSubmittion = DateTime.UtcNow;

                CostBuilderMock.Setup(b => b.IsValidForSubmittion(cost.Id)).ReturnsAsync(new OperationResponse {
                    Success = true
                });

                // Act
                await CostActionService.Submit(cost.Id, User);

                // Assert
                cost.LatestCostStageRevision.Submitted.Should().NotBeNull();
                Debug.Assert(cost.LatestCostStageRevision.Submitted != null, "cost.LatestCostStageRevision.Submitted != null");
                cost.LatestCostStageRevision.Submitted.Value.Should().BeOnOrAfter(timeJustBeforeSubmittion);
                cost.LatestCostStageRevision.Submitted.Value.Should().BeOnOrBefore(DateTime.UtcNow);
            }
Esempio n. 9
0
            public void Setup()
            {
                _eFContext            = EFContextFactory.CreateInMemoryEFContext();
                CostStatusServiceMock = new Mock <ICostStatusService>();
                _options = new Mock <IOptions <AppSettings> >();
                _options.Setup(o => o.Value).Returns(new AppSettings());
                _eventServiceMock             = new Mock <IEventService>();
                ApprovalServiceMock           = new Mock <IApprovalService>();
                _costStageRevisionServiceMock = new Mock <ICostStageRevisionService>();
                _costStageServiceMock         = new Mock <ICostStageService>();
                CostBuilderMock         = new Mock <ICostBuilder>();
                PaymentServiceMock      = new Mock <IPaymentService>();
                _valueReportingMock     = new Mock <IValueReportingService>();
                _activityLogServiceMock = new Mock <IActivityLogService>();

                CostBuilder = new List <Lazy <ICostBuilder, PluginMetadata> >
                {
                    new Lazy <ICostBuilder, PluginMetadata>(() => CostBuilderMock.Object, new PluginMetadata {
                        BuType = BuType.Pg
                    })
                };

                PaymentServiceBuilder = new List <Lazy <IPaymentService, PluginMetadata> >
                {
                    new Lazy <IPaymentService, PluginMetadata>(() => PaymentServiceMock.Object, new PluginMetadata {
                        BuType = BuType.Pg
                    })
                };

                User = new UserIdentity
                {
                    Email    = "*****@*****.**",
                    AgencyId = Guid.NewGuid(),
                    Id       = Guid.NewGuid(),
                    BuType   = BuType.Pg
                };

                CostStatusServiceMock.Setup(cs => cs.UpdateCostStageRevisionStatus(It.IsAny <Guid>(), It.IsAny <CostStageRevisionStatus>(), It.IsAny <BuType>()))
                .ReturnsAsync(true);

                CostUser = new CostUser
                {
                    Id       = User.Id,
                    Email    = User.Email,
                    ParentId = User.AgencyId
                };
                _eFContext.CostUser.Add(CostUser);
                _eFContext.SaveChanges();

                CostApprovalServiceMock        = new Mock <ICostApprovalService>();
                SupportNotificationServiceMock = new Mock <ISupportNotificationService>();

                CostActionService = new CostActionService(
                    _eFContext,
                    ApprovalServiceMock.Object,
                    _eventServiceMock.Object,
                    _costStageRevisionServiceMock.Object,
                    _costStageServiceMock.Object,
                    CostStatusServiceMock.Object,
                    CostBuilder,
                    CostApprovalServiceMock.Object,
                    PaymentServiceBuilder,
                    _valueReportingMock.Object,
                    _activityLogServiceMock.Object,
                    SupportNotificationServiceMock.Object
                    );
            }