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();
        }