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")
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)