private ImportEntryViewModel ImportBooking( CsvReader csv, string dateField, string nameField, AccountDefinitionImportMappingColumn?textField, string valueField) { // date and value are required csv.TryGetField(dateField, out DateTime date); csv.TryGetField <double>(valueField, out var value); // name and text may be empty csv.TryGetField(nameField, out string name); string text = string.Empty; if (textField != null) { csv.TryGetField(textField.Source, out text); text ??= string.Empty; if (!string.IsNullOrEmpty(textField.IgnorePattern)) { text = Regex.Replace(text, textField.IgnorePattern, string.Empty); } text = this.duplicateSpaceExpression.Replace(text, " "); } var item = new ImportEntryViewModel(this.accounts) { Date = date, Name = name, Text = text, Value = value }; var modelValue = value.ToModelValue(); var patterns = this.importMapping.Patterns ?? Enumerable.Empty <AccountDefinitionImportMappingPattern>(); var matchedPattern = patterns.FirstOrDefault(PatternPredicate); item.RemoteAccount = this.accounts.SingleOrDefault(a => a.ID == matchedPattern?.AccountID); return(item); bool PatternPredicate(AccountDefinitionImportMappingPattern pattern) { if (!pattern.Regex.IsMatch(text)) { // mapping pattern does not match return(false); } if (pattern.ValueSpecified && modelValue != pattern.Value) { // mapping value does not match return(false); } // use first match return(true); } }
public void ResetRemoteAccountCommand_RemoteAccount_CanExecute() { var sut = new ImportEntryViewModel(Enumerable.Empty <AccountDefinition>()) { RemoteAccount = new AccountDefinition() }; sut.ResetRemoteAccountCommand.CanExecute(null).Should().BeTrue(); }