public void LastWorkingDayofMonth_TestMethod()
        {
            HomeController nextSalary = new HomeController();

            SalaryDateCalculationDTO dto = new SalaryDateCalculationDTO();

            dto.CurrentDate      = new DateTime(2017, 6, 8);
            dto.PaymentFrequency = SalaryFrequency.LastWorkingDayofMonth;
            dto.Day  = 0;
            dto.Week = 0;

            string dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            Assert.IsNotNull(dateResult);
            Assert.AreEqual("30.06.2017", dateResult);

            //Test Value 2
            dto.CurrentDate      = new DateTime(2017, 9, 20);
            dto.PaymentFrequency = SalaryFrequency.LastWorkingDayofMonth;
            dto.Day  = 0;
            dto.Week = 0;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            // Assert
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("29.09.2017", dateResult);
        }
        public void SpecificDayofMonth_TestMethod()
        {
            HomeController nextSalary = new HomeController();

            SalaryDateCalculationDTO dto = new SalaryDateCalculationDTO();

            dto.CurrentDate      = new DateTime(2017, 7, 8);
            dto.PaymentFrequency = SalaryFrequency.SpecificDayofMonth;
            dto.Day  = 12;
            dto.Week = 0;

            string dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            Assert.IsNotNull(dateResult);
            Assert.AreEqual("12.07.2017", dateResult);

            //Test Value 2
            dto.CurrentDate      = new DateTime(2017, 7, 20);
            dto.PaymentFrequency = SalaryFrequency.SpecificDayofMonth;
            dto.Day  = 14;
            dto.Week = 0;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            // Assert
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("14.08.2017", dateResult);
        }
        public void LastXDay_TestMethod()
        {
            HomeController nextSalary = new HomeController();

            SalaryDateCalculationDTO dto = new SalaryDateCalculationDTO();


            //Test Value 1
            dto                  = new SalaryDateCalculationDTO();
            dto.CurrentDate      = new DateTime(2017, 7, 14);
            dto.PaymentFrequency = SalaryFrequency.LastXDay;
            dto.Day              = 3;
            dto.Week             = 0;

            string dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            Assert.IsNotNull(dateResult);
            Assert.AreEqual("26.07.2017", dateResult);

            //Test Value 2
            dto.CurrentDate      = new DateTime(2017, 8, 18);
            dto.PaymentFrequency = SalaryFrequency.LastXDay;
            dto.Day  = 1;
            dto.Week = 0;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("28.08.2017", dateResult);

            //Test Value 3
            dto.CurrentDate      = new DateTime(2017, 9, 21);
            dto.PaymentFrequency = SalaryFrequency.LastXDay;
            dto.Day  = 5;
            dto.Week = 0;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("29.09.2017", dateResult);
        }
        public void NthWeeksXDay_TestMethod()
        {
            HomeController nextSalary = new HomeController();

            SalaryDateCalculationDTO dto = new SalaryDateCalculationDTO();

            dto.CurrentDate      = new DateTime(2017, 8, 10);
            dto.PaymentFrequency = SalaryFrequency.NthWeeksXDay;
            dto.Day  = 1;
            dto.Week = 1;

            object dateResultEx = nextSalary.Index2(dto);

            Assert.IsInstanceOfType(dateResultEx, typeof(NextSalaryCalculator.PaymentDateCalculator.NoSuchDateException));


            //Test Value 2
            dto.CurrentDate      = new DateTime(2017, 7, 8);
            dto.PaymentFrequency = SalaryFrequency.NthWeeksXDay;
            dto.Day  = 3;
            dto.Week = 3;

            object dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            Assert.IsNotNull(dateResult);
            Assert.AreEqual("12.07.2017", dateResult);

            //Test Value 3
            dto.CurrentDate      = new DateTime(2017, 6, 14);
            dto.PaymentFrequency = SalaryFrequency.NthWeeksXDay;
            dto.Day  = 5;
            dto.Week = 5;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("30.06.2017", dateResult);
        }
        public void NthXDay_TestMethod()
        {
            HomeController nextSalary = new HomeController();

            SalaryDateCalculationDTO dto = new SalaryDateCalculationDTO();

            dto.CurrentDate      = new DateTime(2017, 6, 5);
            dto.PaymentFrequency = SalaryFrequency.NthXDay;
            dto.Day  = 1;
            dto.Week = 1;

            string dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            Assert.IsNotNull(dateResult);
            Assert.AreEqual("03.07.2017", dateResult);

            //Test Value 2
            dto.CurrentDate      = new DateTime(2017, 7, 8);
            dto.PaymentFrequency = SalaryFrequency.NthXDay;
            dto.Day  = 3;
            dto.Week = 3;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("19.07.2017", dateResult);

            //Test Value 3
            dto.CurrentDate      = new DateTime(2017, 6, 14);
            dto.PaymentFrequency = SalaryFrequency.NthXDay;
            dto.Day  = 5;
            dto.Week = 5;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("30.06.2017", dateResult);
        }
        public void FirstXDay_TestMethod()
        {
            HomeController nextSalary = new HomeController();

            SalaryDateCalculationDTO dto = new SalaryDateCalculationDTO();

            dto.CurrentDate      = new DateTime(2017, 7, 3);
            dto.PaymentFrequency = SalaryFrequency.FirstXDay;
            dto.Day  = 2;
            dto.Week = 0;

            string dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");

            Assert.IsNotNull(dateResult);
            Assert.AreEqual("04.07.2017", dateResult);

            //Test Value 2
            dto.CurrentDate      = new DateTime(2017, 7, 6);
            dto.PaymentFrequency = SalaryFrequency.FirstXDay;
            dto.Day  = 2;
            dto.Week = 0;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("01.08.2017", dateResult);

            //Test Value 3
            dto.CurrentDate      = new DateTime(2017, 7, 1);
            dto.PaymentFrequency = SalaryFrequency.FirstXDay;
            dto.Day  = 4;
            dto.Week = 0;

            dateResult = ((DateTime)nextSalary.Index2(dto)).ToString("dd.MM.yyyy");
            Assert.IsNotNull(dateResult);
            Assert.AreEqual("06.07.2017", dateResult);
        }
        //"dto":{"Day":2,"Week":0,"CurrentDate":"3.07.2017","PaymentFrequency":"FirstXDay"}
        //
        public object Index(SalaryDateCalculationDTO dto)
        {
            PaymentDateCalculator calculator = new PaymentDateCalculator();

            return(calculator.CalculateNextSalaryDate(dto));
        }
        public string Get(SalaryDateCalculationDTO dto)
        {
            PaymentDateCalculator calculator = new PaymentDateCalculator();

            return(calculator.CalculateNextSalaryDate(dto).ToString());
        }