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); }
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); }
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); }
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); }
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); }
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(); }
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); }
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); }
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 ); }