def test_save_learning_state():
    # This file will be empty
    fake_file = mock_open(read_data='{}')
    # Function open returns fake_file
    flexmock(builtins, open=fake_file)

    # MyVocabulary and LearningState is not saved
    flexmock(MyVocabulary, save_my_vocabulary=lambda: None)
    my_vocabulary = MyVocabulary()
    # Setting my_vocabulary.chosen_words
    my_vocabulary.chosen_words = {"koupit": "buy"}

    flexmock(LearningState, __del__=lambda: None)
    # Setting learning_state with my_vocabulary.chosen_words
    learning_state = LearningState(my_vocabulary)

    learning_state.save_learning_state()

    string = ''
    for call in fake_file.return_value.write.mock_calls:
        string += (call[1][0])

    assert string == '{"round_mistakes": 0,' \
                     ' "successful": 0,' \
                     ' "unsuccessful": 0,' \
                     ' "ordered_words": ["koupit"],' \
                     ' "words": {' \
                     '"koupit": {"value": "buy", "learned": false,' \
                     ' "round_mistakes": 0, "total_mistakes": 0}}}\n'
示例#2
0
def test_check_guessing_successfully(offered_word, answered_word):
    __mock()
    my_vocabulary = MyVocabulary()
    my_vocabulary.chosen_words = {
        "koupit": "buy",
        "být": "be",
        "postavit": "build"
    }

    learning_process = LearningProcess(LearningState(my_vocabulary))

    assert learning_process.check_guessing(offered_word, answered_word)
示例#3
0
def test_check_guessing_unsuccessfully(offered_word, answered_word):
    __mock()

    my_vocabulary = MyVocabulary()
    my_vocabulary.chosen_words = {
        "koupit": "buy",
        "být": "be",
        "postavit": "build"
    }

    flexmock(LearningState, __del__=lambda: None)
    learning_process = LearningProcess(LearningState(my_vocabulary))
    assert not learning_process.check_guessing(offered_word, answered_word)
def test_get_value(key, value):
    __mock()

    my_vocabulary = MyVocabulary()
    my_vocabulary.chosen_words = {
        "koupit": "buy",
        "být": "be",
        "postavit": "build"
    }

    learning_state = LearningState(my_vocabulary)
    learning_state.reset_learning_state()

    assert learning_state.get_value(key) == value
示例#5
0
def test_fail_counters(key):
    __mock()

    my_vocabulary = MyVocabulary()
    my_vocabulary.chosen_words = {
        "koupit": "buy",
        "být": "be",
        "postavit": "build"
    }

    learning_state = LearningState(my_vocabulary)
    total_m = learning_state.words[key]['total_mistakes']
    unsuccessful = learning_state.unsuccessful
    round_m = learning_state.round_mistakes

    learning_process = LearningProcess(learning_state)
    learning_process.increment_fail_counters(key)

    assert learning_state.words[key]['total_mistakes'] == total_m + 1
    assert learning_state.round_mistakes == round_m + 1
    assert learning_state.unsuccessful == unsuccessful + 1
示例#6
0
    def __init__(self, request):
        super().__init__(request)
        self.message = None
        self.offered_word = None
        self.answered_word = None
        self.is_done = False
        self.result = None
        self.successful = 0
        self.unsuccessful = 0

        self.my_vocabulary = MyVocabulary()
        self.learning_state = LearningState(self.my_vocabulary)
        self.learning_process = LearningProcess(self.learning_state)
示例#7
0
class AdminController(BaseController):
    """
    Class for administration of MY VOCABULARY (entering or deleting words).
    After each statement my vocabulary is saved.
    Instance attributes:
        * self.my_vocabulary: instance of the class MyVocabulary
        * self.message: message above input type text
        * self.message_mv: message above table of MY VOCABULARY
    """
    def __init__(self, request):
        super().__init__(request)
        self.my_vocabulary = MyVocabulary()
        self.message = None
        self.message_mv = None

    def process_add(self):
        """
        Processes what should happen when the user presses "add"
        (successful deletion and various situations of unsuccessful
        deletion).
        :return: None
        """

        required_word = self.get_required_word('word')

        # Nothing was entered
        if not required_word:
            self.message = "Enter some word."

        # Not in used dictionary
        elif not self.my_vocabulary.word_is_in_dictionary(required_word):
            self.message = "This word is not in used dictionary. " \
                           "Try adding another word."

        # Already in my vocabulary
        elif self.my_vocabulary.word_is_in_mv(required_word):
            self.message = "This word has been already added. " \
                           "Try adding another word."

        else:
            # Successful addition
            self.my_vocabulary.add_word(required_word)
            self.message = "The word has been successfully added."

    def process_delete_word(self):
        """
        Processes what should happen when the user presses "delete"
        (successfully deletion and various situations of unsuccessfully
        deletion).
        :return: None
        """

        required_word = self.get_required_word('word')

        # Nothing was entered
        if not required_word:
            self.message = "Enter some word."

        # Not in my_vocabulary.chosen_words
        elif not self.my_vocabulary.word_is_in_mv(required_word):
            self.message = "This word is not in MY VOCABULARY. " \
                           "Try deleting another word."

        else:
            # Successful deletion
            self.my_vocabulary.delete_word(required_word)
            self.message = "This word has been successfully deleted."

    def process_delete_words(self):
        """
        Processes what should happen when the user presses "delete_words"
        (successful deletion and various situations of unsuccessful
        deletion).
        :return: None
        """

        required_words = self.get_required_words()

        # Nothing was selected
        if not required_words:
            self.message_mv = "There are no selected words to delete."

        else:
            # Successfully deletion
            deleted = self.my_vocabulary.delete_words(required_words)
            self.message_mv = f"Number of successfully deleted words:" \
                              f" {deleted}"

    def handle_admin_controller(self):
        """
        Handles administration of MY VOCABULARY.
        :return: None
        """

        # The user pressed "Add word"
        if self.is_in_args('add'):
            self.process_add()

        # "Delete" submit button was pressed
        elif self.is_in_args('delete'):
            self.process_delete_word()

        # Some words were selected and submit button "Delete" was pressed
        elif self.is_in_args('delete_words'):
            self.process_delete_words()

        # No words in MY VOCABULARY
        if not self.message and not self.my_vocabulary.chosen_words:
            self.message = "MY VOCABULARY is empty. Enter some words."

    def prepare_render_template(self):
        """
        Returns render_template for admin_page.
        :return: str
        """

        return render_template('administration.html',
                               message=self.message,
                               message_mv=self.message_mv,
                               chosen_words=self.my_vocabulary.chosen_words)
示例#8
0
 def __init__(self, request):
     super().__init__(request)
     self.my_vocabulary = MyVocabulary()
     self.message = None
     self.message_mv = None
示例#9
0
def __prepare():
    return LearningState(MyVocabulary())
def __prepare():
    return MyVocabulary()
def test_create_mv():
    flexmock(builtins).should_receive('open').and_raise(FileNotFoundError)
    faked_vocabulary = MyVocabulary()
    assert faked_vocabulary.chosen_words == {}