public async Task <ClientSettingsRecord> SaveAsync(Guid clientId, ClientSettingsRecord clientSettings) { try { using (var db = GetDbContext()) { var existing = await db.ClientSettings.FindAsync(clientId).ConfigureAwait(false); if (existing == null) { return(await CreateAsync(clientSettings)); } db.Configuration.AutoDetectChangesEnabled = true; db.Entry(existing).CurrentValues.SetValues(clientSettings); DeleteChildren <ClientDiseaseRiskRecord, int>(clientSettings.ClientDiseaseRisks, existing.ClientDiseaseRisks); AddUpdateClientDiseaseRisks(clientId, clientSettings, existing, db); await db.SaveChangesAsync().ConfigureAwait(false); return(existing); } } catch (Exception ex) { _logger.LogError($"Failed whilst saving clientSettings {clientSettings.Id}", ex); throw; } }
public void ShouldKeepEmployeeDiseaseRisksThatAreRequiredAndNotOnClientDiseaseRisk() { var empRiskStatuses = new List <EmployeeDiseaseRiskStatusRecord> { EmployeeDiseaseRiskStatusRecordFactory.New.WithIdAndDiseaseRisk(21, 1).Build(), EmployeeDiseaseRiskStatusRecordFactory.New.WithIdAndDiseaseRisk(22, 2).With(x => x.IsRequired = true).Build(), }; var clientRisk = new List <ClientDiseaseRiskRecord> { ClientDiseaseRiskRecordFactory.New.With(x => x.DiseaseRiskId = 1).Build(), }; var clientSettings = new ClientSettingsRecord { ClientDiseaseRisks = clientRisk }; var results = EmployeeDiseaseRiskStatusMapper.GetEmployeeDiseaseRiskStatuses( clientSettings, new List <DiseaseRiskRecord>(), new Lookups(), Mapper, empRiskStatuses ); Assert.That(results.Count, Is.EqualTo(2)); Assert.That(results[0].Id, Is.EqualTo(empRiskStatuses[0].Id)); Assert.That(results[1].Id, Is.EqualTo(empRiskStatuses[1].Id)); }
public async Task ShouldCallProvideSaveAsyncIfModelValid() { var clientId = Guid.NewGuid(); var clientSettings = new ClientSettingsRecord(); var updatedClientSettings = new ClientSettingsRecord(); _clientSettingsProvider.Setup(x => x.SaveAsync(clientId, clientSettings)).Returns(Task.FromResult(updatedClientSettings)); var results = await Controller.PutAsync(clientId, clientSettings); _clientSettingsProvider.Verify(x => x.SaveAsync(clientId, clientSettings), Times.Once); _clientSettingsProvider.Verify(x => x.SaveAsync(It.IsAny <Guid>(), It.IsAny <ClientSettingsRecord>()), Times.Once); var okResult = results as OkNegotiatedContentResult <ClientSettingsRecord>; Assert.That(okResult, Is.Not.Null); Assert.That(okResult.Content, Is.EqualTo(updatedClientSettings)); }
public async Task ShouldCallProviderAndReturnOkIfData() { var clientId = Guid.NewGuid(); var clientSettingsRecord = new ClientSettingsRecord(); _clientSettingsProvider.Setup(x => x.GetByClientIdAsync(clientId)).Returns(Task.FromResult(clientSettingsRecord)); var results = await Controller.GetSettings(clientId); _clientSettingsProvider.Verify(x => x.GetByClientIdAsync(clientId), Times.Once); _clientSettingsProvider.Verify(x => x.GetByClientIdAsync(It.IsAny <Guid>()), Times.Once); var okResult = results as OkNegotiatedContentResult <ClientSettingsRecord>; Assert.That(okResult, Is.Not.Null); Assert.That(okResult.Content, Is.EqualTo(clientSettingsRecord)); }
private static void AddUpdateClientDiseaseRisks(Guid clientId, ClientSettingsRecord clientSettings, ClientSettingsRecord existing, ClientSettingsDbContext db) { foreach (var clientRisk in clientSettings.ClientDiseaseRisks) { clientRisk.ClientId = clientId; var existingEntity = existing.ClientDiseaseRisks.SingleOrDefault(c => !clientRisk.IsTransient && c.Id == clientRisk.Id); if (existingEntity != null) { db.Entry(existingEntity).CurrentValues.SetValues(clientRisk); } else { existing.ClientDiseaseRisks.Add(clientRisk); } } }
private async Task <ClientSettingsRecord> CreateAsync(ClientSettingsRecord clientSettings) { try { using (var db = GetDbContext()) { db.ClientSettings.Add(clientSettings); await db.SaveChangesAsync().ConfigureAwait(false); return(clientSettings); } } catch (Exception ex) { _logger.LogError($"Failed whilst creating client setting", ex); throw; } }
public void ShouldAddMissingDiseaseRiskFromClientDiseaseRisk() { var empRiskStatuses = new List <EmployeeDiseaseRiskStatusRecord> { EmployeeDiseaseRiskStatusRecordFactory.New.WithIdAndDiseaseRisk(21, 1).Build(), EmployeeDiseaseRiskStatusRecordFactory.New.WithIdAndDiseaseRisk(22, 2).Build(), }; var clientRisk = new List <ClientDiseaseRiskRecord> { ClientDiseaseRiskRecordFactory.New.With(x => x.DiseaseRiskId = 1).Build(), ClientDiseaseRiskRecordFactory.New.With(x => x.DiseaseRiskId = 2).Build(), ClientDiseaseRiskRecordFactory.New.With(x => x.DiseaseRiskId = 3).Build() }; var clientSettings = new ClientSettingsRecord { ClientDiseaseRisks = clientRisk }; var results = EmployeeDiseaseRiskStatusMapper.GetEmployeeDiseaseRiskStatuses( clientSettings, new List <DiseaseRiskRecord>(), new Lookups(), Mapper, empRiskStatuses); Assert.That(results.Count, Is.EqualTo(3)); Assert.That(results[0].Id, Is.EqualTo(empRiskStatuses[0].Id)); Assert.That(results[0].DiseaseRiskId, Is.EqualTo(empRiskStatuses[0].DiseaseRiskId)); Assert.That(results[1].Id, Is.EqualTo(empRiskStatuses[1].Id)); Assert.That(results[1].DiseaseRiskId, Is.EqualTo(empRiskStatuses[1].DiseaseRiskId)); var newEmpRisk = results.SingleOrDefault(x => x.DiseaseRiskId == 3); Assert.That(newEmpRisk, Is.Not.Null); Assert.That(newEmpRisk.Id, Is.EqualTo(0)); Assert.That(newEmpRisk.DiseaseRiskId, Is.EqualTo(3)); }
public static IList <EmployeeDiseaseRiskStatus> GetEmployeeDiseaseRiskStatuses( ClientSettingsRecord clientSettingsRecord, IList <DiseaseRiskRecord> diseaseRisk, Lookups lookups, IMapper mapper, IList <EmployeeDiseaseRiskStatusRecord> employeeDiseaseRiskStatusRiskStatusRecords) { if (clientSettingsRecord != null) { var currentClientDiseaseRiskIds = clientSettingsRecord.ClientDiseaseRisks.Where(x => !x.IsDeleted).Select(x => x.DiseaseRiskId); var mergedStatuses = mapper.Map <IList <EmployeeDiseaseRiskStatus> >( employeeDiseaseRiskStatusRiskStatusRecords.Where(x => x.IsRequired || currentClientDiseaseRiskIds.Contains(x.DiseaseRiskId) )).ToList(); foreach (var clientDiseaseRiskId in currentClientDiseaseRiskIds) { if (mergedStatuses.All(x => x.DiseaseRiskId != clientDiseaseRiskId)) { mergedStatuses.Add(new EmployeeDiseaseRiskStatus { DiseaseRiskId = clientDiseaseRiskId, ClientId = clientSettingsRecord.Id }); } } AddLookupDescriptions(diseaseRisk, lookups, mergedStatuses); return(mergedStatuses.OrderBy(x => x.EmployeeId).ThenBy(x => x.DiseaseRiskCode).ToList()); } return(new List <EmployeeDiseaseRiskStatus>()); }
public async Task <IHttpActionResult> PutAsync(Guid clientId, ClientSettingsRecord settings) { try { if (ModelState.IsValid) { var updated = await _clientSettingsProvider.SaveAsync(clientId, settings); if (updated != null) { return(Ok(updated)); } return(NotFound()); } return(BadRequest(ModelState)); } catch (Exception e) { _logger.LogError($"Error when putting settings for client id {clientId}", e); return(InternalServerError(e)); } }