public void RequestWithMoreThan10KHourlyObservationIsCorrectlySaved()
        {
            // Arrange
            var resolution = Resolution.Hour;
            var startDate  = new DateTime(year: 2014, month: 01, day: 01);
            var endDate    = startDate.AddYears(value: 3);

            // Act
            _downloader.Run(_eurusd, resolution, startDate, endDate);
            // Assert
            var outputFile        = Path.Combine(_dataDirectory, "forex/fxcm/hour/eurusd_volume.zip");
            var observationsCount = FxcmVolumeAuxiliaryMethods.ReadZipFileData(outputFile).Count;

            // 3 years x 52 weeks x 5 days x 24 hours = 18720 hours at least.
            Assert.True(observationsCount >= 18720, $"Actual observations: {observationsCount}");
        }
        public void ParsedDataIsCorrectlySaved(string ticker, Resolution resolution, string startDate, int requestLength)
        {
            // Arrange
            var symbol   = Symbol.Create(ticker, SecurityType.Base, Market.FXCM);
            var startUtc = Parse.DateTimeExact(startDate, "yyyy-MM-dd");
            var endUtc   = startUtc.AddDays(requestLength);
            var data     = _downloader.Get(symbol, resolution, startUtc, endUtc);
            // Act
            var writer = new FxcmVolumeWriter(resolution, symbol, _dataDirectory);

            writer.Write(data);
            // Assert
            var expectedData   = data.Cast <FxcmVolume>().ToArray();
            var expectedFolder = Path.Combine(_dataDirectory, $"forex/fxcm/{resolution.ToLower()}");

            if (resolution == Resolution.Minute)
            {
                expectedFolder = Path.Combine(expectedFolder, symbol.Value.ToLowerInvariant());
            }
            Assert.True(Directory.Exists(expectedFolder));

            if (resolution == Resolution.Minute)
            {
                var zipFiles = Directory.GetFiles(expectedFolder, "*_volume.zip").Length;
                // Minus one because the Downloader starts one day earlier.
                Assert.AreEqual(requestLength + 1, zipFiles);
            }
            else
            {
                var expectedFilename = $"{symbol.Value.ToLowerInvariant()}_volume.zip";
                Assert.True(File.Exists(Path.Combine(expectedFolder, expectedFilename)));
            }

            var actualdata = FxcmVolumeAuxiliaryMethods.ReadZipFolderData(expectedFolder);

            Assert.AreEqual(expectedData.Length, actualdata.Count);

            var lines = actualdata.Count;

            for (var i = 0; i < lines - 1; i++)
            {
                Assert.AreEqual(expectedData[i].Value, Parse.Long(actualdata[i][1]));
                Assert.AreEqual(expectedData[i].Transactions, Parse.Int(actualdata[i][2]));
            }
        }