public static Employee GenerateEmployee(int employeeLevel, bool?isMale = null) { var(addr1, addr2) = DummyData.GetRandomChitownStreet(); var zip = DummyData.GetRandomChitownZip(); var dateHired = DummyData.GetRandomHireDate(); var male = isMale ?? DummyData.CoinToss(); var employee = new Employee( dateHired: DummyData.GetRandomHireDate(), dateOfBirth: DummyData.GetRandomBirthDate(), employeeLevel: employeeLevel, firstName: DummyData.GenerateFakeFirstOrMiddleName(male), gender: male ? Gender.Male : Gender.Female, homeAddress: new Address(addr1, "Chicago", new State("IL"), new ZipCode(zip), addr2), lastName: DummyData.GenerateFakeLastName(), paidTimeOffPolicy: new PaidTimeOffPolicy(false, employeeLevel, true, 320.0m, "DEMO POLICY", 10.0m) { Id = random.Next() }, salary: new Money((random.Next(25) + 10 * employeeLevel) * 1000.0M, Currency.USD), socialSecurityNumber: new SocialSecurityNumber(DummyData.GenerateFakeSSN()), middleName: random.Next() % 3 != 0 ? DummyData.GenerateFakeFirstOrMiddleName(male) : null, ptoHoursRemaining: 10.0m, subordinates: employeeLevel > 1 ? (from n in Enumerable.Range(1, random.Next(3) + employeeLevel) select GenerateEmployee(employeeLevel - 1)).ToList() : new List <Employee>() ); return(employee); }