public string CreateReport(FileReportModel model)
        {
            var report = new StringBuilder();

            foreach (var story in model.Stories)
            {
                if (story.Metadata != null)
                {
                    report.AppendLine(string.Format("## {0}{1}", story.Metadata.TitlePrefix, story.Metadata.Title));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative1))
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative1));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative2))
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative2));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative3))
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative3));
                }

                report.AppendLine(); // separator
            
                foreach (var scenario in story.Scenarios)
                {
                    report.AppendLine(string.Format("### {0}", scenario.Title));

                    foreach (var step in scenario.Steps)
                        report.AppendLine("  " + step.Title + "  ");

                    report.AppendLine(); // separator
                }
            }

            return report.ToString();
        }
        public string CreateReport(FileReportModel model)
        {
            var report = new StringBuilder();

            foreach (var story in model.Stories)
            {
                report.AppendLine(string.Format("## Story: {0}", story.MetaData.Title));
                report.AppendLine(string.Format(" **{0}**  ", story.MetaData.AsA));
                report.AppendLine(string.Format(" **{0}**  ", story.MetaData.IWant));
                report.AppendLine(string.Format(" **{0}**  ", story.MetaData.SoThat));
                report.AppendLine(); // separator

                foreach (var scenario in story.Scenarios)
                {
                    report.AppendLine(string.Format("### {0}", scenario.Title));

                    foreach (var step in scenario.Steps)
                        report.AppendLine("  " + step.StepTitle + "  ");

                    report.AppendLine(); // separator
                }
            }

            return report.ToString();
        }
예제 #3
0
        public IList <StoryDiagnostic> GetDiagnosticData(FileReportModel viewModel)
        {
            var graph = new List <StoryDiagnostic>();

            foreach (var story in viewModel.Stories)
            {
                var name = story.Namespace;
                if (story.Metadata != null)
                {
                    name = story.Metadata.Title;
                }

                graph.Add(new StoryDiagnostic
                {
                    Name      = name,
                    Duration  = story.Scenarios.Sum(x => x.Duration.Milliseconds),
                    Scenarios = story.Scenarios.Select(scenario => new StoryDiagnostic.Scenario()
                    {
                        Name     = scenario.Title,
                        Duration = scenario.Duration.Milliseconds,
                        Steps    = scenario.Steps.Select(step => new StoryDiagnostic.Step()
                        {
                            Name     = step.Title,
                            Duration = step.Duration.Milliseconds
                        }).ToList()
                    }).ToList()
                });
            }

            return(graph);
        }
예제 #4
0
        public string CreateReport(FileReportModel model)
        {
            var graph      = GetDiagnosticData(model);
            var rootObject = new { Stories = graph };

            return(_serializer.Serialize(rootObject));
        }
        public IList<StoryDiagnostic> GetDiagnosticData(FileReportModel viewModel)
        {
            var graph = new List<StoryDiagnostic>();
            foreach (var story in viewModel.Stories)
            {
                var name = story.Namespace;
                if (story.Metadata != null)
                    name = story.Metadata.Title;

                graph.Add(new StoryDiagnostic
                {
                    Name = name,
                    Duration = story.Scenarios.Sum(x => x.Duration.Milliseconds),
                    Scenarios = story.Scenarios.Select(scenario => new StoryDiagnostic.Scenario()
                    {
                        Name = scenario.Title,
                        Duration = scenario.Duration.Milliseconds,
                        Steps = scenario.Steps.Select(step => new StoryDiagnostic.Step()
                        {
                            Name = step.Title,
                            Duration = step.Duration.Milliseconds
                        }).ToList()
                    }).ToList()
                });
            }

            return graph;
        }
        public void ShouldProduceExpectedMarkdown()
        {
            var model = new FileReportModel(new ReportTestData().CreateMixContainingEachTypeOfOutcome().ToReportModel());
            var sut   = new MarkDownReportBuilder();

            ReportApprover.Approve(model, sut);
        }
예제 #7
0
        public void TagsAreReportedInMarkdownReport()
        {
            var reportModel = this.CreateReportModel();
            var model       = new FileReportModel(reportModel);
            var sut         = new MarkDownReportBuilder();

            ReportApprover.Approve(model, sut);
        }
예제 #8
0
 public static void Approve(FileReportModel model, IReportBuilder reportBuilder)
 {
     // setting the culture to make sure the date is formatted the same on all machines
     using (new TemporaryCulture("en-GB"))
     {
         var result = reportBuilder.CreateReport(model);
         Approvals.Verify(result, s => Scrub(StackTraceScrubber.ScrubLineNumbers(StackTraceScrubber.ScrubPaths(s))));
     }
 }
