Esempio n. 1
0
 def test_sql_subtract_firsts(self):
     """Creates a database table, inserts a row into it and creates a database copy of the database table.
     Queries last row_id, adds 1 to it and creates a Results object to pass it to the sql_insert_new_results. The
     firsts variable is subtracted by one with the sql_subtract_firsts function.
     Then queries the row with that row_id and checks that firsts value is minus 1.
     """
     test_obj = TestVariables()
     selected_database = test_obj.selected_database
     selected_database_copy = test_obj.selected_database_copy
     self.setUpDatabase()
     self.setUpInsertRow(selected_database)
     self.setUpDatabaseCopy()
     row_id = self.setUpRowID(selected_database_copy) - 1
     sql_m = SqlManager()
     new_question_obj_list = sql_m.sql_get_database_content(selected_database_copy)
     new_question_obj = new_question_obj_list[-1]
     firsts_before_update = new_question_obj.firsts
     sql_m.sql_subtract_firsts(row_id, selected_database_copy)
     new_question_obj_list = sql_m.sql_get_database_content(selected_database_copy)
     new_question_obj = new_question_obj_list[-1]
     firsts_after_update = new_question_obj.firsts
     firsts_should_right = 1
     self.assertEqual(firsts_should_right, firsts_after_update)
     self.assertNotEqual(firsts_before_update, firsts_after_update)
     print("test_sql_subtract_firsts: successful")
     self.tearDownTable(selected_database)
     self.tearDownTable(selected_database_copy)
Esempio n. 2
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")