public void TestHasGraduated()
        {
            var tracker = new GraduationTracker();

            IDiploma diploma = Repository.GetDiploma(1);


            // I could have use directly GetStudents but it is private, that's why I used GetStudent() method.
            IStudent[] students = new[]
            {
                Repository.GetStudent(1),
                Repository.GetStudent(2),
                Repository.GetStudent(3),
                Repository.GetStudent(4)
            };

            var graduated = new List <Tuple <bool, STANDING> >();

            foreach (var student in students)
            {
                graduated.Add(tracker.HasGraduated(diploma, student));
            }

            Assert.IsTrue(graduated[0].Item2 == STANDING.MagnaCumLaude);
            Assert.IsTrue(graduated[1].Item2 == STANDING.SumaCumLaude);
            Assert.IsTrue(graduated[2].Item2 == STANDING.Average);
            Assert.IsTrue(graduated[3].Item2 == STANDING.Remedial);
        }
Example #2
0
        public static IDiploma GetDiploma(int id)
        {
            var      diplomas = GetDiplomas();
            IDiploma diploma  = null;

            diploma = diplomas.Where(x => x.Id == id).ToList().ElementAtOrDefault(0);

            return(diploma);
        }
        public void GetDiplomaTest()
        {
            IDiploma diploma        = Repository.GetDiploma(1);
            int      diplomaID      = diploma.Id;
            int      diplomaCredits = diploma.Credits;

            int[] requirements = diploma.Requirements;

            Assert.AreEqual(1, diplomaID);
            Assert.AreEqual(4, diplomaCredits);
            Assert.AreEqual(100, requirements.ElementAt(0));
        }
Example #4
0
        public void TestStudentsApprovedInScience()
        {
            IEnumerable <IStudent> students = Repository.GetStudents();
            IDiploma diploma = Repository.GetDiploma(1);

            StudentsGraduationTracker tracker = new StudentsGraduationTracker(students, diploma);

            IEnumerable <IStudent> studentsFailedInMath = tracker.GetStudentsApprovedInScience();


            Assert.IsTrue(studentsFailedInMath.Count() == 2);
        }
Example #5
0
        public void TestStudentIsNotGraduated()
        {
            IStudent student = Repository.GetStudent(4);
            IDiploma diploma = Repository.GetDiploma(1);
            StudentGraduationTracker tracker = new StudentGraduationTracker(student, diploma);

            ResultGraduationTracker result = tracker.StudentHasGraduated();



            Assert.IsFalse(result.IsGraduated);
            Assert.IsTrue(result.Standing == Standing.Remedial);
        }
Example #6
0
        public void TestStudentIsGraduated()
        {
            IStudent student = Repository.GetStudent(2);
            IDiploma diploma = Repository.GetDiploma(1);
            StudentGraduationTracker tracker = new StudentGraduationTracker(student, diploma);

            ResultGraduationTracker result = tracker.StudentHasGraduated();

            Assert.IsTrue(result.IsGraduated);
            Assert.IsTrue(result.Standing == Standing.MagnaCumLaude);
            // not too sure about this bussiness rule
            Assert.IsTrue(result.Credits > 1);
        }
        public static IDiploma GetDiploma(int id)
        {
            IDiploma[] diplomas = GetDiplomas();
            IDiploma   diploma  = null;

            for (int i = 0; i < diplomas.Length; i++)
            {
                if (id == diplomas[i].Id)
                {
                    diploma = diplomas[i];
                }
            }
            return(diploma);
        }
Example #8
0
        public Tuple <bool, STANDING> HasGraduated(IDiploma diploma, IStudent student)
        {
            var credits     = 0;
            var average     = 0;
            var totalCredit = 0;

            for (int i = 0; i < diploma.Requirements.Length; i++)
            {
                for (int j = 0; j < student.Courses.Length; j++)
                {
                    var requirement = diploma.Requirements[i];

                    for (int k = 0; k < requirement.Courses.Length; k++)
                    {
                        if (requirement.Courses[k].Id == student.Courses[j].Id)
                        {
                            average     += student.Courses[j].Mark;
                            totalCredit += requirement.Credits;
                            if (student.Courses[j].Mark >= requirement.MinimumMark)
                            {
                                credits += requirement.Credits;
                            }
                        }
                    }
                }
            }

            average = average / student.Courses.Length;

            if (average < 50)
            {
                return(new Tuple <bool, STANDING>(false, STANDING.Remedial));
            }
            else if (average < 80 && credits == totalCredit)
            {
                return(new Tuple <bool, STANDING>(true, STANDING.Average));
            }
            else if (average < 95 && credits == totalCredit)
            {
                return(new Tuple <bool, STANDING>(true, STANDING.SumaCumLaude));
            }
            else if (average >= 95 && credits == totalCredit)
            {
                return(new Tuple <bool, STANDING>(true, STANDING.MagnaCumLaude));
            }
            else
            {
                return(new Tuple <bool, STANDING>(false, STANDING.Remedial));
            }
        }