예제 #9
0
 public static void Approve(FileReportModel model, IReportBuilder reportBuilder)
 {
     // setting the culture to make sure the date is formatted the same on all machines
     using (new TemporaryCulture("en-GB"))
     {
         var result = reportBuilder.CreateReport(model);
         result.ShouldMatchApproved(c => c
                                    .WithScrubber(Scrub)
                                    .UseCallerLocation());
     }
 }
예제 #10
0
        public void ShouldSerializeDiagnosticDataToSpecifiedFormat()
        {
            var serializer = Substitute.For <ISerializer>();
            var testData   = new ReportTestData().CreateTwoStoriesEachWithTwoScenariosWithThreeStepsOfFiveMilliseconds();
            var model      = new FileReportModel(testData);
            var sut        = new DiagnosticsReportBuilder(serializer);

            sut.CreateReport(model);

            serializer.Received().Serialize(Arg.Any <object>());
        }
        public void ShouldProduceExpectedMarkdownWithExamples()
        {
            var model =
                new FileReportModel(new ReportTestData().CreateTwoStoriesEachWithOneFailingScenarioAndOnePassingScenarioWithThreeStepsOfFiveMillisecondsAndEachHasTwoExamples()
                                    .ToReportModel())
            {
                RunDate = new DateTime(2014, 3, 25, 11, 30, 5)
            };

            var sut = new MarkDownReportBuilder();

            ReportApprover.Approve(model, sut);
        }
예제 #12
0
        public async Task <IActionResult> FileReport(string id)
        {
            if (this.userManager.FindByIdAsync(id).Result == null)
            {
                this.TempData.AddErrorMessage("No such user exists.");
                return(RedirectToAction("Index", "Home", new { area = "" }));
            }

            FileReportModel model = new FileReportModel()
            {
                ReportedUserId = id
            };

            return(View(model));
        }
예제 #13
0
        public void Process(IEnumerable <Story> stories)
        {
            var    viewModel = new FileReportModel(stories.ToReportModel());
            string report;

            try
            {
                report = _builder.CreateReport(viewModel);
            }
            catch (Exception ex)
            {
                report = ex.Message + ex.StackTrace;
            }

            _writer.OutputReport(report, "BDDfy.md");
        }
