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); }
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)); }
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); }
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); }
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); }
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)); } }
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; }