public void UsesTheMaximumTotalTrackedTimeToCalculateTheMaximumHoursPerBarAsTheNearestLargerEvenNumber()
        {
            Report.Groups.Returns(groups);

            ReportsSubject.OnNext(Report);

            TestScheduler.Start();
            maximumHoursPerBarObserver.LastEmittedValue().Should().Be(14);
        }
        public void DoesNotEmitNewValuesForWeeksOrMonthsResolution(Resolution resolution)
        {
            var legendObserver = TestScheduler.CreateObserver <IImmutableList <DateTimeOffset> >();

            ViewModel.HorizontalLegend.Subscribe(legendObserver);
            Report.Groups.Returns(new ITimeEntriesTotalsGroup[0]);
            Report.Resolution.Returns(resolution);

            ReportsSubject.OnNext(Report);

            TestScheduler.Start();
            legendObserver.SingleEmittedValue().Should().BeEmpty();
        }
        public void CalculatesThePercentagesOfDifferentGroups()
        {
            Report.Groups.Returns(groups);

            ReportsSubject.OnNext(Report);

            TestScheduler.Start();
            barsObserver.SingleEmittedValue()
            .Should().BeEquivalentTo(new[]
            {
                new BarViewModel(3.0 / 14.0, (13.0 - 3.0) / 14.0),
                new BarViewModel(4.0 / 14.0, (11.0 - 4.0) / 14.0),
                new BarViewModel(5.0 / 14.0, (10.0 - 5.0) / 14.0),
                new BarViewModel(6.0 / 14.0, (9.0 - 6.0) / 14.0),
                new BarViewModel(7.0 / 14.0, (8.0 - 7.0) / 14.0)
            });
        }
        public void EmitsASequenceOfDays(int daysCount)
        {
            var start          = new DateTimeOffset(2018, 09, 13, 14, 15, 16, TimeSpan.Zero);
            var legendObserver = TestScheduler.CreateObserver <IImmutableList <DateTimeOffset> >();

            ViewModel.HorizontalLegend.Subscribe(legendObserver);
            var groups = Enumerable.Range(0, daysCount)
                         .Select(_ => Substitute.For <ITimeEntriesTotalsGroup>())
                         .ToArray();

            Report.StartDate.Returns(start);
            Report.Groups.Returns(groups);
            Report.Resolution.Returns(Resolution.Day);

            ReportsSubject.OnNext(Report);

            TestScheduler.Start();
            legendObserver.LastEmittedValue().AssertEqual(
                Enumerable.Range(0, daysCount).Select(n => start.AddDays(n)));
        }
        public void DoesNotEmitNewValuesForMoreThanSevenDays(PositiveInt days)
        {
            if (days.Get <= 7)
            {
                return;
            }

            var legendObserver = TestScheduler.CreateObserver <IImmutableList <DateTimeOffset> >();
            var viewModel      = CreateViewModel();

            viewModel.HorizontalLegend.Subscribe(legendObserver);
            var groups = Enumerable.Range(0, days.Get)
                         .Select(_ => new TimeEntriesTotalsGroup {
                Billable = TimeSpan.Zero, Total = TimeSpan.Zero
            })
                         .ToArray <ITimeEntriesTotalsGroup>();

            Report.Groups.Returns(groups);

            ReportsSubject.OnNext(Report);

            TestScheduler.Start();
            legendObserver.SingleEmittedValue().Should().BeEmpty();
        }