예제 #14
0
        public async Task <IActionResult> FileReport(FileReportModel model)
        {
            if (this.userManager.FindByIdAsync(model.ReportedUserId).Result == null)
            {
                this.TempData.AddErrorMessage("No such user exists.");
                return(RedirectToAction("Index", "Home", new { area = "" }));
            }

            User currentUser = await this.userManager.FindByEmailAsync(this.User.Identity.Name);

            await this.reportService.CreateReport(currentUser.Id, model.ReportedUserId, model.Content);

            this.TempData.AddSuccessMessage("Report successfully filed. It will be reviewed by an admin soon.");

            return(RedirectToAction("Index", "Home", new { area = "" }));
        }
        public void Process(IEnumerable<Story> stories)
        {
            var viewModel = new FileReportModel(stories);
            string report;

            try
            {
                report = _builder.CreateReport(viewModel);
            }
            catch (Exception ex)
            {
                report = ex.Message + ex.StackTrace;
            }

            _writer.OutputReport(report, "Diagnostics.json");
        }
        public void Process(IEnumerable<Core.Story> stories)
        {
            const string error = "There was an error compiling the json report: ";
            var viewModel = new FileReportModel(stories);
            string report;

            try
            {
                report = _builder.CreateReport(viewModel);
            }
            catch (Exception ex)
            {
                report = error + ex.Message;
            }

            _writer.OutputReport(report, "Diagnostics.json");
        }
        public string CreateReport(FileReportModel model)
        {
            var report = new StringBuilder();

            foreach (var story in model.Stories)
            {
                if (story.Metadata != null)
                {
                    report.AppendLine(string.Format("## Story: {0}", story.Metadata.Title));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative1))
                    {
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative1));
                    }
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative2))
                    {
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative2));
                    }
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative3))
                    {
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative3));
                    }
                }

                report.AppendLine(); // separator

                foreach (var scenario in story.Scenarios)
                {
                    report.AppendLine(string.Format("### {0}", scenario.Title));

                    foreach (var step in scenario.Steps)
                    {
                        report.AppendLine("  " + step.Title + "  ");
                    }

                    report.AppendLine(); // separator
                }
            }

            return(report.ToString());
        }
        public string CreateReport(FileReportModel model)
        {
            var report = new StringBuilder();

            foreach (var story in model.Stories)
            {
                _exceptions.Clear();
                if (story.Metadata != null)
                {
                    report.AppendLine(string.Format("## {0}{1}", story.Metadata.TitlePrefix, story.Metadata.Title));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative1))
                    {
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative1));
                    }
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative2))
                    {
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative2));
                    }
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative3))
                    {
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative3));
                    }
                }

                report.AppendLine(); // separator

                foreach (var scenarioGroup in story.Scenarios.GroupBy(s => s.Id))
                {
                    if (scenarioGroup.Count() > 1)
                    {
                        // all scenarios in an example based scenario share the same header and narrative
                        var exampleScenario = story.Scenarios.First();
                        report.AppendLine(string.Format("### {0}", exampleScenario.Title));

                        if (exampleScenario.Steps.Any())
                        {
                            foreach (var step in exampleScenario.Steps.Where(s => s.ShouldReport))
                            {
                                report.AppendLine("  " + HttpUtility.HtmlEncode(step.Title) + "  ");
                            }
                        }

                        report.AppendLine(); // separator
                        WriteExamples(report, exampleScenario, scenarioGroup);
                        ReportTags(report, exampleScenario.Tags);
                    }
                    else
                    {
                        foreach (var scenario in scenarioGroup)
                        {
                            report.AppendLine(string.Format("### {0}", scenario.Title));

                            foreach (var step in scenario.Steps.Where(s => s.ShouldReport))
                            {
                                report.AppendLine("  " + HttpUtility.HtmlEncode(step.Title) + "  ");
                            }

                            report.AppendLine(); // separator
                        }

                        var exampleScenario = story.Scenarios.First();
                        ReportTags(report, exampleScenario.Tags);
                    }
                }

                ReportExceptions(report);
            }
            _exceptions.Clear();

            return(report.ToString());
        }
 string IReportBuilder.CreateReport(FileReportModel model)
 {
     return CreateReport(model as HtmlReportViewModel);
 }
예제 #20
0
 string IReportBuilder.CreateReport(FileReportModel model)
 {
     return(CreateReport(model as HtmlReportModel));
 }
 public string CreateReport(FileReportModel model)
 {
     var graph = GetDiagnosticData(model);
     var rootObject = new { Stories = graph };
     return _serializer.Serialize(rootObject);
 }
        public string CreateReport(FileReportModel model)
        {
            var report = new StringBuilder();

            foreach (var story in model.Stories)
            {
                _exceptions.Clear();
                if (story.Metadata != null)
                {
                    report.AppendLine(string.Format("## {0}{1}", story.Metadata.TitlePrefix, story.Metadata.Title));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative1))
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative1));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative2))
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative2));
                    if (!string.IsNullOrEmpty(story.Metadata.Narrative3))
                        report.AppendLine(string.Format(" **{0}**  ", story.Metadata.Narrative3));
                }

                report.AppendLine(); // separator

                foreach (var scenarioGroup in story.Scenarios.GroupBy(s => s.Id))
                {
                    if (scenarioGroup.Count() > 1)
                    {
                        // all scenarios in an example based scenario share the same header and narrative
                        var exampleScenario = story.Scenarios.First();
                        report.AppendLine(string.Format("### {0}", exampleScenario.Title));

                        if (exampleScenario.Steps.Any())
                        {
                            foreach (var step in exampleScenario.Steps.Where(s => s.ShouldReport))
                                report.AppendLine("  " + HttpUtility.HtmlEncode(step.Title) + "  ");
                        }

                        report.AppendLine(); // separator
                        WriteExamples(report, exampleScenario, scenarioGroup);
                        ReportTags(report, exampleScenario.Tags);
                    }
                    else
                    {
                        foreach (var scenario in scenarioGroup)
                        {
                            report.AppendLine(string.Format("### {0}", scenario.Title));

                            foreach (var step in scenario.Steps.Where(s => s.ShouldReport))
                                report.AppendLine("  " + HttpUtility.HtmlEncode(step.Title) + "  ");

                            report.AppendLine(); // separator
                        }

                        var exampleScenario = story.Scenarios.First();
                        ReportTags(report, exampleScenario.Tags);
                    }
                }

                ReportExceptions(report);
            }
            _exceptions.Clear();

            return report.ToString();
        }