Esempio n. 1
0
    def next_question(self, row_id, question, right_answers, user_answers,
                      start_time, firsts):
        """Sets the score variable to 1 if right_answers and user_answers are equally.
            Creates the time_track_variable to save how long user took to answer a question.
            Adds or subtracts firsts variable accordingly to the score(add if score=0 add subtract if score=1).
            Checks if any firsts variable is lower than one and deletes that row if true.
            Passes all variables to the selected_results table.
            Then call the start_testing function again.
        """
        try:
            if right_answers == user_answers:
                score = 1
            else:
                score = 0
            end_time = time.time()
            time_track = round(((end_time - start_time) / 60), 2)
            results = Results(row_id, question, right_answers, user_answers,
                              score, time_track, firsts)
            results_list = [results]

            sql_m = SqlManager()
            sql_m.sql_insert_new_results(
                results_list,
                SettingVariables().selected_results_table)
            if score == 1:
                sql_m.sql_subtract_firsts(
                    row_id,
                    SettingVariables().selected_database_copy)
            elif score == 0:
                sql_m.sql_add_firsts(row_id,
                                     SettingVariables().selected_database_copy)

            if score == 1:
                firsts = sql_m.sql_get_row(
                    SettingVariables().selected_database_copy,
                    row_id)[0].firsts

            if firsts < 1:
                sql_m.sql_delete_row(SettingVariables().selected_database_copy,
                                     row_id)
        except IndexError as ie:
            print(str(ie) + " in next_question")
            print(
                "Possible reason might be that the database itself is empty or you choose an empty database_copy"
            )

        try:
            self.testing_top.destroy()
            self.start_testing(SettingVariables().selected_database_copy)
        except Exception:
            print("Another exception in next_question occurred")
Esempio n. 2
0
    def test_sql_insert_new_results(self):
        """Creates a database and results tables, inserts a row into the database table
        and creates a database copy of the database table. Queries last row_id + 1 and creates a Results object to
        pass it to the sql_insert_new_results. Then queries last row of the results table and compares it
        to the variables initially passed.
        """
        test_obj = TestVariables()
        selected_database = test_obj.selected_database
        selected_results_table = test_obj.selected_results_table
        selected_database_copy = test_obj.selected_database_copy
        self.setUpDatabase()
        self.setUpResultsTable()
        self.setUpInsertRow(selected_database)
        self.setUpDatabaseCopy()
        answers_right = test_obj.right_answers
        user_answers_right = test_obj.user_answers_right
        user_answers_wrong = test_obj.user_answers_wrong
        row_id = self.setUpRowID("database_table_db_db")
        results = self.setUpResultsObject(row_id, answers_right, user_answers_right, 1, firsts=2)
        sql_m = SqlManager()
        sql_m.sql_insert_new_results(results, selected_results_table)
        results_objects_list = sql_m.sql_get_results_content(selected_results_table)
        results_vars_list = results_objects_list[-1]
        results_vars_query = [results_vars_list.row_id,
                              results_vars_list.question,
                              results_vars_list.right_answers,
                              results_vars_list.user_answers,
                              results_vars_list.score,
                              results_vars_list.time_track,
                              results_vars_list.firsts]

        results_should_right = [row_id, "question", answers_right, user_answers_right, 1, 0.5, 2]
        results_should_wrong = [row_id, "question", answers_right, user_answers_wrong, 1, 0.5, 2]
        self.assertEqual(results_should_right, results_vars_query)
        self.assertNotEqual(results_should_wrong, results_vars_query)
        print("test_sql_insert_new_results: successful")
        self.tearDownTable(selected_database)
        self.tearDownTable(selected_results_table)
        self.tearDownTable(selected_database_copy)