private ExpectedValuesContainer SetupVictoria(TeamMemberViewModel victoria)
        {
            var workitemsForVictoria = new WorkItemTestDataContainer(new[]
            {
                CreateBug(),
                CreateTask()
            });

            SetupGetWorkitems(victoria.Id, workitemsForVictoria.WorkItems);
            SetupClassify(workitemsForVictoria);

            var expectedValuesForVictoria = new ExpectedValuesContainer(new Dictionary <string, object>
            {
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.TotalResolved), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.CompletedWithEstimates), workitemsForVictoria.ExpectedDuration },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.CompletedWithoutEstimates), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.EstimatedToComplete), workitemsForVictoria.ExpectedEstimatedToComplete },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.OriginalEstimated), workitemsForVictoria.ExpectedOriginalEstimate },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.WithOriginalEstimate), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.WithoutETA), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.TotalResolvedBugs), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.TotalResolvedTasks), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.MemberEmail), victoria.Email },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.MemberName), victoria.DisplayName },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.Details), 0 }
            });

            return(expectedValuesForVictoria);
        }
        private ExpectedValuesContainer SetupJim(TeamMemberViewModel jim)
        {
            var workitemsForJim = new WorkItemTestDataContainer(new[]
            {
                CreateBug().WithNormalLifecycle(jim, 3).WithETA(0, 5, 0),
                CreateTask().WithNormalLifecycle(jim, 5).WithETA(0, 2, 0)
            });

            SetupGetWorkitems(jim.Id, workitemsForJim.WorkItems);
            SetupClassify(workitemsForJim);

            var expectedValuesForJim = new ExpectedValuesContainer(new Dictionary <string, object>
            {
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.TotalResolved), 2 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.CompletedWithEstimates), workitemsForJim.ExpectedDuration },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.CompletedWithoutEstimates), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.EstimatedToComplete), workitemsForJim.ExpectedEstimatedToComplete },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.OriginalEstimated), workitemsForJim.ExpectedOriginalEstimate },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.WithOriginalEstimate), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.WithoutETA), 0 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.TotalResolvedBugs), 1 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.TotalResolvedTasks), 1 },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.MemberEmail), jim.Email },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.MemberName), jim.DisplayName },
                { nameof(AggregatedWorkitemsETAReport.IndividualETAReport.Details), 2 }
            });

            return(expectedValuesForJim);
        }
        public async Task ShouldCountEstimatedTimeAndDuration()
        {
            var emmy = Builder <TeamMemberViewModel> .CreateNew()
                       .Build();

            var profile = Builder <ProfileViewModel> .CreateNew()
                          .With(p => p.Members, new[] { emmy.Id })
                          .Build();

            SetupGetProfile(profile);
            SetupGetTeamMember(new[] { emmy });
            var workitemsForEmmy = new WorkItemTestDataContainer(new[]
            {
                CreateBug().WithNormalLifecycle(emmy, 3).WithETA(2, 5, 1),
                CreateTask().WithNormalLifecycle(emmy, 1).WithETA(0, 2, 1),
                CreateBug().WithNormalLifecycle(emmy, 2).WithETA(0, 7, 0),
                CreateTask().WithNormalLifecycle(emmy, 5).WithETA(3, 0, 1),
                CreateBug().WithNormalLifecycle(emmy, 4).WithETA(6, 0, 2),
                CreateBug().WithNormalLifecycle(emmy, 1),
                CreateBug().WithNormalLifecycle(emmy, 9)
            });

            SetupGetWorkitems(emmy.Id, workitemsForEmmy.WorkItems);
            SetupClassify(workitemsForEmmy);

            await InvokeAndVerify <AggregatedWorkitemsETAReport>(Command, (report, reportId) =>
            {
                report.IndividualReports.Should().HaveCount(1);
                var individualReport = report.IndividualReports[0];
                individualReport.CompletedWithEstimates.Should().Be(15);
                individualReport.CompletedWithoutEstimates.Should().Be(10);
                individualReport.EstimatedToComplete.Should().Be(19);
                individualReport.OriginalEstimated.Should().Be(11);
            });
        }
        public async Task ShouldCountTotalResolvedBugsAndTasks()
        {
            var emmy = Builder <TeamMemberViewModel> .CreateNew()
                       .Build();

            var profile = Builder <ProfileViewModel> .CreateNew()
                          .With(p => p.Members, new[] { emmy.Id })
                          .Build();

            SetupGetProfile(profile);
            SetupGetTeamMember(new[] { emmy });
            var workitemsForEmmy = new WorkItemTestDataContainer(new[]
            {
                CreateBug().WithNormalLifecycle(emmy, 3).WithETA(0, 5, 0),
                CreateTask().WithNormalLifecycle(emmy, 1),
                CreateBug().WithNormalLifecycle(emmy, 2),
                CreateTask().WithNormalLifecycle(emmy, 5),
                CreateBug().WithNormalLifecycle(emmy, 4).WithETA(0, 7, 0)
            });

            SetupGetWorkitems(emmy.Id, workitemsForEmmy.WorkItems);
            SetupClassify(workitemsForEmmy);

            await InvokeAndVerify <AggregatedWorkitemsETAReport>(Command, (report, reportId) =>
            {
                report.IndividualReports.Should().HaveCount(1);
                var individualReport = report.IndividualReports[0];
                individualReport.TotalResolved.Should().Be(5);
                individualReport.TotalResolvedBugs.Should().Be(3);
                individualReport.TotalResolvedTasks.Should().Be(2);
            });
        }
 private void SetupClassify(WorkItemTestDataContainer dataContainer)
 {
     _classificationContextMock.Setup(c => c.Classify(It.Is <WorkItemViewModel>(w => dataContainer.WorkItems.Any(wi => wi.WorkItemId == w.WorkItemId)), It.IsAny <ClassificationScope>()))
     .Returns <WorkItemViewModel, ClassificationScope>((wi, _) => dataContainer.ResolutionsById(wi.WorkItemId));
 }