public IList <TemporaryExposureKey> FilterAndSaveKeys(IList <TemporaryExposureKeyGatewayDto> keys) { StringBuilder logErrorPerBatchSB = new StringBuilder(); IList <TemporaryExposureKey> mappedKeys; IList <string> validationErrors = new List <string>(); try { mappedKeys = _keyFilter.MapKeys(keys); } catch (Exception e) { _logger.LogError("|SmitteStop| StoreService: unable to parse and map response" + e); throw; } _logger.LogInformation($"Mapped {mappedKeys?.Count} keys from {keys?.Count}"); IList <TemporaryExposureKey> acceptedKeys = null; int acceptedKeysCount = 0; if (mappedKeys.Any()) { foreach (var key in mappedKeys) { CalulateDaysAndRisk(key); } _logger.LogInformation("Starting key validation."); acceptedKeys = _keyFilter.ValidateKeys(mappedKeys, out validationErrors); _logger.LogInformation($"Keys validated with {validationErrors?.Count} error."); if (validationErrors?.Count > 0) { InformationLogValidationErrors(validationErrors); } _logger.LogInformation("Saving..."); acceptedKeys = _addTemporaryExposureKeyService.FilterDuplicateKeysAsync(acceptedKeys).Result; _tempKeyRepository.AddTemporaryExposureKeysAsync(acceptedKeys).Wait(); _logger.LogInformation($"{acceptedKeys?.Count} keys saved."); acceptedKeysCount = acceptedKeys.Count; } _logger.LogInformation($"Received {keys.Count} keys. Accepted and saved { acceptedKeysCount } of them."); foreach (string error in validationErrors) { logErrorPerBatchSB.Append(error + Environment.NewLine); } var errors = logErrorPerBatchSB.ToString(); if (!string.IsNullOrEmpty(errors)) { _logger.LogWarning($"Received {keys.Count} keys. Accepted and saved { acceptedKeysCount } of them. Validation Errors:{Environment.NewLine}{ errors }"); } return(acceptedKeys ?? new List <TemporaryExposureKey>()); }
public void KeysAreValidatedProperly() { IList <string> errorMessageList = new List <string>(); var keyList = _exposureKeyMock.MockListOfTemporaryExposureKeys(); var numberOfInvalidKeys = 4; for (int i = 0; i < numberOfInvalidKeys; i++) { keyList.Add(_exposureKeyMock.MockInvalidKey()); } var filteredList = _keyFilter.ValidateKeys(keyList, out errorMessageList); Assert.That(filteredList.Count == keyList.Count - numberOfInvalidKeys); }