Exemple #1
0
    def test_generate_id(self):
        repo = Repository()
        uids = []

        for i in range(1000):
            uid = repo.add_item(1)
            self.assertNotIn(uid, uids)
            uids.append(uid)
    def test_activity_service(self):
        a_repo = Repository()
        p_repo = Repository()
        p_repo.add_item(Person('1', get_random_name(),
                               get_random_phone_number()),
                        get_uid=lambda p: p.uid)
        p_repo.add_item(Person('2', get_random_name(),
                               get_random_phone_number()),
                        get_uid=lambda p: p.uid)
        p_repo.add_item(Person('3', get_random_name(),
                               get_random_phone_number()),
                        get_uid=lambda p: p.uid)

        service = ActivityService(a_repo, p_repo)
        activity1 = Activity('1234', ['1', '2'], get_random_date(),
                             get_random_time(), 'test1')
        activity2 = Activity('4321', ['1', '3'], get_random_date(),
                             get_random_time(), 'test2')

        service.add_activity(activity1)
        self.assertEqual(service.get_activities(), [activity1])
        service.add_activity(activity2)
        self.assertEqual(service.get_activities(), [activity1, activity2])

        self.assertEqual(service.get_activity(activity1.uid), activity1)

        service.remove_activity(activity2.uid)
        self.assertEqual(service.get_activities(), [activity1])

        CommandSystem.global_undo()
        self.assertEqual(service.get_activities(), [activity1, activity2])
        CommandSystem.global_redo()
        self.assertEqual(service.get_activities(), [activity1])
        CommandSystem.global_undo()

        new_activity = Activity(activity2.uid, ['1'], activity2.date,
                                activity2.time, activity2.description)
        service.update_activity(activity2.uid, new_activity)
        self.assertEqual(service.get_activities(), [activity1, new_activity])

        self.assertEqual(service.get_date_activities(activity1.date),
                         [activity1])

        self.assertEqual(service.get_busiest_days(), [(activity1.date, 1),
                                                      (new_activity.date, 1)])

        self.assertEqual(service.get_person_activities('2'), [activity1])
        self.assertEqual(service.search_activities(None, None, 'test1'),
                         [activity1])
    def test_person_service(self):
        a_repo = Repository()
        p_repo = Repository()
        service = PersonService(p_repo, a_repo)

        person1 = Person('1', get_random_name(), get_random_phone_number())
        person2 = Person('2', get_random_name(), get_random_phone_number())

        service.add_person(person1)
        self.assertEqual(service.get_persons(), [person1])
        service.add_person(person2)
        self.assertEqual(service.get_persons(), [person1, person2])

        self.assertEqual(service.get_person(person1.uid), person1)

        service.remove_person(person2.uid)
        self.assertEqual(service.get_persons(), [person1])

        CommandSystem.global_undo()
        self.assertEqual(service.get_persons(), [person1, person2])
        CommandSystem.global_redo()
        self.assertEqual(service.get_persons(), [person1])
        CommandSystem.global_undo()
Exemple #4
0
    def test_replace_item(self):
        repo = Repository()

        repo.add_item(0)
        repo.add_item(1)
        repo.add_item(1)
        uid = repo.add_item(1)

        repo.replace_item(0, condition=lambda item: item == 1)
        self.assertEqual(repo.get_items(), [0, 0, 1, 1])

        repo.replace_item(2, uid=uid)
        self.assertEqual(repo.get_items(), [0, 0, 1, 2])
Exemple #5
0
    def test_remove_items(self):
        repo = Repository()

        repo.add_item(0)
        repo.add_item(1)
        repo.add_item(1)
        repo.add_item(1)

        repo.remove_item(condition=lambda item: item == 1)
        self.assertEqual(repo.get_items(), [0, 1, 1])

        uid = repo.add_item(2)
        repo.remove_item(uid=uid)
        self.assertEqual(repo.get_items(), [0, 1, 1])

        repo.remove_items(lambda item: item == 1)
        self.assertEqual(repo.get_items(), [0])
