Beispiel #1
0
        public void TestEmployeeShareGainLargeNumberOfShares()
        {
            var marketPrice = new MarketPrice();

            marketPrice.Price           = 6.00M;
            marketPrice.MarketPriceDate = DateTime.Now;

            var employeeShare = new EmployeeShare();

            employeeShare.GrantPrice    = 5.00M;
            employeeShare.VestDate      = DateTime.Now.AddDays(-1);
            employeeShare.NumberOfUnits = 1000;

            Assert.IsTrue(employeeShare.CalculateGains(marketPrice) == 1000.00M);
        }
Beispiel #2
0
        public void TestVestDateAfterMarketDate()
        {
            var marketPrice = new MarketPrice();

            marketPrice.Price           = 6.00M;
            marketPrice.MarketPriceDate = DateTime.Now;

            var employeeShare = new EmployeeShare();

            employeeShare.GrantPrice    = 5.00M;
            employeeShare.VestDate      = DateTime.Now.AddDays(1);
            employeeShare.NumberOfUnits = 1;

            Assert.IsTrue(employeeShare.CalculateGains(marketPrice) == 0.00M);
        }
Beispiel #3
0
        public void TestOutputGeneration()
        {
            var marketPrice = new MarketPrice();

            marketPrice.Price           = 6.00M;
            marketPrice.MarketPriceDate = DateTime.Now;

            var anEmployee = new EmployeeShare();

            anEmployee.EmployeeId    = "1";
            anEmployee.GrantPrice    = 5.00M;
            anEmployee.NumberOfUnits = 100;
            anEmployee.VestDate      = DateTime.Now.AddDays(-10);

            var anEmployee1 = new EmployeeShare();

            anEmployee1.EmployeeId    = "1";
            anEmployee1.GrantPrice    = 5.00M;
            anEmployee1.NumberOfUnits = 100;
            anEmployee1.VestDate      = DateTime.Now.AddDays(-10);

            var anEmployee2 = new EmployeeShare();

            anEmployee2.EmployeeId    = "2";
            anEmployee2.GrantPrice    = 5.00M;
            anEmployee2.NumberOfUnits = 100;
            anEmployee2.VestDate      = DateTime.Now.AddDays(-10);

            var employeeList = new List <EmployeeShare>();

            employeeList.Add(anEmployee);
            employeeList.Add(anEmployee1);
            employeeList.Add(anEmployee2);

            var outputRenderer = new OutputRendererService();

            var bonuses = new List <EmployeeBonus>();

            var result = outputRenderer.GenerateOutput(marketPrice, employeeList, bonuses, new List <EmployeeSale>());

            var resultCount = result.Split('\n').Length;

            Assert.IsTrue(resultCount == 3); // there is an extra line at the end, this is fine... 3 == 2, etc.
        }
Beispiel #4
0
        public void TestEmployeeShareWithMultiplier()
        {
            var marketPrice = new MarketPrice();

            marketPrice.Price           = 6.00M;
            marketPrice.MarketPriceDate = DateTime.Now;

            var employeeShare = new EmployeeShare();
            var employeeBonus = new EmployeeBonus();

            employeeBonus.BonusDate  = DateTime.Now;
            employeeBonus.Multiplier = 2.00M;
            employeeBonus.EmployeeId = "123";

            employeeShare.EmployeeId    = "123";
            employeeShare.GrantPrice    = 5.00M;
            employeeShare.VestDate      = DateTime.Now.AddDays(-1);
            employeeShare.NumberOfUnits = 1000;

            Assert.IsTrue(employeeShare.CalculateGains(marketPrice, employeeBonus, 0) == 2000.00M);
        }
Beispiel #5
0
        public BaseRecord GetRecord(string type, CsvReader csvReader)
        {
            switch (type)
            {
            case "VEST":
                var newShareRecord = new EmployeeShare
                {
                    Action        = csvReader.GetField <string>(0),
                    EmployeeId    = csvReader.GetField <string>(1),
                    VestDate      = ParseExactDate(csvReader.GetField <string>(2)),
                    NumberOfUnits = csvReader.GetField <int>(3),
                    GrantPrice    = csvReader.GetField <decimal>(4)
                };
                return(newShareRecord);

            case "PERF":
                var employeeBonus = new EmployeeBonus
                {
                    Action     = csvReader.GetField <string>(0),
                    EmployeeId = csvReader.GetField <string>(1),
                    BonusDate  = ParseExactDate(csvReader.GetField <string>(2)),
                    Multiplier = csvReader.GetField <decimal>(3)
                };
                return(employeeBonus);

            case "SALE":
                var employeeSale = new EmployeeSale
                {
                    Action          = csvReader.GetField <string>(0),
                    EmployeeId      = csvReader.GetField <string>(1),
                    SaleDate        = ParseExactDate(csvReader.GetField <string>(2)),
                    Quantity        = csvReader.GetField <int>(3),
                    MarketSellPrice = csvReader.GetField <decimal>(4)
                };
                return(employeeSale);

            default:
                throw new InvalidInputException("Row type not supported.");
            }
        }