Esempio n. 1
0
class Test(TestCase):
    def setUp(self):
        #TODO: finish testing
        disciplineRepository = Repository()
        studentRepository = Repository()
        gradeReposiotry = Repository()

        self.validator = Validator()

        self.disciplineController = DisciplineController(disciplineRepository)
        self.studentController = StudentController(studentRepository)
        self.gradeController = GradeController(gradeReposiotry)

        self.disciplineController.add(12, "Mathematics")
        self.disciplineController.add(13, "Mathematics")
        self.studentController.add(13, "Williams")
        self.studentController.add(12, "Williams")
        self.gradeController.add(12, 13, 9)

    def test_discipline__add(self):
        disicplineToTest = Discipline(1, "Chemistry")

        self.disciplineController.add(1, "Chemistry")
        self.assertEqual(
            self.disciplineController.get_repository().get_list()[2].get_ID(),
            disicplineToTest.get_ID())
        self.assertEqual(
            self.disciplineController.get_repository().get_list()
            [2].get_name(), disicplineToTest.get_name())

    def test_discipline_remove(self):
        self.disciplineController.remove(12)
        self.assertEqual(
            len(self.disciplineController.get_repository().get_list()), 1)

    def test_discipline_update(self):
        self.disciplineController.update(12, "Chemistry")
        for items in self.disciplineController.get_repository().get_list():
            if 12 == items.get_ID() and items.get_name() != "Chemistry":
                self.assertFalse(False)

    def test_student_add(self):
        studentToTest = Student(1, "Michael")

        self.studentController.add(1, "Michael")
        self.assertEqual(
            self.studentController.get_repository().get_list()[2].get_ID(),
            studentToTest.get_ID())
        self.assertEqual(
            self.studentController.get_repository().get_list()[2].get_name(),
            studentToTest.get_name())

    def test_student_remove(self):
        self.studentController.remove(12)
        self.assertEqual(
            len(self.studentController.get_repository().get_list()), 1)

    def test_student_update(self):
        self.studentController.update(12, "Johny")
        for items in self.studentController.get_repository().get_list():
            if 12 == items.get_ID() and items.get_name() != "Johny":
                self.assertFalse(False)

    def test_grade_add(self):
        gradeToAdd = Grade(12, 12, 13)
        try:
            self.validator.gradeInStudentAndDisciplineRepository(
                gradeToAdd, self.studentController.get_repository(),
                self.disciplineController.get_repository())
            self.assertTrue(True)
        except:
            self.assertFalse(True)

        gradeToAdd = Grade(16, 12, 13)
        try:
            self.validator.gradeInStudentAndDisciplineRepository(
                gradeToAdd, self.studentController.get_repository(),
                self.disciplineController.get_repository())
            self.assertFalse(True)
        except:
            self.assertTrue(True)
