From 7b680430601b53f057fe0ee80e78d34affe3dd12 Mon Sep 17 00:00:00 2001 From: yaaqob <3237084594@qq.com> Date: Mon, 27 Nov 2023 10:40:35 +0800 Subject: [PATCH 1/3] Fixed Bug418 --- Script.php | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/Script.php b/Script.php index c0bfd7e..537b668 100644 --- a/Script.php +++ b/Script.php @@ -913,18 +913,32 @@ if (!empty($_GET["ignoreremarking"])) { #Assign TA if (!empty($_GET["assignTA"])) { - $id = mysqli_real_escape_string($con, $_GET["id"]); $ta = mysqli_real_escape_string($con, $_GET["ta"]); - $sql = "INSERT INTO `course_ta`(`Course_ID`, `TA`) VALUES ('$id','$ta')"; + // Check if the TA is already assigned to the course + $check_sql = "SELECT * FROM `course_ta` WHERE `Course_ID`='$id' AND `TA`='$ta'"; + $check_result = $con->query($check_sql); - if ($con->query($sql) === TRUE) { - - $_SESSION["info_Admin_Courses"] = $type . " Course TA Assigned "; - header("Location: Admin.php"); + if ($check_result->num_rows > 0) { + // Alert user about the duplicate assignment + echo ""; } else { - echo "Error: " . $sql . "
" . $con->error; + // Proceed with the TA assignment + $sql = "INSERT INTO `course_ta`(`Course_ID`, `TA`) VALUES ('$id','$ta')"; + + if ($con->query($sql) === TRUE) { + $_SESSION["info_Admin_Courses"] = $type . " Course TA Assigned "; + header("Location: Admin.php"); + } else { + echo ""; + } } } From cf30889bdd1b0949c2fa63d6e714f0bbd282e4c8 Mon Sep 17 00:00:00 2001 From: yaaqob <3237084594@qq.com> Date: Mon, 4 Dec 2023 12:30:38 +0800 Subject: [PATCH 2/3] removed punctuations from sql statement, and added MPIANA selenium test case --- Script.php | 4 +- test/SeleniumMpiana/assign_ta_test.py | 65 +++++++++++++++++++++++++++ test/SeleniumMpiana/test_results.txt | 2 + 3 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 test/SeleniumMpiana/assign_ta_test.py create mode 100644 test/SeleniumMpiana/test_results.txt diff --git a/Script.php b/Script.php index 537b668..b1488be 100644 --- a/Script.php +++ b/Script.php @@ -917,7 +917,7 @@ if (!empty($_GET["assignTA"])) { $ta = mysqli_real_escape_string($con, $_GET["ta"]); // Check if the TA is already assigned to the course - $check_sql = "SELECT * FROM `course_ta` WHERE `Course_ID`='$id' AND `TA`='$ta'"; + $check_sql = "SELECT * FROM course_ta WHERE Course_ID='$id' AND TA='$ta'"; $check_result = $con->query($check_sql); if ($check_result->num_rows > 0) { @@ -928,7 +928,7 @@ if (!empty($_GET["assignTA"])) { "; } else { // Proceed with the TA assignment - $sql = "INSERT INTO `course_ta`(`Course_ID`, `TA`) VALUES ('$id','$ta')"; + $sql = "INSERT INTO course_ta(Course_ID, TA) VALUES ('$id','$ta')"; if ($con->query($sql) === TRUE) { $_SESSION["info_Admin_Courses"] = $type . " Course TA Assigned "; diff --git a/test/SeleniumMpiana/assign_ta_test.py b/test/SeleniumMpiana/assign_ta_test.py new file mode 100644 index 0000000..11b6285 --- /dev/null +++ b/test/SeleniumMpiana/assign_ta_test.py @@ -0,0 +1,65 @@ +import pytest +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import UnexpectedAlertPresentException + +# New instance of the Chrome driver +driver = webdriver.Chrome() + +# Open the admin url +driver.get("http://localhost/itech/lrr/Admin.php") + +def assign_ta(driver, course_name, ta_name): + course_dropdown = driver.find_element('id', 'courseDropdown') + course_dropdown.click() + selected_course_option = WebDriverWait(driver, 1200).until( + EC.element_to_be_clickable((By.XPATH, f"//option[text()='{course_name}']")) + ) + selected_course_option.click() + + # Select the TA + ta_dropdown = driver.find_element('id', 'taDropdown') + ta_dropdown.click() + + # Check if ta_name is not null before selecting + if ta_name: + selected_ta_option = WebDriverWait(driver, 1200).until( + EC.element_to_be_clickable((By.XPATH, f"//option[text()='{ta_name}']")) + ) + selected_ta_option.click() + + # Click the Assign button + assign_button = driver.find_element('id', 'assignButton') + assign_button.click() + + # Use WebDriverWait for more reliable alert handling + try: + alert = WebDriverWait(driver, 1200).until(EC.alert_is_present()) + alert_text = alert.text + alert.accept() + return alert_text + except UnexpectedAlertPresentException: + return None + +# Generate all combinations of courses and TAs +courses = ["Python", "computer", "testing"] +tas = ["MPIANA", "KABWANGA", "mark"] + +@pytest.mark.parametrize("course_name, ta_name", [(course, ta) for course in courses for ta in tas]) +def assign_ta_test(course_name, ta_name): + alert_text = assign_ta(driver, course_name, ta_name) + + try: + assert "Success" in alert_text or "Error" in alert_text + result = "Passed" + except AssertionError: + result = "Failed" + + # Write the result to the text file + with open('test_results.txt', 'a') as result_file: + result_file.write(f"Course={course_name}, TA={ta_name}, Result={result}, Alert={alert_text}\n") + +# Close the browser window +driver.quit() diff --git a/test/SeleniumMpiana/test_results.txt b/test/SeleniumMpiana/test_results.txt new file mode 100644 index 0000000..139597f --- /dev/null +++ b/test/SeleniumMpiana/test_results.txt @@ -0,0 +1,2 @@ + + From cd7ece13bca5541db88ebdc21b6073c04d260705 Mon Sep 17 00:00:00 2001 From: yaaqob <3237084594@qq.com> Date: Wed, 27 Dec 2023 00:08:41 +0800 Subject: [PATCH 3/3] MPIANA updated test script test_assign_ta.py --- test/SeleniumMpiana/assign_ta_test.py | 65 -------------- test/SeleniumMpiana/test_assign_ta.py | 125 ++++++++++++++++++++++++++ test/SeleniumMpiana/test_results.txt | 4 +- 3 files changed, 127 insertions(+), 67 deletions(-) delete mode 100644 test/SeleniumMpiana/assign_ta_test.py create mode 100644 test/SeleniumMpiana/test_assign_ta.py diff --git a/test/SeleniumMpiana/assign_ta_test.py b/test/SeleniumMpiana/assign_ta_test.py deleted file mode 100644 index 11b6285..0000000 --- a/test/SeleniumMpiana/assign_ta_test.py +++ /dev/null @@ -1,65 +0,0 @@ -import pytest -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.common.exceptions import UnexpectedAlertPresentException - -# New instance of the Chrome driver -driver = webdriver.Chrome() - -# Open the admin url -driver.get("http://localhost/itech/lrr/Admin.php") - -def assign_ta(driver, course_name, ta_name): - course_dropdown = driver.find_element('id', 'courseDropdown') - course_dropdown.click() - selected_course_option = WebDriverWait(driver, 1200).until( - EC.element_to_be_clickable((By.XPATH, f"//option[text()='{course_name}']")) - ) - selected_course_option.click() - - # Select the TA - ta_dropdown = driver.find_element('id', 'taDropdown') - ta_dropdown.click() - - # Check if ta_name is not null before selecting - if ta_name: - selected_ta_option = WebDriverWait(driver, 1200).until( - EC.element_to_be_clickable((By.XPATH, f"//option[text()='{ta_name}']")) - ) - selected_ta_option.click() - - # Click the Assign button - assign_button = driver.find_element('id', 'assignButton') - assign_button.click() - - # Use WebDriverWait for more reliable alert handling - try: - alert = WebDriverWait(driver, 1200).until(EC.alert_is_present()) - alert_text = alert.text - alert.accept() - return alert_text - except UnexpectedAlertPresentException: - return None - -# Generate all combinations of courses and TAs -courses = ["Python", "computer", "testing"] -tas = ["MPIANA", "KABWANGA", "mark"] - -@pytest.mark.parametrize("course_name, ta_name", [(course, ta) for course in courses for ta in tas]) -def assign_ta_test(course_name, ta_name): - alert_text = assign_ta(driver, course_name, ta_name) - - try: - assert "Success" in alert_text or "Error" in alert_text - result = "Passed" - except AssertionError: - result = "Failed" - - # Write the result to the text file - with open('test_results.txt', 'a') as result_file: - result_file.write(f"Course={course_name}, TA={ta_name}, Result={result}, Alert={alert_text}\n") - -# Close the browser window -driver.quit() diff --git a/test/SeleniumMpiana/test_assign_ta.py b/test/SeleniumMpiana/test_assign_ta.py new file mode 100644 index 0000000..50d9e49 --- /dev/null +++ b/test/SeleniumMpiana/test_assign_ta.py @@ -0,0 +1,125 @@ +import pytest +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import Select +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import NoSuchElementException, UnexpectedAlertPresentException +from selenium.webdriver.common.keys import Keys + +# New instance of the Chrome driver +driver = webdriver.Chrome() + +# Open the login page +driver.get("http://localhost/lrr/admin.php") + +# Credentials for login +username = "lanhui@qq.com" +password = "admin123" + +def login(driver, username, password): + try: + # Fill in the login form + user_input = WebDriverWait(driver, 10).until( + EC.element_to_be_clickable((By.ID, "user_name")) + ) + user_input.send_keys(username) + + password_input = WebDriverWait(driver, 10).until( + EC.element_to_be_clickable((By.ID, "user_password")) + ) + password_input.send_keys(password) + + # Click the login button + login_button = WebDriverWait(driver, 10).until( + EC.element_to_be_clickable((By.ID, "login_btn")) + ) + login_button.click() + + # Wait for the admin_tab to become clickable + admin_tab = WebDriverWait(driver, 10).until( + EC.element_to_be_clickable((By.ID, "admin_tab")) + ) + + return True + + except (NoSuchElementException, UnexpectedAlertPresentException) as e: + return f"Error: {str(e)}" + +# Call the login function +login_result = login(driver, username, password) + +# Click on admin_tab after successful login +if login_result: + admin_tab = WebDriverWait(driver, 10).until( + EC.element_to_be_clickable((By.ID, "admin_tab")) + ) + admin_tab.click() + + # Optionally, wait for the Admin.php page to load + admin_url = "http://localhost/lrr/Admin.php" + WebDriverWait(driver, 15).until( + EC.url_to_be(admin_url) + ) + +print(login_result) + +def assign_ta(driver, course_id, ta_name): + try: + # Locate the form and select the TA + ta_form = WebDriverWait(driver, 15).until( + EC.presence_of_element_located((By.XPATH, f"//form[@id='drop_menu_form_{course_id}']")) + ) + + ta_dropdown = Select(ta_form.find_element(By.XPATH, ".//select[@name='ta']")) + ta_dropdown.select_by_visible_text(ta_name) + + # Submit the form using JavaScript + driver.execute_script("arguments[0].submit();", ta_form) + + # Wait for an expected alert and accept it + WebDriverWait(driver, 10).until(EC.alert_is_present()) + alert = driver.switch_to.alert + alert_text = alert.text + alert.accept() + + return alert_text + + except UnexpectedAlertPresentException as e: + # Unexpected alert, handle it as an error + return f"Error: Unexpected alert - {str(e)}" + + except (NoSuchElementException, Exception) as e: + return f"Error: {str(e)}" + + + +# The courses and test cases to test +courses_to_test = [ + {"id": 1, "name": "Teecloudy - Ashly Course Testing", "ta_assignments": {"JAMES": "Ta assigned successfully."}}, + {"id": 2, "name": "P.M2019 - Project Management", "ta_assignments": {"JAMES": "The selected TA is already assigned to this course."}}, +] + +# Execute the tests +@pytest.mark.parametrize("course", courses_to_test) +def test_assign_ta(course): + for ta_name, expected_result in course["ta_assignments"].items(): + alert_text = assign_ta(driver, course["id"], ta_name) + # ----- ---- Print the raw strings for debugging ----- ---- --- + test_case_number = courses_to_test.index(course) + 1 + print(f"Test Case {test_case_number} - {course['name']} -- {ta_name}: Expected Result={expected_result}, Actual Alert Text={alert_text}") + + # Determine the result based on the comparison + if expected_result.lower() in alert_text.lower(): + result = "Passed" + else: + result = "Failed" + + # Write the result to a test file with test case number --- + with open("test_results.txt", "a") as file: + file.write(f"Test Case {test_case_number} - {course['name']} -- {ta_name}: Result={result}, Expected Result={expected_result}, Actual Alert Text={alert_text}\n") + + # Print the result to the console --- + print(f"Test Case {test_case_number} - {course['name']} -- {ta_name}: Result={result}, Expected Result={expected_result}, Actual Alert Text={alert_text}") + + assert result == "Passed", f"Test Case {test_case_number} failed: Result={result}, Expected Result={expected_result}, Actual Alert Text={alert_text}" diff --git a/test/SeleniumMpiana/test_results.txt b/test/SeleniumMpiana/test_results.txt index 139597f..4f55332 100644 --- a/test/SeleniumMpiana/test_results.txt +++ b/test/SeleniumMpiana/test_results.txt @@ -1,2 +1,2 @@ - - +Test Case 1 - Teecloudy - Ashly Course Testing -- JAMES: Result=Passed, Expected Result=Ta assigned successfully., Actual Alert Text=TA assigned successfully. +Test Case 2 - P.M2019 - Project Management -- DIEGO: Result=Passed, Expected Result=The selected TA is already assigned to this course., Actual Alert Text=The selected TA is already assigned to this course.