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