private void TestMethodRoFile(ITransactionFileReader reader)
        {
            // Arrange
            const string resourceFile = "Tranzactii_pe_perioada.csv";

            // Act
            var transactions = reader.Read(GlobalSettings.GetResourceFilePath(resourceFile), new CultureInfo("ro-RO"));

            // Assert
            Assert.IsTrue(transactions.Count == 3);
            var lastTransaction = transactions[transactions.Count - 1];

            Assert.IsTrue((lastTransaction.TransactionDate == new DateTime(2016, 4, 29)) &&
                          (lastTransaction.TransactionType == TransactionType.Debit) &&
                          (lastTransaction.TransactionDetails == "Cumparare POS") && (lastTransaction.Amount == 13.9m));
            var totalDebits = transactions.Where(t => t.TransactionType == TransactionType.Debit).Sum(t => t.Amount);

            Assert.IsTrue(totalDebits == 257.57m);
        }
        private void TestMethodEnFile(ITransactionFileReader reader)
        {
            // Arrange
            const string resourceFile = "Inquiry_statements.csv";

            // Act
            var transactions = reader.Read(GlobalSettings.GetResourceFilePath(resourceFile), new CultureInfo("en-US"));

            // Assert
            var firstTransaction = transactions[0];

            Assert.IsTrue((firstTransaction.TransactionDate == new DateTime(2016, 4, 1)) &&
                          (firstTransaction.TransactionType == TransactionType.Debit) &&
                          (firstTransaction.TransactionDetails == "Foreign exchange Home'Bank") &&
                          (firstTransaction.Amount == 693.17M));
            var lastTransaction = transactions[transactions.Count - 1];

            Assert.IsTrue((lastTransaction.TransactionDate == new DateTime(2016, 2, 4)) &&
                          (lastTransaction.TransactionType == TransactionType.Credit) &&
                          (lastTransaction.TransactionDetails == "Incoming funds") && (lastTransaction.Amount == 2500m));
        }
        public ActionResponse Insert(DataSource dataSource, string transactionReportFile, Period period)
        {
            var ret            = new ParametrizedActionResponse <int>();
            var repoDataSource = GetDataSource(dataSource);

            if (repoDataSource != null)
            {
                var culture = new CultureInfo(repoDataSource.Culture);
                var transactionsFromFile = period == GlobalConstants.MaxPeriod
                    ? _fileReader.Read(transactionReportFile, culture)
                    : _fileReader.Read(transactionReportFile, period, culture);

                //removing any duplicates
                var transactionHash = new HashSet <Transaction>();
                foreach (var transaction in transactionsFromFile)
                {
                    while (transactionHash.Contains(transaction))
                    {
                        transaction.TransactionDate = transaction.TransactionDate.AddSeconds(1);
                    }
                    transactionHash.Add(transaction);
                }


                if (transactionsFromFile.Count > 0)
                {
                    var selectedPeriod = new Period(transactionsFromFile[0].TransactionDate,
                                                    transactionsFromFile[transactionsFromFile.Count - 1].TransactionDate);
                    IList <Transaction> dbTransactions = _unitOfWork.TransactionRepository.Set.
                                                         Where(
                        t =>
                        (t.DataSourceId == dataSource.Id) && (period.StartDate <= t.TransactionDate) &&
                        (t.TransactionDate <= period.EndDate)).ToList();
                    foreach (var dbTransaction in dbTransactions)
                    {
                        if (transactionHash.Contains(dbTransaction))
                        {
                            transactionHash.Remove(dbTransaction);
                        }
                    }
                    foreach (
                        var transaction in
                        transactionsFromFile.Where(transaction => transactionHash.Contains(transaction)))
                    {
                        transaction.DataSourceId = repoDataSource.Id;
                        _unitOfWork.TransactionRepository.Insert(transaction);
                    }
                    _unitOfWork.Save();
                    ret.Result = transactionHash.Count;
                    ret.Status = ActionResponseCode.Success;
                }
                else
                {
                    ret.Status = ActionResponseCode.NoActionPerformed;
                    ret.ActionResponseMessage = Resources.ZeroTransactionsInFile;
                }
            }
            else
            {
                ret.Result = -1;
                ret.Status = ActionResponseCode.NotFound;
            }
            return(ret);
        }