public void AddFutureTest(Tester tester, Trainee trainee, DateTime time, Address address)
        {
            if (dal.GetTesterByID(tester.Id) == null)
            {
                throw new Exception(string.Format("tester {0} not exists in the DB.", tester.Id));
            }
            if (dal.GetTraineeById(trainee.Id) == null)
            {
                throw new Exception(string.Format("trainee {0} not exists in the DB.", trainee.Id));
            }
            if (DateTime.Now > time)
            {
                throw new Exception("you cant set future test for the past.");
            }
            var WeeklyTests = new List <Test>(from test in GetTestsByTesters(tester)
                                              let TestDiff = (7 + test.RealDateOfTest.DayOfWeek - DayOfWeek.Sunday) % 7
                                                             let TimeDiff = (7 + time.DayOfWeek - DayOfWeek.Sunday) % 7
                                                                            where time.AddDays(TimeDiff * -1).Date == test.DateOfTest.AddDays(TestDiff * -1).Date
                                                                            select test);

            if (WeeklyTests.Count > tester.MaxWeeklyTests)
            {
                throw new Exception(string.Format("The tester {0} can't have a test at {1} due to hte fact he exceded the maximum amount of tests that week", tester.ToString(), time.ToString()));
            }
            if (GetTestsByTrainee(trainee).Any(test => test.DateOfTest > DateTime.Now || test.RealDateOfTest != null))
            {
                throw new Exception(string.Format("You can not set a test for a student {0} because in the system already have a future test", trainee.Id));
            }

            var NumberOfTestsInTimeSpan = new List <Test>(from test in GetTestsByTesters(tester)
                                                          let timespan = test.RealDateOfTest - time
                                                                         where timespan.Duration().Minutes < 30
                                                                         select test);

            foreach (var test in GetTestsByTesters(tester))
            {
                if ((test.DateOfTest - time).Duration().Minutes < BE.Configuration.DURATION_OF_TEST)
                {
                    throw new Exception(string.Format("The tester {0} has no time on {1} at {2}", tester.ToString(), time.ToString("dddd, MMMM dd yyyy"), time.ToString("t")));
                }
            }

            dal.AddFutureTest(new Test(tester.Id, trainee.Id, time, address));
        }