private bool IsValidLogicalConsistency(IEnumerable <string> lines) { var firstLine = new LineConversionRequest(lines.First()); var secondLine = new LineExchangeRateCount(lines.Skip(1).First()); var otherLines = lines.Skip(2).Select(l => new LineExchangeRate(l)); var inputFile = new InputFile(firstLine, secondLine, otherLines); /* Check if declared count of 'exchange rate' lines * match real count of theses lines */ var declaredCountMatchRealCount = inputFile.ExchangeRateCount.Count == inputFile.ExchangeRates.Count(); /* Check if any exchange rate doesn't contain * the same value for source and target currency */ var noEchangeRateContainingSameCurrency = !inputFile.ExchangeRates.Any(er => er.SourceCurrency == er.TargetCurrency); /* check that the 'source currency' of the 'conversion request' * exists at least once in the exchanges rates */ var existAtLeastOneSourceCurrencyIntoExchangeRates = inputFile.ExchangeRates.Any(er => er.SourceCurrency == inputFile.ConversionRequest.SourceCurrency) || inputFile.ExchangeRates.Any(er => er.TargetCurrency == inputFile.ConversionRequest.SourceCurrency); /* check that the 'target currency' of the 'conversion request' * exists at least once in the exchanges rates */ var existAtLeastOneTargetCurrencyIntoExchangeRates = inputFile.ExchangeRates.Any(er => er.SourceCurrency == inputFile.ConversionRequest.TargetCurrency) || inputFile.ExchangeRates.Any(er => er.TargetCurrency == inputFile.ConversionRequest.TargetCurrency); return(declaredCountMatchRealCount && noEchangeRateContainingSameCurrency && existAtLeastOneSourceCurrencyIntoExchangeRates && existAtLeastOneTargetCurrencyIntoExchangeRates); }
private ConversionRequest ToConversionRequest(IEnumerable <string> lines) { var crl = new LineConversionRequest(lines.First()); return(new ConversionRequest(crl.SourceCurrency, crl.TargetCurrency, crl.Amount)); }