def test_remove_student(self): services = Services() repo = services.repository services.add(["discipline", "0", "discipline test"]) services.add(["student", "1", "student 1 test"]) services.add(["student", "2", "student 2 test"]) services.grade(["1", "0", "10"]) services.grade(["1", "0", "6"]) services.grade(["2", "0", "9"]) services.grade(["2", "0", "7"]) services.grade(["2", "0", "8"]) self.assertEqual(repo.get_students_count(), 2) self.assertEqual(repo.get_disciplines_count(), 1) self.assertEqual(repo.get_grades_count(), 5) self.assertRaises(Exception, lambda: services.remove([])) self.assertRaises(Exception, lambda: services.remove(["", ""])) self.assertRaises(Exception, lambda: services.remove(["abc", "abc"])) self.assertRaises(Exception, lambda: services.remove(["student", "abc"])) self.assertRaises(Exception, lambda: services.remove(["student", "0"])) services.remove(["student", "2"]) self.assertEqual(repo.get_students_count(), 1) self.assertEqual(repo.get_disciplines_count(), 1) self.assertEqual(repo.get_grades_count(), 2) self.assertRaises(Exception, lambda: services.remove(["student", "2"]))
def test_add_discipline(self): services = Services() repo = services.repository self.assertRaises(Exception, lambda: services.add([])) self.assertRaises(Exception, lambda: services.add(["", "", ""])) self.assertRaises(Exception, lambda: services.add(["abc", "abc", "abc"])) self.assertRaises(Exception, lambda: services.add(["discipline", "abc", "abc"])) self.assertRaises(Exception, lambda: services.add(["discipline", "0", "abc"])) services.add(["discipline", "0", "test"]) discipline1 = repo.get_discipline(0) self.assertEqual(discipline1.id, 0) self.assertEqual(discipline1.name, "test") self.assertEqual(repo.get_disciplines_count(), 1) self.assertRaises(Exception, lambda: services.add(["discipline", "0", "testing"])) services.add(["discipline", "1", "test"]) discipline2 = repo.get_discipline(1) self.assertEqual(discipline2.id, 1) self.assertEqual(discipline2.name, "test") self.assertEqual(repo.get_disciplines_count(), 2) self.assertNotEqual(discipline1, discipline2)
def test_update_discipline(self): services = Services() repo = services.repository services.add(["discipline", "1", "discipline test"]) self.assertEqual(repo.get_disciplines_count(), 1) discipline = repo.get_discipline(1) self.assertEqual(discipline.id, 1) self.assertEqual(discipline.name, "discipline test") self.assertRaises(Exception, lambda: services.update([])) self.assertRaises(Exception, lambda: services.update(["", "", ""])) self.assertRaises(Exception, lambda: services.update(["abc", "abc", "abc"])) self.assertRaises( Exception, lambda: services.update(["discipline", "abc", "abc"])) self.assertRaises(Exception, lambda: services.update(["discipline", "0", "abc"])) self.assertRaises(Exception, lambda: services.update(["discipline", "1", "abc"])) services.update(["discipline", "1", "test"]) self.assertEqual(discipline.id, 1) self.assertEqual(discipline.name, "test") self.assertEqual(repo.get_disciplines_count(), 1)
def test_grade(self): services = Services() repo = services.repository services.add(["student", "1", "stud 1"]) services.add(["discipline", "1", "discipline 1"]) self.assertEqual(repo.get_students_count(), 1) self.assertEqual(repo.get_disciplines_count(), 1) self.assertRaises(Exception, lambda: services.grade([])) self.assertRaises(Exception, lambda: services.grade(["", "", ""])) self.assertRaises(Exception, lambda: services.grade(["abc", "abc", "abc"])) self.assertRaises(Exception, lambda: services.grade(["0", "abc", "abc"])) self.assertRaises(Exception, lambda: services.grade(["1", "abc", "abc"])) self.assertRaises(Exception, lambda: services.grade(["1", "0", "abc"])) self.assertRaises(Exception, lambda: services.grade(["1", "1", "abc"])) self.assertRaises(Exception, lambda: services.grade(["1", "1", "0"])) self.assertRaises(Exception, lambda: services.grade(["1", "1", "11"])) services.grade(["1", "1", "1"]) services.grade(["1", "1", "10"]) services.grade(["1", "1", "5"]) self.assertEqual(repo.get_grades_count(), 3)
def test_add_student(self): services = Services() repo = services.repository self.assertRaises(Exception, lambda: services.add([])) self.assertRaises(Exception, lambda: services.add(["", "", ""])) self.assertRaises(Exception, lambda: services.add(["abc", "abc", "abc"])) self.assertRaises(Exception, lambda: services.add(["student", "abc", "abc"])) self.assertRaises(Exception, lambda: services.add(["student", "0", "abc"])) services.add(["student", "0", "test"]) student1 = repo.get_student(0) self.assertEqual(student1.id, 0) self.assertEqual(student1.name, "test") self.assertEqual(repo.get_students_count(), 1) self.assertRaises(Exception, lambda: services.add(["student", "0", "testing"])) services.add(["student", "1", "test"]) student2 = repo.get_student(1) self.assertEqual(student2.id, 1) self.assertEqual(student2.name, "test") self.assertEqual(repo.get_students_count(), 2) self.assertNotEqual(student1, student2)
def test_update_student(self): services = Services() repo = services.repository services.add(["student", "1", "student test"]) self.assertEqual(repo.get_students_count(), 1) student = repo.get_student(1) self.assertEqual(student.id, 1) self.assertEqual(student.name, "student test") self.assertRaises(Exception, lambda: services.update([])) self.assertRaises(Exception, lambda: services.update(["", "", ""])) self.assertRaises(Exception, lambda: services.update(["abc", "abc", "abc"])) self.assertRaises(Exception, lambda: services.update(["student", "abc", "abc"])) self.assertRaises(Exception, lambda: services.update(["student", "0", "abc"])) self.assertRaises(Exception, lambda: services.update(["student", "1", "abc"])) services.update(["student", "1", "test"]) self.assertEqual(student.id, 1) self.assertEqual(student.name, "test") self.assertEqual(repo.get_students_count(), 1)
def run_filter_above_test(): expenses = [] services = Services(expenses) try: services.filter_above([""]) assert False except: assert True try: services.filter_above(["abc"]) assert False except: assert True services.filter_above(["0"]) services.add(["8", "4", "transport"]) assert len(expenses) == 1 services.add(["7", "2", "transport"]) assert len(expenses) == 2 services.add(["6", "1", "transport"]) assert len(expenses) == 3 services.add(["5", "2", "cloathing"]) assert len(expenses) == 4 services.filter_above(["1"]) assert len(expenses) == 3
def test_search(self): services = Services() repo = services.repository services.add(["student", "1", "stud 1"]) services.add(["student", "2", "stud 2"]) services.add(["discipline", "1", "discipline"]) self.assertEqual(repo.get_students_count(), 2) self.assertEqual(repo.get_disciplines_count(), 1) self.assertRaises(Exception, lambda: services.search([])) self.assertRaises(Exception, lambda: services.search([""])) self.assertRaises(Exception, lambda: services.search(["magic"])) self.assertNotIn('|', services.search(["stud"])) self.assertIn('|', services.search(["1"]))
def test_disciplines_with_grades(self): services = Services() repo = services.repository services = Services() repo = services.repository services.add(["student", "1", "stud 1"]) services.add(["student", "2", "stud 2"]) services.add(["student", "3", "stud 3"]) services.add(["discipline", "1", "discipline 1"]) services.add(["discipline", "2", "discipline 2"]) self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 2) self.assertRaises(Exception, lambda: services.see_grades()) services.grade(["1", "1", "10"]) services.grade(["2", "1", "10"]) services.grade(["2", "1", "1"]) services.grade(["2", "1", "4"]) services.grade(["2", "2", "5"]) services.grade(["3", "1", "1"]) services.grade(["3", "1", "2"]) services.grade(["3", "1", "3"]) services.grade(["3", "1", "4"]) services.grade(["3", "2", "5"]) self.assertEqual(repo.get_grades_count(), 10) self.assertIn("\n", services.see_grades())
class Program: def __init__(self): self.__ui_manager = MenuUI() self.__DEBUGGING_MODE = True self.__services = Services() def start(self): if self.__DEBUGGING_MODE: run_tests() self.__services.preload_list() self.__ui_manager.show_help() while True: action = self.__ui_manager.get_action() try: if action.type == constants.ACTION_ADD: result = self.__services.add(action.params) self.__ui_manager.print_result(result) elif action.type == constants.ACTION_ERROR: self.__ui_manager.on_invalid_command() elif action.type == constants.ACTION_EXIT: return elif action.type == constants.ACTION_FILTER_ABOVE: result = self.__services.filter_above(action.params) self.__ui_manager.print_result(result) elif action.type == constants.ACTION_HELP: self.__ui_manager.show_help() elif action.type == constants.ACTION_LIST_ALL: result = self.__services.list_all() self.__ui_manager.print_result(result) elif action.type == constants.ACTION_UNDO: result = self.__services.undo_last_action() self.__ui_manager.print_result(result) except ValidationError as error: self.__ui_manager.handle_error(error)
def run_undo_test(): expenses = [] services = Services(expenses) services.add(["4", "4", "food"]) assert len(expenses) == 1 services.add(["4", "8", "housekeeping"]) assert len(expenses) == 2 services.add(["3", "16", "housekeeping"]) assert len(expenses) == 3 services.add(["2", "32", "internet"]) assert len(expenses) == 4 services.filter_above(["10"]) assert len(expenses) == 2 services.undo_last_action() assert len(expenses) == 4 services.undo_last_action() assert len(expenses) == 3 services.undo_last_action() assert len(expenses) == 2 services.undo_last_action() assert len(expenses) == 1 services.undo_last_action() assert len(expenses) == 0 try: services.undo_last_action() assert False except: assert True
def test_list_all(self): services = Services() repo = services.repository self.assertRaises(Exception, lambda: services.list_all()) services.add(["student", "0", "stud 1"]) self.assertEqual(repo.get_students_count(), 1) self.assertNotIn('|', services.list_all()) repo.clear() self.assertEqual(repo.get_students_count(), 0) services.add(["discipline", "1", "discipline 1"]) self.assertEqual(repo.get_disciplines_count(), 1) self.assertNotIn('|', services.list_all()) services.add(["student", "2", "stud 1"]) self.assertEqual(repo.get_students_count(), 1) services.add(["student", "3", "stud 2"]) self.assertEqual(repo.get_students_count(), 2) self.assertIn('|', services.list_all())
def run_add_test(): expenses = [] services = Services(expenses) try: services.add(["", "", ""]) assert False except: assert True assert len(expenses) == 0 try: services.add(["abc", "abc", "abc"]) assert False except: assert True assert len(expenses) == 0 try: services.add(["0", "0", "abc"]) assert False except: assert True assert len(expenses) == 0 try: services.add(["32", "abc", "abc"]) assert False except: assert True assert len(expenses) == 0 try: services.add(["30", "abc", "abc"]) assert False except: assert True assert len(expenses) == 0 services.add(["28", "64", "food"]) assert len(expenses) == 1 expense = expenses[0] assert expense.cost == 64 assert expense.category == "food" assert expense.day == 28
def test_redo(self): services = Services() repo = services.repository self.assertRaises(Exception, lambda: services.redo()) services.add(["student", "1", "stud 1"]) services.add(["student", "2", "stud 2"]) services.add(["student", "3", "stud 3"]) services.add(["discipline", "1", "discipline 1"]) services.add(["discipline", "2", "discipline 2"]) self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 2) self.assertEqual(repo.get_grades_count(), 0) self.assertRaises(Exception, lambda: services.redo()) services.undo() services.undo() self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 0) self.assertEqual(repo.get_grades_count(), 0) services.redo() services.redo() self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 2) self.assertEqual(repo.get_grades_count(), 0) services.grade(["1", "1", "10"]) services.grade(["2", "1", "10"]) services.grade(["2", "1", "1"]) services.grade(["2", "1", "4"]) services.grade(["2", "2", "5"]) services.grade(["3", "1", "1"]) services.grade(["3", "1", "2"]) services.grade(["3", "1", "3"]) services.grade(["3", "2", "4"]) services.grade(["3", "2", "5"]) self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 2) self.assertEqual(repo.get_grades_count(), 10) services.remove(["discipline", "2"]) self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 1) self.assertEqual(repo.get_grades_count(), 7) services.undo() self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 2) self.assertEqual(repo.get_grades_count(), 10) services.redo() self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 1) self.assertEqual(repo.get_grades_count(), 7) services.remove(["student", "3"]) self.assertEqual(repo.get_students_count(), 2) self.assertEqual(repo.get_disciplines_count(), 1) self.assertEqual(repo.get_grades_count(), 4) for _ in range(13): services.undo() self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 1) self.assertEqual(repo.get_grades_count(), 0) services.redo() services.redo() self.assertEqual(repo.get_students_count(), 3) self.assertEqual(repo.get_disciplines_count(), 2) self.assertEqual(repo.get_grades_count(), 1) services.update(["discipline", "1", "test"]) self.assertEqual(repo.get_disciplines_count(), 2) services.undo() self.assertEqual(repo.get_disciplines_count(), 2) discipline = repo.get_discipline(1) self.assertEqual(discipline.name, "discipline 1") services.redo() self.assertEqual(repo.get_disciplines_count(), 2) discipline = repo.get_discipline(1) self.assertEqual(discipline.name, "test") for _ in range(7): services.undo() self.assertTrue(repo.is_empty()) services.preload_list() self.assertFalse(repo.is_empty()) services.undo() self.assertTrue(repo.is_empty()) services.redo() self.assertFalse(repo.is_empty()) self.assertRaises(Exception, lambda: services.redo())
class Program: def __init__(self): self.__services = Services() self.__ui_manager = MenuUI() def change_ui(self): if self.__ui_manager.switch_ui_prefernece(): if self.__ui_manager.TYPE == MenuUI.TYPE: self.__ui_manager = GraphicalUI() else: self.__ui_manager = MenuUI() def start(self): self.__services.preload_list() self.change_ui() while True: result = "" try: action = self.__ui_manager.get_action() if action.type == Action.ADD: self.__services.add(action.params) elif action.type == Action.REMOVE: self.__services.remove(action.params) elif action.type == Action.UPDATE: self.__services.update(action.params) elif action.type == Action.LIST: result = self.__services.list_all() elif action.type == Action.GRADE: self.__services.grade(action.params) elif action.type == Action.SEARCH: result = self.__services.search(action.params) elif action.type == Action.SEE_FAILING_STUDENTS: result = self.__services.see_failing_students() elif action.type == Action.SEE_BEST_STUDENTS: result = self.__services.see_best_students() elif action.type == Action.SEE_GRADES: result = self.__services.see_grades() elif action.type == Action.UNDO: self.__services.undo() elif action.type == Action.REDO: self.__services.redo() elif action.type == Action.HELP: self.__ui_manager.show_help() continue elif action.type == Action.UI: self.change_ui() continue elif action.type == Action.TEST: unittest.main(module = "services_test", exit = False) continue elif action.type == Action.EXIT: return self.__ui_manager.print_result(result) except Exception as error: self.__ui_manager.handle_error(error)