public async Task <IEnumerable <SettingsDto> > Handle(GetCompanySettingListQuery request, CancellationToken cancellationToken) { var settings = await _repository.Queryable() .Where(x => x.SettingType == Domain.Enums.SettingType.Company) .Select(x => new { Settings = x, CompanySettings = x.CompanySettings.Where(c => c.CompanyId == request.CompanyId) }) .ToListAsync(); List <SettingsDto> settingsDto = new List <SettingsDto>(); if (settings != null) { _logger.LogInformation($"Got a request get company setting by CompanyId: {request.CompanyId}"); foreach (var setting in settings) { var companySettings = setting.CompanySettings.FirstOrDefault(x => x.SettingId == setting.Settings.SettingId); settingsDto.Add(new SettingsDto() { SettingId = setting.Settings.SettingId, Key = setting.Settings.SettingKey, Value = companySettings == null ? setting.Settings.DefaultValue : companySettings.SettingValue }); } return(settingsDto); } _logger.LogInformation($"Settings not found by CompanyId: {request.CompanyId}"); return(settingsDto); }
public async Task Should_ReturnCompanySettings_When_CompanyHasCustomSettingsValue() { // Arrange var entity = new SettingsDb() { SettingKey = "key_1", DefaultValue = "default_value_1", SettingType = Domain.Enums.SettingType.Company }; entity.CompanySettings.Add(new Domain.Models.CompanySetting() { CompanyId = 1, SettingValue = "company_1_value" }); entity.CompanySettings.Add(new Domain.Models.CompanySetting() { CompanyId = 2, SettingValue = "company_2_value" }); _fixture.Context.Settings.Attach(entity); entity = new SettingsDb() { SettingKey = "key_2", DefaultValue = "default_value_2", SettingType = Domain.Enums.SettingType.Company }; _fixture.Context.Settings.Attach(entity); _fixture.Context.SaveChanges(); IRepository <SettingsDb> repository = new Repository <SettingsDb>(_fixture.Context); var handler = new GetCompanySettingListHandler(repository, _mapper, _logger); var request = new GetCompanySettingListQuery(companyId: 1); // Act var tcs = new CancellationToken(); var result = await handler.Handle(request, tcs); // Assert Assert.Equal("company_1_value", result.SingleOrDefault(x => x.Key == "key_1").Value); Assert.Equal("default_value_2", result.SingleOrDefault(x => x.Key == "key_2").Value); }