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);
        }
Esempio n. 5
0
    /// <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);
        }
Esempio n. 10
0
        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);
            }
        }