public void ShouldAddAllDependencyRulesFromDtosToRuleSet() { //GIVEN var ruleDto1 = Any.Instance <IndependentRuleComplementDto>(); var ruleDto2 = Any.Instance <IndependentRuleComplementDto>(); var ruleDto3 = Any.Instance <IndependentRuleComplementDto>(); var dependencyAnalysis = Substitute.For <IDependencyAnalysis>(); var analysis = new AnalysisBuilder { DependencyAnalysis = dependencyAnalysis }.Build(); var ruleDtos = new [] { DependencyPathBasedRuleUnionDto.With(ruleDto1), DependencyPathBasedRuleUnionDto.With(ruleDto2), DependencyPathBasedRuleUnionDto.With(ruleDto3) }; //WHEN analysis.AddDependencyPathRules(ruleDtos); //THEN dependencyAnalysis.Received(1).Add(ruleDtos); }
public void ShouldAddAllNamespaceBasedRulesFromDtosToRuleSet() { //GIVEN var ruleDto1 = Any.Instance <NoCircularUsingsRuleComplementDto>(); var ruleDto2 = Any.Instance <NoUsingsRuleComplementDto>(); var ruleDto3 = Any.Instance <NoCircularUsingsRuleComplementDto>(); var namespacesAnalysis = Substitute.For <IProjectNamespacesAnalysis>(); var analysis = new AnalysisBuilder { NamespacesAnalysis = namespacesAnalysis, }.Build(); var ruleDtos = new[] { NamespaceBasedRuleUnionDto.With(ruleDto1), NamespaceBasedRuleUnionDto.With(ruleDto2), NamespaceBasedRuleUnionDto.With(ruleDto3) }; //WHEN analysis.AddNamespaceBasedRules(ruleDtos); //THEN namespacesAnalysis.Received(1).Add(ruleDtos); }
public void ShouldAddAllProjectScopedRulesFromDtosToRuleSet() { //GIVEN var ruleDto1 = Any.Instance <CorrectNamespacesRuleComplementDto>(); var ruleDto2 = Any.Instance <HasTargetFrameworkRuleComplementDto>(); var ruleDto3 = Any.Instance <HasAttributesOnRuleComplementDto>(); var projectAnalysis = Substitute.For <IProjectAnalysis>(); var analysis = new AnalysisBuilder { ProjectAnalysis = projectAnalysis, }.Build(); var ruleDtos = new[] { ProjectScopedRuleUnionDto.With(ruleDto1), ProjectScopedRuleUnionDto.With(ruleDto2), ProjectScopedRuleUnionDto.With(ruleDto3) }; //WHEN analysis.AddProjectScopedRules(ruleDtos); //THEN projectAnalysis.Received(1).Add(ruleDtos); }
public void ShouldRunAllKindsOfAnalysisWhenRan() { //GIVEN var analysisReport = Any.Instance <IAnalysisReportInProgress>(); var projectAnalysis = Substitute.For <IProjectAnalysis>(); var namespacesAnalysis = Substitute.For <IProjectNamespacesAnalysis>(); var dependencyAnalysis = Substitute.For <IDependencyAnalysis>(); var solutionForDependencyPathRules = Substitute.For <ISolutionForDependencyPathBasedRules>(); var solutionForProjectScopedRules = Substitute.For <ISolutionForProjectScopedRules>(); var solutionForNamespaceBasedRules = Substitute.For <ISolutionForNamespaceBasedRules>(); var analysis = new AnalysisBuilder { ReportInProgress = analysisReport, ProjectAnalysis = projectAnalysis, NamespacesAnalysis = namespacesAnalysis, DependencyAnalysis = dependencyAnalysis, SolutionForDependencyPathBasedRules = solutionForDependencyPathRules, SolutionForProjectScopedRules = solutionForProjectScopedRules, SolutionForNamespaceBasedRules = solutionForNamespaceBasedRules }.Build(); //WHEN analysis.Run(); //THEN dependencyAnalysis.Received(1).Perform(analysisReport); projectAnalysis.Received(1).Perform(analysisReport); namespacesAnalysis.Received(1).PerformOn(analysisReport); }
/// <summary> /// Wraps the <see cref="IApplicationBuilder"/> with <see cref="AnalysisBuilder"/> and directly adds /// <see cref="AnalysisMiddleware"/> to the end of the middleware pipeline. /// </summary> /// <inheritdoc /> public Action <IApplicationBuilder> Configure(Action <IApplicationBuilder> next) { return(builder => { var wrappedBuilder = new AnalysisBuilder(builder); next(wrappedBuilder); // The caller doesn't call build on our new builder, they call it on the original. Add this // default middleware to the end. Compare with AnalysisBuilder.Build(); // Add one maker at the end before the default 404 middleware (or any fancy Join middleware). builder.UseMiddleware <AnalysisMiddleware>("EndOfPipeline"); }); }
[TestCase(4, "Ok", 0)] // zero qty public void ShouldReturnNull_WhenInvalidInput(decimal price, string name, int qty) { IAnalysis result = new AnalysisBuilder() .SetClosingPrice(price) .SetName(name) .SetQtyInBuyingPacket(qty) .SetTechnicalAnalysis(new TechnicalAnalysisBuilder() .SetFastSMA(1) .SetSlowSMA(2) .Build()) .Build(); result.Should().BeNull(); }
public void ShouldReturnSuccessWhenNoViolationAreInReport(bool hasViolations, int expectedCode) { //GIVEN var reportInProgress = Substitute.For <IAnalysisReportInProgress>(); var analysis = new AnalysisBuilder { ReportInProgress = reportInProgress }.Build(); reportInProgress.IsFailure().Returns(hasViolations); //WHEN var analysisReturnCode = analysis.ReturnCode; //THEN analysisReturnCode.Should().Be(expectedCode); }
public void ShouldReturnValidObject_WhenValidInput(decimal price, string name, int qty) { ITechnicalAnalysis technicalAnalysis = new TechnicalAnalysisBuilder() .SetFastSMA(1) .SetSlowSMA(2) .Build(); IAnalysis result = new AnalysisBuilder() .SetClosingPrice(price) .SetName(name) .SetQtyInBuyingPacket(qty) .SetTechnicalAnalysis(technicalAnalysis) .Build(); result.Should().NotBeNull(); result.ClosingPrice.Should().Be(price); result.Name.Should().Be(name); result.QtyInBuyingPacket.Should().Be(qty); result.TechnicalAnalysis.Should().Be(technicalAnalysis); }
public void ShouldReturnStringGeneratedFromAnalysisInProgressReportWhenAskedForAnalysisReport() { //GIVEN var analysisInProgressReport = Substitute.For <IAnalysisReportInProgress>(); var resultBuilderFactory = Substitute.For <IResultBuilderFactory>(); var resultBuilder = Substitute.For <IResultBuilder>(); var analysis = new AnalysisBuilder { ReportInProgress = analysisInProgressReport, ResultBuilderFactory = resultBuilderFactory }.Build(); var reportStringGeneratedFromInProgressReport = Any.String(); resultBuilderFactory.NewResultBuilder().Returns(resultBuilder); resultBuilder.Text().Returns(reportStringGeneratedFromInProgressReport); //WHEN var analysisReportString = analysis.Report; //THEN analysisInProgressReport.Received(1).PutContentInto(resultBuilder); analysisReportString.Should().Be(reportStringGeneratedFromInProgressReport); }
private KeyValuePair <string, IAnalysis> GetAnalysis(IEnumerable <IMarketDataEntity> marketDataInput) { if (marketDataInput == null) { throw new ArgumentNullException(nameof(marketDataInput)); } try { var marketData = marketDataInput.ToImmutableList(); if (!marketData.Any()) { throw new ArgumentException("Market data set cannot be empty", nameof(marketDataInput)); } var isin = marketDataInput.First().Isin; if (string.IsNullOrEmpty(isin)) { throw new ServiceException("No ISIN found in market data set."); } var closingPrice = marketDataInput.FirstOrDefault().ClosingPrice; var fastSMA = marketDataInput.Take(_fastMovingAverage).Average(d => d.ClosingPrice); var slowSMA = marketDataInput.Take(_slowMovingAverage).Average(d => d.ClosingPrice); var stockBaseData = _registryRepository.GetById(isin); if (stockBaseData is null) { throw new ServiceException($"No registry entry found for {isin}"); } var financialAnalysis = new FinancialAnalysisBuilder() .SetClosingPrice(closingPrice) .SetEPS(stockBaseData.FinancialReport?.EPS) .SetMonthsInReport(stockBaseData.FinancialReport?.MonthsInReport) .Build(); var technicalAnalysis = new TechnicalAnalysisBuilder() .SetFastSMA(fastSMA) .SetSlowSMA(slowSMA) .SetTAZ(GetTAZ(closingPrice, fastSMA, slowSMA)) .SetTrend(GetTrend(fastSMA, slowSMA)) .Build(); if (technicalAnalysis is null) { throw new ServiceException($"No technical analysis can be created for {isin}"); } var analysis = new AnalysisBuilder() .SetClosingPrice(closingPrice) .SetName(stockBaseData.Name) .SetQtyInBuyingPacket((int)Math.Floor(_buyingPacketInEuro / closingPrice)) .SetFinancialAnalysis(financialAnalysis) .SetTechnicalAnalysis(technicalAnalysis) .Build(); if (analysis is null) { throw new ServiceException($"No analysis can be created for {isin}"); } return(new KeyValuePair <string, IAnalysis>(isin, analysis)); } catch (Exception ex) { throw new ServiceException($"No analysis can be created.", ex); } }