import pytest import re import time from pathlib import Path from tests.lib.common_test_utils import ( GiteaAPIClient, ) # ============================================================================= # TEST CASES # ============================================================================= @pytest.mark.t001 @pytest.mark.xfail(reason="review pending label is not applied") def test_001_project_pr_labels(label_env, staging_bot_client): """ Test scenario: 1. Setup custom workflow.config with Labels: { "StagingAuto": "staging/Backlog", "ReviewPending": "review/Pending" }. 2. Create a package PR in 'label-test' branch. 3. Make sure the workflow-pr service created related project PR in 'label-test' branch. 4. Wait for the project PR to have the label "staging/Backlog". 5. Post approval from autogits_obs_staging_bot. 6. Check that the project PR gets the label "review/Pending". """ gitea_env, test_full_repo_name, branch_name = label_env # 1. Create a package PR diff = """diff --git a/label_test_fixture.txt b/label_test_fixture.txt new file mode 100644 index 0000000..e69de29 """ print(f"--- Creating package PR in mypool/pkgA on branch {branch_name} ---") package_pr = gitea_env.create_gitea_pr("mypool/pkgA", diff, "Test Labels Fixture", False, base_branch=branch_name) package_pr_number = package_pr["number"] print(f"Created package PR mypool/pkgA#{package_pr_number}") # 2. Make sure the workflow-pr service created related project PR project_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", package_pr_number) assert project_pr_number is not None, "Workflow bot did not create a project PR." print(f"Found project PR: myproducts/mySLFO#{project_pr_number}") # 3. Wait for the project PR to have the label "staging/Backlog" print(f"Checking for 'staging/Backlog' label on project PR myproducts/mySLFO#{project_pr_number}...") backlog_label_found = False expected_backlog_label = "staging/Backlog" for _ in range(20): project_pr_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number) labels = project_pr_details.get("labels", []) label_names = [l["name"] for l in labels] if expected_backlog_label in label_names: backlog_label_found = True break time.sleep(1) assert backlog_label_found, f"Project PR myproducts/mySLFO#{project_pr_number} does not have the expected label '{expected_backlog_label}'." print(f"Project PR myproducts/mySLFO#{project_pr_number} has the expected label '{expected_backlog_label}'.") # 4. Post approval from autogits_obs_staging_bot print(f"--- Posting approval from autogits_obs_staging_bot on project PR myproducts/mySLFO#{project_pr_number} ---") staging_bot_client.create_review("myproducts/mySLFO", project_pr_number, event="APPROVED", body="Staging OK") # 5. Check that the project PR has the label "review/Pending" print(f"Checking for 'review/Pending' label on project PR myproducts/mySLFO#{project_pr_number}...") pending_label_found = False expected_pending_label = "review/Pending" for _ in range(20): project_pr_details = gitea_env.get_pr_details("myproducts/mySLFO", project_pr_number) labels = project_pr_details.get("labels", []) label_names = [l["name"] for l in labels] print(f"Current labels: {label_names}") if expected_pending_label in label_names: pending_label_found = True break time.sleep(1) assert pending_label_found, f"Project PR myproducts/mySLFO#{project_pr_number} does not have the expected label '{expected_pending_label}'." print(f"Project PR myproducts/mySLFO#{project_pr_number} has the expected label '{expected_pending_label}'.")