Exemple #6
0
    def test_get_items(self):
        repo = Repository()

        repo.add_item(0)
        repo.add_item(1)
        self.assertEqual(repo.get_item(condition=lambda item: item == 1), 1)

        uid = repo.add_item(2)
        self.assertEqual(repo.get_item(uid=uid), 2)

        repo.add_item(1)
        self.assertEqual(repo.get_items(), [0, 1, 2, 1])
        self.assertEqual(repo.get_items(lambda item: item == 1), [1, 1])
        self.assertEqual(repo.get_items(lambda item: item > 2), [])

        repo.add_item(3)
        self.assertEqual(repo.get_items(lambda item: item > 2), [3])
Exemple #7
0
    def test_add_item(self):
        repo = Repository()

        repo.add_item(1)
        self.assertEqual(repo.get_items(), [1])
Exemple #8
0
 def __init__(self):
     self.__questions_ctrl = QuestionsController()
     self.__repo = Repository()
Exemple #9
0
class RunTests:
    def __init__(self):
        self.__questions_ctrl = QuestionsController()
        self.__repo = Repository()

    def run_questions(self):
        assert self.__questions_ctrl.quiz_questions_args_to_list(
            [[123, "test", "t1", "t2", "t3", "t1", "easy"]])
        assert self.__questions_ctrl.add(
            ["123", "test", "t1", "t2", "t3", "t1", "easy"], True) == True
        assert QuestionValidator.validate_question_id(
            self.__questions_ctrl.get_all_questions(), 123, []) == False

    def run_repository(self):
        assert self.__repo.size() == 0
        question = Question(123, "test", "t1", "t2", "t3", "t1", "easy")
        self.__repo.add(question)
        assert self.__repo.size() == 1
        assert self.__repo.get_new_list() == [question]
        self.__repo.clear()
        assert self.__repo.size() == 0

    def run_arguments(self):
        assert ArgumentsValidator.validate_create_quiz(
            ["easy", "6", "file.txt"]) == True

        should_be_true = False
        try:
            assert ArgumentsValidator.validate_create_quiz(
                ["asdads", "128", "file.txt"]) == False
        except Exception as e:
            should_be_true = True

        assert should_be_true == True

        assert ArgumentsValidator.validate_add_arguments(
            ["123", "text", "a1", "a2", "a3", "a2", "hard"]) == True
        assert ArgumentsValidator.validate_add_arguments(
            ["1", "iasasaa a a s", "answer 1", "a    2", "a3", "a3",
             "easy"]) == True
        assert ArgumentsValidator.validate_add_arguments([
            "1234", "kakkasd??asda?a.sda?", "a1", "a2 3 3", "a3", "a3",
            "medium"
        ]) == True

        should_be_true = False
        try:
            assert ArgumentsValidator.validate_add_arguments(
                ["123", "text", "a1", "a2", "a3", "a2", "hardz"]) == False
            assert ArgumentsValidator.validate_add_arguments(
                ["93", "spaces s s s s   ss", "a1", "a2", "a3", "a2",
                 "asdaa"]) == True
        except Exception as e:
            should_be_true = True

        assert should_be_true == True

    def run(self):
        self.run_questions()
        self.run_repository()
        self.run_arguments()

        self.__questions_ctrl.clear_repo()
Exemple #10
0
from repositories.repository_json import RepositoryJSON
from models.person import Person
from models.activity import Activity
from services.person_service import PersonService
from services.activity_service import ActivityService, ActivityServiceError
from data.person_data import get_random_name, get_random_phone_number
from data.activity_data import get_random_date, get_random_time, get_random_description
from settings import Settings

from ui import UI

if __name__ == '__main__':
    settings = Settings()

    if settings.repository == 'inmemory':
        person_repo = Repository()
        activity_repo = Repository()

    elif settings.repository == 'text':
        person_repo = RepositoryText()
        activity_repo = RepositoryText()

    elif settings.repository == 'binary':
        person_repo = RepositoryBinary()
        activity_repo = RepositoryBinary()

    elif settings.repository == 'json':
        person_repo = RepositoryJSON()
        activity_repo = RepositoryJSON()

    else:
 def __init__(self):
     self.__repo = Repository()
