This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git


The following commit(s) were added to refs/heads/main by this push:
     new 7beeaff  Add a browser test to ensure that new projects can be derived
7beeaff is described below

commit 7beeaff5fb062815173152d2c3f94d868ac5ad42
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Apr 14 16:36:22 2025 +0100

    Add a browser test to ensure that new projects can be derived
---
 playwright/test.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/playwright/test.py b/playwright/test.py
index f278e0c..1b5af81 100644
--- a/playwright/test.py
+++ b/playwright/test.py
@@ -392,6 +392,7 @@ def test_login(page: sync_api.Page, credentials: 
Credentials) -> None:
 def test_projects(page: sync_api.Page) -> None:
     test_projects_01_update(page)
     test_projects_02_check_directory(page)
+    test_projects_03_add_project(page)
 
 
 def test_projects_01_update(page: sync_api.Page) -> None:
@@ -426,7 +427,80 @@ def test_projects_02_check_directory(page: sync_api.Page) 
-> None:
     logging.info("Apache Tooling project card found successfully")
 
 
+def test_projects_03_add_project(page: sync_api.Page) -> None:
+    project_name = "Apache Tooling Test Example"
+    project_label = "tooling-test-example"
+    base_project_option_label = "Apache Tooling"
+    derived_project_input_value = "Test Example"
+
+    logging.info("Navigating to the add derived project page")
+    go_to_path(page, "/project/add")
+    logging.info("Add derived project page loaded")
+
+    logging.info(f"Selecting base project '{base_project_option_label}'")
+    
page.locator('select[name="project_name"]').select_option(label=base_project_option_label)
+
+    logging.info(f"Filling derived project name 
'{derived_project_input_value}'")
+    
page.locator('input[name="derived_project_name"]').fill(derived_project_input_value)
+
+    logging.info("Submitting the add derived project form")
+    submit_button_locator = page.locator('input[type="submit"][value="Add 
derived project"]')
+    sync_api.expect(submit_button_locator).to_be_enabled()
+    submit_button_locator.click()
+
+    logging.info(f"Waiting for navigation to project view page for 
{project_label}")
+    wait_for_path(page, f"/projects/{project_label}")
+    logging.info("Navigated to project view page successfully")
+
+    logging.info(f"Checking for project title '{project_name}' on view page")
+    title_locator = page.locator(f'h1:has-text("{project_name}")')
+    sync_api.expect(title_locator).to_be_visible()
+    logging.info("Project title confirmed on view page")
+
+
 def test_tidy_up(page: sync_api.Page) -> None:
+    test_tidy_up_release(page)
+    test_tidy_up_project(page)
+
+
+def test_tidy_up_project(page: sync_api.Page) -> None:
+    project_name = "Apache Tooling Test Example"
+    logging.info(f"Checking for project '{project_name}' at /projects")
+    go_to_path(page, "/projects")
+    logging.info("Project directory page loaded")
+
+    h3_locator = page.get_by_text(project_name, exact=True)
+    example_card_locator = 
h3_locator.locator("xpath=ancestor::div[contains(@class, 'project-card')]")
+
+    if example_card_locator.is_visible():
+        logging.info(f"Found project card for '{project_name}'")
+        delete_button_locator = example_card_locator.get_by_role("button", 
name="Delete Project")
+
+        if delete_button_locator.is_visible():
+            logging.info(f"Delete button found for '{project_name}', 
proceeding with deletion")
+
+            def handle_dialog(dialog: sync_api.Dialog) -> None:
+                logging.info(f"Accepting dialog: {dialog.message}")
+                dialog.accept()
+
+            page.once("dialog", handle_dialog)
+            delete_button_locator.click()
+
+            logging.info("Waiting for navigation back to /projects after 
deletion")
+            wait_for_path(page, "/projects")
+
+            logging.info(f"Verifying project card for '{project_name}' is no 
longer visible")
+            h3_locator_check = page.get_by_text(project_name, exact=True)
+            card_locator_check = 
h3_locator_check.locator("xpath=ancestor::div[contains(@class, 
'project-card')]")
+            sync_api.expect(card_locator_check).not_to_be_visible()
+            logging.info(f"Project '{project_name}' deleted successfully")
+        else:
+            logging.info(f"Delete button not visible for '{project_name}', no 
deletion performed")
+    else:
+        logging.info(f"Project card for '{project_name}' not found, no 
deletion needed")
+
+
+def test_tidy_up_release(page: sync_api.Page) -> None:
     logging.info("Navigating to the admin delete release page")
     go_to_path(page, "/admin/delete-release")
     logging.info("Admin delete release page loaded")


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to