public PerLabelMonthReportSet(IRepositoryFactory repositoryFactory, DateTime firstDayOfMonth)
        {
            if (firstDayOfMonth.Day != 1)
            {
                throw new ArgumentException("First day of month should be 1", nameof(firstDayOfMonth));
            }

            var nrOfDaysInMonth = DateTime.DaysInMonth(firstDayOfMonth.Year, firstDayOfMonth.Month);

            _labelPerActivityReportBuilder = new ActivityReportBuilder(repositoryFactory.Create($"label_activity_month_report_{firstDayOfMonth:yyyyMMdd}.csv", firstDayOfMonth, nrOfDaysInMonth), firstDayOfMonth, nrOfDaysInMonth);
        }
Exemplo n.º 2
0
        public PerLabelWeekReportSet(IRepositoryFactory repositoryFactory, DateTime firstDayOfWeek)
        {
            if (firstDayOfWeek.DayOfWeek != DayOfWeek.Monday)
            {
                throw new ArgumentException("First day of week should be a monday", nameof(firstDayOfWeek));
            }

            var nrOfDaysInWeek = 7;

            _labelPerActivityReportBuilder = new ActivityReportBuilder(repositoryFactory.Create($"label_activity_week_report_{firstDayOfWeek:yyyyMMdd}.csv", firstDayOfWeek, nrOfDaysInWeek), firstDayOfWeek, nrOfDaysInWeek);
        }
        public void given_an_activity_report_builder_and_some_logged_activities_with_different_scenarios_when_creating_the_report_then_the_expected_report_entries_are_added()
        {
            var repository = Substitute.For <IRepository>();
            var firstDateOfReportPeriod = new DateTime(2020, 2, 14);
            var periodNrOfDays          = 6;
            var accountFilter           = "nwb";

            var builder = new ActivityReportBuilder(repository, firstDateOfReportPeriod, periodNrOfDays);

            var firstDate  = new DateTime(2020, 2, 15);
            var secondDate = new DateTime(2020, 2, 17);
            var thirdDate  = new DateTime(2020, 2, 19);

            var firstActivity  = "activity1";
            var secondActivity = "activity2";
            var thirdActivity  = "activity3";

            var logEntries = new List <LogEntry>
            {
                new LogEntry(12345, 1f, "description", "label", firstActivity, "nwb", firstDate),
                new LogEntry(12345, 2f, "description", "label", firstActivity, "nwb", secondDate),
                new LogEntry(12345, 3.25f, "description", "label", secondActivity, "nwb", secondDate),
                new LogEntry(12345, 4f, "description", "label", firstActivity, "nwb", thirdDate),
                new LogEntry(12345, 5.25f, "description", "label", thirdActivity, "nwb", thirdDate),
                new LogEntry(12345, 6f, "description", "label", thirdActivity, "nwb", thirdDate),
            };
            var timeForActivity1PerDay = new Dictionary <DateTime, float>
            {
                { firstDate, 1f },
                { secondDate, 2f },
                { thirdDate, 4f },
            };
            var timeForActivity2PerDay = new Dictionary <DateTime, float>
            {
                { secondDate, 3.25f },
            };
            var timeForActivity3PerDay = new Dictionary <DateTime, float>
            {
                { thirdDate, 11.25f },
            };

            var engineerName = "TestEngineer";

            builder.Build(engineerName, logEntries.GroupBy(x => x.CreateDate));

            repository.Received(1).SaveReportEntry(new ReportEntry(engineerName, firstActivity, firstDateOfReportPeriod, periodNrOfDays, timeForActivity1PerDay));
            repository.Received(1).SaveReportEntry(new ReportEntry(engineerName, secondActivity, firstDateOfReportPeriod, periodNrOfDays, timeForActivity2PerDay));
            repository.Received(1).SaveReportEntry(new ReportEntry(engineerName, thirdActivity, firstDateOfReportPeriod, periodNrOfDays, timeForActivity3PerDay));
        }