- Add TC-MERGE-008 to 013 for testing MergeMode of workflow-pr - Synchronize integration/test-plan.md with the actual test implementations
122 lines
4.7 KiB
Python
Executable File
122 lines
4.7 KiB
Python
Executable File
import pytest
|
|
import re
|
|
import time
|
|
import subprocess
|
|
import requests
|
|
from pathlib import Path
|
|
from tests.lib.common_test_utils import (
|
|
GiteaAPIClient,
|
|
mock_build_result,
|
|
)
|
|
|
|
# =============================================================================
|
|
# TEST CASES
|
|
# =============================================================================
|
|
|
|
|
|
def test_pr_workflow_succeeded(staging_main_env, mock_build_result):
|
|
"""End-to-end test for a successful PR workflow."""
|
|
gitea_env, test_full_repo_name, merge_branch_name = staging_main_env
|
|
diff = "diff --git a/test.txt b/test.txt\nnew file mode 100644\nindex 0000000..e69de29\n"
|
|
pr = gitea_env.create_gitea_pr("mypool/pkgA", diff, "Test PR - should succeed", False, base_branch=merge_branch_name)
|
|
initial_pr_number = pr["number"]
|
|
|
|
compose_dir = Path(__file__).parent.parent
|
|
|
|
forwarded_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", initial_pr_number)
|
|
assert (
|
|
forwarded_pr_number is not None
|
|
), "Workflow bot did not create a project PR."
|
|
print(f"Found forwarded PR: myproducts/mySLFO #{forwarded_pr_number}")
|
|
|
|
print(f"Polling myproducts/mySLFO PR #{forwarded_pr_number} for reviewer assignment...")
|
|
reviewer_added = False
|
|
for _ in range(15):
|
|
time.sleep(1)
|
|
pr_details = gitea_env.get_pr_details("myproducts/mySLFO", forwarded_pr_number)
|
|
if any(
|
|
r.get("login") == "autogits_obs_staging_bot"
|
|
for r in pr_details.get("requested_reviewers", [])
|
|
):
|
|
reviewer_added = True
|
|
break
|
|
assert reviewer_added, "Staging bot was not added as a reviewer."
|
|
print("Staging bot has been added as a reviewer.")
|
|
|
|
mock_build_result(package_name="pkgA", code="succeeded")
|
|
|
|
print("Restarting obs-staging-bot...")
|
|
subprocess.run(
|
|
["podman-compose", "restart", "obs-staging-bot"],
|
|
cwd=compose_dir,
|
|
check=True,
|
|
capture_output=True,
|
|
)
|
|
|
|
print(f"Polling myproducts/mySLFO PR #{forwarded_pr_number} for final status...")
|
|
status_comment_found = False
|
|
for _ in range(20):
|
|
time.sleep(1)
|
|
timeline_events = gitea_env.get_timeline_events("myproducts/mySLFO", forwarded_pr_number)
|
|
for event in timeline_events:
|
|
print(event.get("body", "not a body"))
|
|
if event.get("body") and "successful" in event["body"]:
|
|
status_comment_found = True
|
|
break
|
|
if status_comment_found:
|
|
break
|
|
assert status_comment_found, "Staging bot did not post a 'successful' comment."
|
|
|
|
|
|
def test_pr_workflow_failed(staging_main_env, mock_build_result):
|
|
"""End-to-end test for a failed PR workflow."""
|
|
gitea_env, test_full_repo_name, merge_branch_name = staging_main_env
|
|
diff = "diff --git a/another_test.txt b/another_test.txt\nnew file mode 100644\nindex 0000000..e69de29\n"
|
|
pr = gitea_env.create_gitea_pr("mypool/pkgA", diff, "Test PR - should fail", False, base_branch=merge_branch_name)
|
|
initial_pr_number = pr["number"]
|
|
|
|
compose_dir = Path(__file__).parent.parent
|
|
|
|
forwarded_pr_number = gitea_env.wait_for_project_pr("mypool/pkgA", initial_pr_number)
|
|
assert (
|
|
forwarded_pr_number is not None
|
|
), "Workflow bot did not create a project PR."
|
|
print(f"Found forwarded PR: myproducts/mySLFO #{forwarded_pr_number}")
|
|
|
|
print(f"Polling myproducts/mySLFO PR #{forwarded_pr_number} for reviewer assignment...")
|
|
reviewer_added = False
|
|
for _ in range(15):
|
|
time.sleep(1)
|
|
pr_details = gitea_env.get_pr_details("myproducts/mySLFO", forwarded_pr_number)
|
|
if any(
|
|
r.get("login") == "autogits_obs_staging_bot"
|
|
for r in pr_details.get("requested_reviewers", [])
|
|
):
|
|
reviewer_added = True
|
|
break
|
|
assert reviewer_added, "Staging bot was not added as a reviewer."
|
|
print("Staging bot has been added as a reviewer.")
|
|
|
|
mock_build_result(package_name="pkgA", code="failed")
|
|
|
|
print("Restarting obs-staging-bot...")
|
|
subprocess.run(
|
|
["podman-compose", "restart", "obs-staging-bot"],
|
|
cwd=compose_dir,
|
|
check=True,
|
|
capture_output=True,
|
|
)
|
|
|
|
print(f"Polling myproducts/mySLFO PR #{forwarded_pr_number} for final status...")
|
|
status_comment_found = False
|
|
for _ in range(20):
|
|
time.sleep(1)
|
|
timeline_events = gitea_env.get_timeline_events("myproducts/mySLFO", forwarded_pr_number)
|
|
for event in timeline_events:
|
|
if event.get("body") and "failed" in event["body"]:
|
|
status_comment_found = True
|
|
break
|
|
if status_comment_found:
|
|
break
|
|
assert status_comment_found, "Staging bot did not post a 'failed' comment."
|