public async Task ExecuteAsync(Guid packageId, CarePackageBrokerageDomain brokerageInfo) { var package = await _carePackageGateway .GetPackageAsync(packageId, PackageFields.Details, true) .EnsureExistsAsync($"Care package {packageId} not found"); package.SupplierId = brokerageInfo.SupplierId; AddCoreCost(package, brokerageInfo); RemoveDetails(package, brokerageInfo.Details); foreach (var requestedDetail in brokerageInfo.Details) { if (requestedDetail.Id is null) { AddDetail(package, requestedDetail); } else { UpdateDetail(package, requestedDetail); } } // Change status of package to in-progress package.Status = PackageStatus.InProgress; await _databaseManager.SaveAsync(); }
public void ShouldUpdateCarePackageSupplier() { var brokerageInfo = new CarePackageBrokerageDomain { SupplierId = 2 }; _useCase.ExecuteAsync(_package.Id, brokerageInfo); _package.SupplierId.Should().Be(2); VerifyDatabaseCalls(); }
public void ShouldCreateCarePackageDetails() { var brokerageInfo = new CarePackageBrokerageDomain { Details = TestDataHelper.CreateCarePackageDetailDomainList(3, PackageDetailType.AdditionalNeed) }; _useCase.ExecuteAsync(_package.Id, brokerageInfo); VerifyPackageDetails(brokerageInfo); VerifyDatabaseCalls(); }
public void ShouldNotRemoveCoreCost() { FillPackageDetails(); var brokerageInfo = new CarePackageBrokerageDomain { /* let's remove'em all */ }; _useCase.ExecuteAsync(_package.Id, brokerageInfo); VerifyPackageDetails(brokerageInfo); VerifyDatabaseCalls(); }
public void ShouldCreateCoreCostWhenNoDetailsProvided() { var brokerageInfo = new CarePackageBrokerageDomain { CoreCost = 12.34m, StartDate = DateTimeOffset.UtcNow.Date, EndDate = DateTimeOffset.UtcNow.Date.AddDays(100) }; _useCase.ExecuteAsync(_package.Id, brokerageInfo); VerifyPackageDetails(brokerageInfo); VerifyDatabaseCalls(); }
public void ShouldFailOnMissingPackage() { var brokerageInfo = new CarePackageBrokerageDomain { Details = TestDataHelper.CreateCarePackageDetailDomainList(1, PackageDetailType.AdditionalNeed) }; _useCase .Invoking(useCase => useCase.ExecuteAsync(Guid.NewGuid(), brokerageInfo)) .Should().Throw <ApiException>() .Where(ex => ex.StatusCode == StatusCodes.Status404NotFound); _dbManagerMock.Verify(mock => mock.SaveAsync(It.IsAny <string>()), Times.Never); }
public void ShouldFailOnSecondCoreCostCreation() { FillPackageDetails(); var brokerageInfo = new CarePackageBrokerageDomain { Details = TestDataHelper.CreateCarePackageDetailDomainList(1, PackageDetailType.CoreCost) }; _useCase .Invoking(useCase => useCase.ExecuteAsync(_package.Id, brokerageInfo)) .Should().Throw <ApiException>() .Where(ex => ex.StatusCode == StatusCodes.Status400BadRequest); _dbManagerMock.Verify(mock => mock.SaveAsync(It.IsAny <string>()), Times.Never); }
private void VerifyPackageDetails(CarePackageBrokerageDomain brokerageInfo) { _package.Details.Count.Should().Be(brokerageInfo.Details.Count + 1); // +1 for core cost detail var coreCostDetail = _package.Details.FirstOrDefault(d => d.Type is PackageDetailType.CoreCost); coreCostDetail.Should().NotBeNull(); coreCostDetail?.Cost.Should().Be(brokerageInfo.CoreCost); coreCostDetail?.CostPeriod.Should().Be(PaymentPeriod.Weekly); coreCostDetail?.StartDate.Should().Be(brokerageInfo.StartDate); coreCostDetail?.EndDate.Should().Be(brokerageInfo.EndDate); foreach (var requestedDetail in brokerageInfo.Details) { _package.Details.Should().ContainEquivalentOf(requestedDetail, opt => opt.Excluding(d => d.Id)); } }
public void ShouldRemoveCarePackageDetails() { var existingDetails = FillPackageDetails(); var brokerageInfo = new CarePackageBrokerageDomain { Details = existingDetails.DeepCopy() }; brokerageInfo.Details.RemoveAt(0); brokerageInfo.Details.RemoveAt(1); _useCase.ExecuteAsync(_package.Id, brokerageInfo); VerifyPackageDetails(brokerageInfo); VerifyDatabaseCalls(); }
public void ShouldUpdateCarePackageDetails() { var existingDetails = FillPackageDetails(); var brokerageInfo = new CarePackageBrokerageDomain { Details = existingDetails.DeepCopy() }; foreach (var detail in brokerageInfo.Details) { detail.Cost += 10; detail.StartDate = detail.StartDate.AddDays(-10); detail.EndDate = detail.EndDate?.AddDays(10) ?? DateTimeOffset.UtcNow.Date.AddDays(100); } _useCase.ExecuteAsync(_package.Id, brokerageInfo); VerifyPackageDetails(brokerageInfo); VerifyDatabaseCalls(); }
public void ShouldFailOnUnknownDetailUpdate() { var existingDetails = FillPackageDetails(); var brokerageInfo = new CarePackageBrokerageDomain { Details = existingDetails.DeepCopy() }; foreach (var detail in brokerageInfo.Details.Where(detail => detail.Type != PackageDetailType.CoreCost)) { detail.Id = Guid.NewGuid(); } _useCase .Invoking(useCase => useCase.ExecuteAsync(_package.Id, brokerageInfo)) .Should().Throw <ApiException>() .Where(ex => ex.StatusCode == StatusCodes.Status400BadRequest); _dbManagerMock.Verify(mock => mock.SaveAsync(It.IsAny <string>()), Times.Never); }
private static void AddCoreCost(CarePackage package, CarePackageBrokerageDomain brokerageInfo) { var coreCostDetail = package.Details.FirstOrDefault(d => d.Type is PackageDetailType.CoreCost); string subjective = package.PackageType == PackageType.ResidentialCare ? SubjectiveConstants.ResidentialCarePackageSubjectiveCode : SubjectiveConstants.NursingCarePackageSubjectiveCode; if (coreCostDetail is null) { coreCostDetail = new CarePackageDetail() { Subjective = subjective }; package.Details.Add(coreCostDetail); } coreCostDetail.Type = PackageDetailType.CoreCost; coreCostDetail.Cost = brokerageInfo.CoreCost; coreCostDetail.CostPeriod = PaymentPeriod.Weekly; coreCostDetail.StartDate = brokerageInfo.StartDate; coreCostDetail.EndDate = brokerageInfo.EndDate; coreCostDetail.Subjective = subjective; }
public static CarePackageBrokerageCreationRequest ToCreationRequest(this CarePackageBrokerageDomain input) { return(_mapper.Map <CarePackageBrokerageCreationRequest>(input)); }
public static CarePackageBrokerageResponse ToResponse(this CarePackageBrokerageDomain input) { return(_mapper.Map <CarePackageBrokerageResponse>(input)); }