示例#1
0
        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;
            }
        }
示例#2
0
            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));
            }
示例#5
0
 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);
         }
     }
 }
示例#6
0
        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;
            }
        }
示例#7
0
            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>());
        }
示例#9
0
        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));
            }
        }