public void LongUncommonOutcomeParseTest()
        {
            //given
            string input     = @"-----------------------------------------------------
120
2018-08-21
2018-08-19
Płatność kartą
-179,91
PLN
209,38
Lokalizacja:
Kraj: WIELKA BRYTANIA
Miasto: CDK2156
Adres: CDKEYS.COM
Data wykonania: 2018-08-19 00:00:00
Numer referencyjny: 11111218231005349661663
Oryginalna kwota operacji: 35.99 GBP
Data przetworzenia: 2018-08-20
Numer karty: * *111 
Data waluty: 2018-08-19
-----------------------------------------------------
-----------------------------------------------------";
            var    userStock = new Stock {
                Name = "Intelligo bank"
            };
            var externalStock = new Stock {
                Name = "Default"
            };
            var creationDate = new DateTime(2018, 8, 19);
            var outcomeType  = new TransactionType {
                Outcome = true, Name = "Buy"
            };
            decimal balance  = 209.38m;
            string  title    = @"120 Płatność kartą";
            var     expected = new Transaction(outcomeType, creationDate, title,
                                               $"120 - Lokalizacja: Kraj: WIELKA BRYTANIA Miasto: CDK2156 Adres: CDKEYS.COM Data wykonania: 2018-08-19 00:00:00 Numer referencyjny: 11111218231005349661663 Oryginalna kwota operacji: 35.99 GBP Data przetworzenia: 2018-08-20 Numer karty: * *111 Data waluty: 2018-08-19 Płatność kartą saldo: {balance.ToString(Strings.ValueFormat)} (PLN)",
                                               new[]
            {
                new Position
                {
                    Title = title,
                    Value = new PaymentValue {
                        GrossValue = 179.91m
                    }
                }
            }, userStock, externalStock);
            var parser = new IntelligoBankParser();

            //when
            var results = parser.Parse(input, userStock, externalStock, outcomeType, null);

            //then
            foreach (var result in results)
            {
                ValidateTransaction(result, expected);
            }
            Assert.Equal(balance, parser.Balances.First().Value.OrderByDescending(x => x.Key).First().Value);
        }
        public void SimpleIncomeParseTest()
        {
            //given
            string input     = @"
spam trash 123

201     2018-12-06  2018-12-06  Przelew na rachunek     +1 000,05   PLN     10 876,65   Nr rach. przeciwst.:
00 1111 2222 3333 4444 5555 6666
Dane adr. rach. przeciwst.:
SUPER FIRMA
SP. Z O.O.
UL. imię nazwisko 321
44-100 GLIWICE
Tytuł: Wyplata: ETAT/2018/11/abc
Data waluty: 2018-12-06 

temp trash
11";
            var    userStock = new Stock {
                Name = "Intelligo bank"
            };
            var externalStock = new Stock {
                Name = "Default"
            };
            var creationDate = new DateTime(2018, 12, 6);
            var incomeType   = new TransactionType {
                Income = true, Name = "Work"
            };
            string  title    = @"Wyplata: ETAT/2018/11/abc";
            decimal balance  = 10876.65m;
            var     expected = new Transaction(incomeType, creationDate, title,
                                               $"201 - Nr rach. przeciwst.: 00 1111 2222 3333 4444 5555 6666 Dane adr. rach. przeciwst.: SUPER FIRMA SP. Z O.O. UL. imię nazwisko 321 44-100 GLIWICE Tytuł: Wyplata: ETAT/2018/11/abc Data waluty: 2018-12-06 Przelew na rachunek saldo: {balance.ToString(Strings.ValueFormat)} (PLN)",
                                               new[]
            {
                new Position
                {
                    Title = title,
                    Value = new PaymentValue {
                        GrossValue = 1000.05m
                    }
                }
            }, userStock, externalStock);
            var parser = new IntelligoBankParser();

            //when
            var result = parser.Parse(input, userStock, externalStock, null, incomeType).FirstOrDefault();

            //then
            ValidateTransaction(result, expected);
            Assert.Equal(balance, parser.Balances.First().Value.OrderByDescending(x => x.Key).First().Value);
        }
        public void ShortUncommonOutcomeParseTest()
        {
            //given
            string input     = @"-----------------------------------------------------
93
2018-07-07
2018-07-07
Opłata
-5,00
PLN
271,87
Opłata za Powiadomienia SMS 
Data waluty: 2018-07-07
-----------------------------------------------------";
            var    userStock = new Stock {
                Name = "Intelligo bank"
            };
            var externalStock = new Stock {
                Name = "Default"
            };
            var creationDate = new DateTime(2018, 7, 7);
            var outcomeType  = new TransactionType {
                Outcome = true, Name = "Buy"
            };
            decimal balance  = 271.87m;
            string  title    = @"93 Opłata";
            var     expected = new Transaction(outcomeType, creationDate, title,
                                               $"93 - Opłata za Powiadomienia SMS Data waluty: 2018-07-07 Opłata saldo: {balance.ToString(Strings.ValueFormat)} (PLN)",
                                               new[]
            {
                new Position
                {
                    Title = title,
                    Value = new PaymentValue {
                        GrossValue = 5m
                    }
                }
            }, userStock, externalStock);
            var parser = new IntelligoBankParser();

            //when
            var results = parser.Parse(input, userStock, externalStock, outcomeType, null);

            //then
            foreach (var result in results)
            {
                ValidateTransaction(result, expected);
            }
            Assert.Equal(balance, parser.Balances.First().Value.OrderByDescending(x => x.Key).First().Value);
        }
        public void SimpleOutcome1ParseTest()
        {
            //given
            string input     = @"
trash

200     2018-12-04  2018-12-02  Płatność kartą  -12,34  PLN     9 876,60    Lokalizacja:
Kraj: POLSKA
Miasto: GLIWICE
Adres: ADRES
Data wykonania: 2018-12-02 00:00:00
Numer referencyjny: 12312312312312312313123
Oryginalna kwota operacji: 12.34 PLN
Numer karty: * *123
Data waluty: 2018-12-02 
trash";
            var    userStock = new Stock {
                Name = "Intelligo bank"
            };
            var externalStock = new Stock {
                Name = "Default"
            };
            var creationDate = new DateTime(2018, 12, 2);
            var outcomeType  = new TransactionType {
                Outcome = true, Name = "Buy"
            };
            string title    = @"200 Płatność kartą";
            var    expected = new Transaction(outcomeType, creationDate, title,
                                              $"200 - Lokalizacja: Kraj: POLSKA Miasto: GLIWICE Adres: ADRES Data wykonania: 2018-12-02 00:00:00 Numer referencyjny: 12312312312312312313123 Oryginalna kwota operacji: 12.34 PLN Numer karty: * *123 Data waluty: 2018-12-02 Płatność kartą saldo: {9876.6.ToString(Strings.ValueFormat)} (PLN)",
                                              new[]
            {
                new Position
                {
                    Title = title,
                    Value = new PaymentValue {
                        GrossValue = 12.34m
                    }
                }
            }, userStock, externalStock);
            var parser = new IntelligoBankParser();

            //when
            var result = parser.Parse(input, userStock, externalStock, outcomeType, null).FirstOrDefault();

            //then
            ValidateTransaction(result, expected);
        }
        public void MultipleTransactionsWithDifferentLenghtParseTest()
        {
            //given
            string input     = @"133
2018-09-07
2018-09-07
Przelew z rachunku
-50,00
PLN
4 521,61
Dane adr. rach. przeciwst.:
PKO BP FINAT SP. Z O.O.
Tytuł: DOŁADOWANIE TELEFONU +48 111168049 T-MOBILE IDENTYFIKATOR OPERACJI: 53642285 
Data waluty: 2018-09-07 
134
2018-09-07
2018-09-07
Opłata
-5,00
PLN
4 516,61
Opłata za Powiadomienia SMS 
Data waluty: 2018-09-07
135
2018-09-07
2018-09-07
Opłata
-5,00
PLN
4 516,61
Opłata za Powiadomienia SMS 
Data waluty: 2018-09-07";
            var    userStock = new Stock {
                Name = "Intelligo bank"
            };
            var parser = new IntelligoBankParser();

            //when
            var results = parser.Parse(input, userStock, null, new TransactionType(), null);

            //then
            Assert.Equal(3, results.Length);
        }