public void one_month_biweekly_generates_success(AccrualFrequency frequency, Ending ending, int expectedRows, int?dayOfPayA, int?dayOfPayB)
        {
            // arrange
            var dnp = new Mock <IDotNetProvider>();

            dnp.Setup(_ => _.DateTimeNow).Returns(new DateTime(2018, 10, 11));

            var config = CreateAccrualInstance(frequency, ending, dayOfPayA, dayOfPayB);

            // act
            var service = new AccrualService(dnp.Object);
            var rows    = service.Calculate(config);

            // assert
            Assert.IsNotNull(rows);
            Assert.AreEqual(expectedRows, rows.Count);
            Console.WriteLine(JsonConvert.SerializeObject(rows, Formatting.Indented));
        }
        public AccrualGraphType(
            IUserRepository userRepository,
            AccrualService accrualService)
        {
            _userRepository = userRepository;
            _accrualService = accrualService;

            Field(x => x.AccrualId, type: typeof(IdGraphType)).Description("");
            Field(x => x.Name).Description("The name of the accrual chart.");
            Field(x => x.StartingHours).Description("Amount of hours to begin the accrual.");
            Field(x => x.AccrualRate).Description("Amount of hours earned per accrual period.");
            Field(x => x.StartingDate, type: typeof(DateGraphType)).Description("");
            Field(x => x.AccrualFrequency, type: typeof(AccrualFrequencyEnum)).Description("");
            Field(x => x.Ending, type: typeof(EndingEnum)).Description("");
            Field(x => x.LastModified, type: typeof(DateTimeGraphType)).Description("Timestamp for when last modified.");
            Field(x => x.IsHeart).Description("Is the accrual hearted?");
            Field(x => x.IsArchived).Description("Is the accrual archived?");

            Field(x => x.HourlyRate, nullable: true).Description("Amount of money earned per accrued hour.");
            Field(x => x.DayOfPayA, nullable: true).Description("");
            Field(x => x.DayOfPayB, nullable: true).Description("");
            Field(x => x.MinHours, nullable: true).Description("Minimum amount of hours the user wants to always have available.");
            Field(x => x.MaxHours, nullable: true).Description("Maximum possible amount of accrued hours.");

            Field <ListGraphType <AccrualActionRecordGraphType> >("actions", "");

            Field <UserGraphType>("user", "",
                                  resolve: context =>
            {
                AppUser user = _userRepository.GetUserByUserIdAsync(context.Source.UserId).Result;
                return(user);
            });

            Field <ListGraphType <AccrualRowGraphType> >("rows", "",
                                                         resolve: context =>
            {
                var rows = _accrualService.Calculate(context.Source);
                return(rows);
            });
        }