Example #9
0
        public Tuple <bool, STANDING> HasGraduated(IDiploma diploma, IStudent student)
        {
            var credits = 0;
            var average = 0;

            for (int i = 0; i < diploma.Requirements.Length; i++)
            {
                for (int j = 0; j < student.Courses.Length; j++)
                {
                    var requirement = Repository.GetRequirement(diploma.Requirements[i]);

                    for (int k = 0; k < requirement.Courses.Length; k++)
                    {
                        if (requirement.Courses[k].Equals(student.Courses[j].Id))
                        {
                            average += student.Courses[j].Mark;
                            if (student.Courses[j].Mark > requirement.MinimumMark)
                            {
                                credits += requirement.Credits;
                                break;
                            }
                        }
                    }
                }
            }

            average = average / student.Courses.Length;

            var standing = GetStanding(average);

            switch (standing)
            {
            case STANDING.Remedial:
                return(new Tuple <bool, STANDING>(false, standing));

            case STANDING.Average:
                return(new Tuple <bool, STANDING>(true, standing));

            case STANDING.SumaCumLaude:
                return(new Tuple <bool, STANDING>(true, standing));

            case STANDING.MagnaCumLaude:
                return(new Tuple <bool, STANDING>(true, standing));

            default:
                return(new Tuple <bool, STANDING>(false, standing));
            }
        }
 public StudentGraduationTracker(IStudent student, IDiploma diploma)
 {
     this.diploma = diploma;
     this.student = student;
 }
 public GraduationTracker(IRequirementRepository requirement, IStudent student, IDiploma diploma)
 {
     _reqRepo = requirement;
     _student = student;
     _diploma = diploma;
 }
 public int GetTotalCredit(IDiploma diploma)
 {
     return(this.CoursesMark.Select(cm => diploma.GetCreditsByCourseMark(cm)).Sum());
 }
        public static void Setup(TestContext testContext)
        {
            tracker = new GraduationTracker();

            diploma = new Diploma
            {
                Id           = 1,
                Credits      = 4,
                Requirements = new int[] { 100, 102, 103, 104 }
            };

            allStudents = new[]
            {
                new Student
                {
                    Id      = 1,
                    Courses = new Course[]
                    {
                        new Course {
                            Id = 1, Name = "Math", Mark = 95
                        },
                        new Course {
                            Id = 2, Name = "Science", Mark = 95
                        },
                        new Course {
                            Id = 3, Name = "Literature", Mark = 95
                        },
                        new Course {
                            Id = 4, Name = "Physichal Education", Mark = 95
                        }
                    }
                },
                new Student
                {
                    Id      = 2,
                    Courses = new Course[]
                    {
                        new Course {
                            Id = 1, Name = "Math", Mark = 80
                        },
                        new Course {
                            Id = 2, Name = "Science", Mark = 80
                        },
                        new Course {
                            Id = 3, Name = "Literature", Mark = 80
                        },
                        new Course {
                            Id = 4, Name = "Physichal Education", Mark = 80
                        }
                    }
                },
                new Student
                {
                    Id      = 3,
                    Courses = new Course[]
                    {
                        new Course {
                            Id = 1, Name = "Math", Mark = 50
                        },
                        new Course {
                            Id = 2, Name = "Science", Mark = 50
                        },
                        new Course {
                            Id = 3, Name = "Literature", Mark = 50
                        },
                        new Course {
                            Id = 4, Name = "Physichal Education", Mark = 50
                        }
                    }
                },
                new Student
                {
                    Id      = 4,
                    Courses = new Course[]
                    {
                        new Course {
                            Id = 1, Name = "Math", Mark = 40
                        },
                        new Course {
                            Id = 2, Name = "Science", Mark = 40
                        },
                        new Course {
                            Id = 3, Name = "Literature", Mark = 40
                        },
                        new Course {
                            Id = 4, Name = "Physichal Education", Mark = 40
                        }
                    }
                }
            };
        }
 public static void TestClean()
 {
     tracker     = null;
     diploma     = null;
     allStudents = null;
 }
 public StudentsGraduationTracker(IEnumerable <IStudent> students, IDiploma diploma)
 {
     this.diploma  = diploma;
     this.students = students;
 }