class QuestionsController:
    def __init__(self):
        self.__repo = Repository()

    def add(self, args, from_file=False):
        '''
        :param args: the 7 arguments of a Questions provided as a list
        :param from_file: if True, when we read the questions from the master question list, we won't dump them again in the file, only if we add the questions from the program
        :return: True, or raises an Exception
        '''

        id = int(args[0])

        if QuestionValidator.validate_question_id(self.__repo.get_new_list(),
                                                  id, args):
            question = Question(id, args[1], args[2], args[3], args[4],
                                args[5], args[6])
            self.__repo.add(question)

            # Don't dump the same questions again when reading from file
            if not from_file:
                FileController.dump_question_to_list(
                    "master_question_list.txt", question)

            return True
        else:
            raise Exception("The ID of the question must be unique!")

    def quiz_questions_args_to_list(self, questions):
        result = []
        for args in questions:
            result.append(
                Question(int(args[0]), args[1], args[2], args[3], args[4],
                         args[5], args[6]))

        return result

    def add_questions(self, questions):
        '''
        :param questions: Add multiple questions at once, provided as a list of lists of arguments of the class Question
        :return: None
        '''

        for question in questions:
            self.add(question, True)

    def get_questions(self, difficulty, no_of_questions):
        '''
        :param difficulty: the difficulty that we want most of our questions from the quiz to be
        :param no_of_questions: the number of questions the quiz will contain
        :return: the sorted questions list (sorted by difficulty in increasing order)
        '''

        questions_with_needed_difficulty = 0
        question_list = self.__repo.get_new_list()
        quiz_list = []
        i = 0
        while i < len(question_list):
            if question_list[i].get_difficulty() == difficulty:
                questions_with_needed_difficulty += 1

                # append the question to the quiz question list
                quiz_list.append(question_list[i])

                # remove the selected questions from the question list
                question_list.pop(i)

                if len(quiz_list) == no_of_questions:
                    break
            else:
                i += 1

        if questions_with_needed_difficulty < no_of_questions // 2:
            raise Exception(
                "Not enough {0} questions found in the master question list!".
                format(difficulty))

        if len(quiz_list) == no_of_questions:
            return self.sort_by_difficulty(quiz_list)

        i = 0
        while i < len(question_list):
            quiz_list.append(question_list[i])

            if len(quiz_list) == no_of_questions:
                return self.sort_by_difficulty(quiz_list)

            i += 1

    def sort_by_difficulty(self, questions):
        '''
        :param questions: list of objects of class Question
        :return: the sorted list in increasing order of the difficulty
        '''
        '''
        # mai trebuia return doar?

        for i in range(0, len(questions) - 1):
            for j in range(i + 1 , len(questions)):
                print("i + " + str(i)  + questions[i].get_text())
                print("j + " + str(j) + questions[j].get_text())
                if questions[i].get_difficulty() == "medium" and questions[j].get_difficulty() == "easy":
                    questions[i], questions[j] = questions[j], questions[i]
                elif questions[i].get_difficulty() == "hard" and (questions[j].get_difficulty() == "easy" or questions[j].get_difficulty() == "medium"):
                    questions[i], questions[j] = questions[j], questions[i]
        '''

        # Optimized bubble sort :D
        done = False
        n = len(questions) - 1

        while not done:
            done = True
            for i in range(0, n):
                if questions[i].get_difficulty == "medium" and questions[
                        i + 1].get_difficulty == "easy":
                    questions[i], questions[i + 1] = questions[i +
                                                               1], questions[i]
                    done = False
                elif questions[i].get_difficulty() == "hard" and (
                        questions[i + 1].get_difficulty() == "easy"
                        or questions[i + 1].get_difficulty() == "medium"):
                    questions[i], questions[i + 1] = questions[i +
                                                               1], questions[i]
                    done = False
            n -= 1

        return questions

    def get_all_questions(self):
        return self.__repo.get_new_list()

    def clear_repo(self):
        self.__repo.clear()