// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddTransient <IHttpContextAccessor, HttpContextAccessor>(); services.AddTransient <IStatementParser>(s => { IStatementParser parser; switch (GetCard(s)) { case Card.Barclaycard: parser = new BarclaycardParser(s.GetService <ILogger <BarclaycardParser> >()); break; case Card.Hsbc: parser = new HsbcParser(s.GetService <ILogger <HsbcParser> >()); break; default: parser = new AmazoncardParser(s.GetService <ILogger <AmazoncardParser> >()); break; } return(parser); }); services.AddTransient <IClean>(s => { switch (GetCard(s)) { case Card.Barclaycard: return(new BarclaycardCleaner()); case Card.Hsbc: return(new HsbcCleaner()); default: return(new AmazoncardCleaner()); } }); services.AddMvc(); }
public void Should_parse_barclaycard_statements() { // arrange var columns = new[] { "21 Apr 18", " Waitrose 834, Clifton8.10 POUND STERLING GREAT BRITAIN ", "Visa", "MS H LEE", "Groceries", "", "8.10" }; // act var parser = new HsbcParser(new NullLogger <HsbcParser>()); var transaction = parser.Parse(columns); // assert Assert.Equal(new DateTime(2018, 4, 21), transaction.Date); Assert.Equal("Waitrose 834, Clifton8.10 POUND STERLING GREAT BRITAIN", transaction.Description); Assert.Equal(8.10m, transaction.PaidOut); Assert.Equal(0m, transaction.PaidIn); }