public void Init() { _log = Substitute.For <ILog>(); _dateCalculator = Substitute.For <IDateCalculator>(); _powerService = Substitute.For <IPowerService>(); _positionAggregator = Substitute.For <IPositionAggregator>(); _fileNameGenerator = Substitute.For <IFileNameGenerator>(); _reportContentWriter = Substitute.For <IReportContentWriter>(); _file = Substitute.For <IFile>(); _reportGenerator = new ReportGenerator(_log, _dateCalculator, _powerService, _positionAggregator, _fileNameGenerator, _reportContentWriter, _file); _reportFolder = @"C:\Temp\"; _dates = new DateResult { ExtractDateTime = new DateTime(2015, 10, 5, 23, 34, 0), RequestDate = new DateTime(2015, 10, 6) }; _powerTradeOne = new PowerTrade(); _powerTradeTwo = new PowerTrade(); _powerTrades = new[] { _powerTradeOne, _powerTradeTwo }; _powerPosition = new PowerPosition(_dates.RequestDate); _fileName = "PowerPositions.csv"; _content = "Local time, Volume etc"; _dateCalculator.Calculate().Returns(_dates); _powerService.GetTrades(_dates.RequestDate).Returns(_powerTrades); _positionAggregator.Aggregate(_dates.RequestDate, Arg.Is <List <PowerTrade> >(x => x[0] == _powerTradeOne && x[1] == _powerTradeTwo)).Returns(_powerPosition); _fileNameGenerator.Generate(_dates.ExtractDateTime).Returns(_fileName); _reportContentWriter.Write(_powerPosition).Returns(_content); }
public void Init() { _log = Substitute.For<ILog>(); _dateCalculator = Substitute.For<IDateCalculator>(); _powerService = Substitute.For<IPowerService>(); _positionAggregator = Substitute.For<IPositionAggregator>(); _fileNameGenerator = Substitute.For<IFileNameGenerator>(); _reportContentWriter = Substitute.For<IReportContentWriter>(); _file = Substitute.For<IFile>(); _reportGenerator = new ReportGenerator(_log, _dateCalculator, _powerService, _positionAggregator, _fileNameGenerator, _reportContentWriter, _file); _reportFolder = @"C:\Temp\"; _dates = new DateResult { ExtractDateTime = new DateTime(2015, 10, 5, 23, 34, 0), RequestDate = new DateTime(2015, 10, 6) }; _powerTradeOne = new PowerTrade(); _powerTradeTwo = new PowerTrade(); _powerTrades = new[] { _powerTradeOne, _powerTradeTwo }; _powerPosition = new PowerPosition(); _fileName = "PowerPositions.csv"; _content = "Local time, Volume etc"; _dateCalculator.Calculate().Returns(_dates); _powerService.GetTrades(_dates.RequestDate).Returns(_powerTrades); _positionAggregator.Aggregate(_dates.RequestDate, Arg.Is<List<PowerTrade>>(x => x[0] == _powerTradeOne && x[1] == _powerTradeTwo)).Returns(_powerPosition); _fileNameGenerator.Generate(_dates.ExtractDateTime).Returns(_fileName); _reportContentWriter.Write(_powerPosition).Returns(_content); }
public void Generate(string reportFolder) { _log.Info("ReportGenerator started"); var dates = _dateCalculator.Calculate(); _log.InfoFormat("Report ExtractDateTime: {0}, PowerService request date: {1}", dates.ExtractDateTime, dates.RequestDate); // added a retry to the power service as this is an external call and not something we have control over // retry could be changed to catch specific exceptions var trades = new RetryBlock <IList <PowerTrade> >(() => _powerService.GetTrades(dates.RequestDate).ToList()) .WithMaxRetries(3) .WithWaitBetweenRetries(1000) .WithActionBetweenRetries(ex => _log.Warn(($"Retrying after error during GetTrades, exception: {ex}"))) .Execute(); _log.InfoFormat("{0} trade returned", trades.Count); var position = _positionAggregator.Aggregate(dates.RequestDate, trades); var fileName = _fileNameGenerator.Generate(dates.ExtractDateTime); var content = _reportContentWriter.Write(position); var fullFilePath = Path.Combine(reportFolder, fileName); _file.WriteAllText(fullFilePath, content); _log.InfoFormat("ReportGenerator complete: {0}", fullFilePath); }
public void WillWriteAStringRepresentingThePosition() { var extractTime = new DateTime(2015, 5, 12); var position = new PowerPosition(extractTime); for (int i = 0; i < position.Periods.Length; i++) { position.Periods[i].Volume = 10 * i; } var content = _writer.Write(position); Assert.AreEqual(Properties.Resources.ExpectedContent, content); }