class OperationController(object):
    def __init__(self, studentController: StudentController,
                 disciplineController: DisciplineController,
                 gradeController: GradeController):
        # constructor for UndoController
        self.__studentController = studentController
        self.__disciplineController = disciplineController
        self.__gradeController = gradeController
        self.__statistics = Statistics()
        self.dictioanryOfOperations = {
            "addStudent": self.add_student,
            "addDiscipline": self.add_discipline,
            "addGrade": self.add_grade,
            "removeStudent": self.remove_student,
            "removeDiscipline": self.remove_discipline,
            "removeGrade": self.remove_grade,
            "getDisciplines": self.get_disciplines,
            "getStudents": self.get_students,
            "getGrades": self.get_grades,
            "updateStudent": self.update_student,
            "updateDiscipline": self.update_discipline,
            "searchStudent": self.search_student,
            "searchDiscipline": self.search_discipline,
            "studentsAlphabeticallyByDiscipline":
            self.students_enrolled_sorted_alphabaticlaly_by_discipline,
            "studentsGradesByDiscipline":
            self.students_enrolled_sorted_by_grade_for_disciplines,
            "studentsFailing": self.students_failing_at_a_discipline,
            "studentBestSituation": self.students_with_best_school_situation,
            "disciplinesSortedByGrade":
            self.disciplines_sorted_by_average_grade,
            "studentRepository": self.get_student_repostiory,
            "disciplineRepository": self.get_discipline_repostiory,
            "gradeRepository": self.get_grade_repostiory
        }
        self.dictionaryOfReversableFunctions = {
            "addStudent": self.add_student,
            "addDiscipline": self.add_discipline,
            "addGrade": self.add_grade,
            "removeStudent": self.remove_student,
            "removeDiscipline": self.remove_discipline,
            "removeGrade": self.remove_grade,
            "updateStudent": self.update_student,
            "updateDiscipline": self.update_discipline,
        }
        self.history = []
        self.validator = Validator()

    def add_student(self, studentID, studentName):
        """
        Description: adds a student to the controller and adds the inverse function to the list
        """
        self.__studentController.add(studentID, studentName)
        self.history.append(["addStudent", [studentID, studentName]])

    def add_discipline(self, disciplineID, disciplineName):
        """
        Description: adds a discipline to the controller and adds the inverse function to the list
        """
        self.__disciplineController.add(disciplineID, disciplineName)
        self.history.append(["addDiscipline", [disciplineID, disciplineName]])

    def remove_student(self, studentID, studentName=None):
        """
        Description: removes student from controller and adds the inverse functino to the list
        """
        studentName = self.__statistics.get_name_from_id(
            self.get_student_repostiory(), studentID)
        self.__studentController.remove(studentID)
        gradesRemoved = self.__gradeController.remove(studentID)
        self.history.append(
            ["removeStudent", [studentID, studentName], gradesRemoved])

    def remove_discipline(self, disciplineID, disciplineName=None):
        """
        Description: removes discipline from controller and adds the inverse function to the list
        """
        disciplineName = self.__statistics.get_name_from_id(
            self.get_discipline_repostiory(), disciplineID)
        self.__disciplineController.remove(disciplineID)
        gradesRemoved = self.__gradeController.remove(None, disciplineID)
        self.history.append([
            "removeDiscipline", [disciplineID, disciplineName], gradesRemoved
        ])

    def get_disciplines(self):
        """
        Description: gets disciplines from disciplineController
        """
        return self.__disciplineController.return_printable_list()

    def get_students(self):
        """
        Description: gets students from studnetController
        """
        return self.__studentController.return_printable_list()

    def add_grade(self, studentID, disciplineID, gradeValue):
        """
        Description:adds a grade to the gradeRepository
        """
        self.history.append(
            ["addGrade", [studentID, disciplineID, gradeValue]])
        gradeToAdd = Grade(studentID, disciplineID, gradeValue)
        self.validator.gradeInStudentAndDisciplineRepository(
            gradeToAdd, self.get_student_repostiory(),
            self.get_discipline_repostiory())
        self.__gradeController.add(studentID, disciplineID, gradeValue)

    def remove_grade(self, studentID, disciplineID, gradeValue):
        """
        Description: removes a grade from the gradeRepository
        """
        self.history.append(
            ["removeGrade", [studentID, disciplineID, gradeValue]])
        self.__gradeController.remove(studentID, disciplineID, gradeValue)

    def get_grades(self):
        """
        Description: gets all grades from gradeController
        """
        return self.__gradeController.return_printable_list()

    def update_student(self, studentID, studentName):
        """
        Description: updates a student on the studentRepository
        """
        self.history.append([
            "updateStudent",
            [
                studentID,
                self.__statistics.get_name_from_id(
                    self.get_student_repostiory(), studentID), studentName
            ]
        ])
        self.__studentController.update(studentID, studentName)

    def update_discipline(self, disciplineID, disciplineName):
        """
        Description: updates a discipline from the dispciplineRepository
        """
        self.history.append([
            "updateDiscipline",
            [
                disciplineID,
                self.__statistics.get_name_from_id(
                    self.get_discipline_repostiory(), disciplineID),
                disciplineName
            ]
        ])
        self.__disciplineController.update(disciplineID, disciplineName)

    def students_enrolled_sorted_alphabaticlaly_by_discipline(
            self, disciplineID):
        """
        Description: at Statistics
        """
        return self.__statistics.students_entrolled_at_a_discipline_sorted_alphabatically(
            disciplineID, self.get_student_repostiory(),
            self.get_discipline_repostiory(), self.get_grade_repostiory())

    def students_enrolled_sorted_by_grade_for_disciplines(self, disciplineID):
        """
        Description:  at Statistics
        """
        return self.__statistics.students_enrolled_at_a_discipline_sorted_by_grade(
            disciplineID, self.get_student_repostiory(),
            self.get_discipline_repostiory(), self.get_grade_repostiory())

    def students_failing_at_a_discipline(self):
        """
        Description:at Statistics
        """
        return self.__statistics.students_failing_at_one_or_more_disciplines(
            self.get_student_repostiory(), self.get_grade_repostiory())

    def students_with_best_school_situation(self):
        """
        Description:at Statistics
        """
        return self.__statistics.students_with_best_school_situation(
            self.get_student_repostiory(), self.get_grade_repostiory())

    def disciplines_sorted_by_average_grade(self):
        """
        Description:at Statistics
        """
        return self.__statistics.disciplines_sorted_in_descending_order_of_grades(
            self.get_grade_repostiory(), self.get_discipline_repostiory(),
            self.get_student_repostiory())

    def search_student(self, studentID=None, studentName=None):
        """
        Description: searches the student in the studentRepository and returns him
        """
        return self.__studentController.search(studentID, studentName)

    def search_discipline(self, disciplineID=None, disciplineName=None):
        """
        Description: searches the disciplines in the discipline repository and returns him
        """
        return self.__disciplineController.search(disciplineID, disciplineName)

    def get_student_repostiory(self):
        """
        Description: gets studentRepository from controller
        """
        return self.__studentController.get_repository()

    def get_discipline_repostiory(self):
        """
        Description: gets discipline repository from controller
        """
        return self.__disciplineController.get_repository()

    def get_grade_repostiory(self):
        """
        Description: get grade repository from contorller
        """
        return self.__gradeController.get_repository()