118 lines
4.5 KiB
Python
Executable File
118 lines
4.5 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,
|
|
)
|
|
|
|
# =============================================================================
|
|
# TEST CASES
|
|
# =============================================================================
|
|
|
|
pytest.pr = None
|
|
pytest.pr_details = None
|
|
pytest.initial_pr_number = None
|
|
pytest.forwarded_pr_number = None
|
|
|
|
|
|
@pytest.mark.dependency()
|
|
def test_001_project_pr(gitea_env):
|
|
"""Forwarded PR correct title"""
|
|
diff = "diff --git a/another_test.txt b/another_test.txt\nnew file mode 100644\nindex 0000000..e69de29\n"
|
|
pytest.pr = gitea_env.create_gitea_pr("pool/pkgA", diff, "Test PR")
|
|
pytest.initial_pr_number = pytest.pr["number"]
|
|
time.sleep(5) # Give Gitea some time to process the PR and make the timeline available
|
|
|
|
compose_dir = Path(__file__).parent.parent
|
|
|
|
pytest.forwarded_pr_number = None
|
|
print(
|
|
f"Polling pool/pkgA PR #{pytest.initial_pr_number} timeline for forwarded PR event..."
|
|
)
|
|
# Instead of polling timeline, check if forwarded PR exists directly
|
|
for _ in range(20):
|
|
time.sleep(1)
|
|
timeline_events = gitea_env.get_timeline_events("pool/pkgA", pytest.initial_pr_number)
|
|
for event in timeline_events:
|
|
if event.get("type") == "pull_ref":
|
|
if not (ref_issue := event.get("ref_issue")):
|
|
continue
|
|
url_to_check = ref_issue.get("html_url", "")
|
|
match = re.search(r"products/SLFO/pulls/(\d+)", url_to_check)
|
|
if match:
|
|
pytest.forwarded_pr_number = match.group(1)
|
|
break
|
|
if pytest.forwarded_pr_number:
|
|
break
|
|
assert (
|
|
pytest.forwarded_pr_number is not None
|
|
), "Workflow bot did not create a forwarded PR."
|
|
pytest.pr_details = gitea_env.get_pr_details("products/SLFO", pytest.forwarded_pr_number)
|
|
assert (
|
|
pytest.pr_details["title"] == "Forwarded PRs: pkgA"
|
|
), "Forwarded PR correct title"
|
|
|
|
|
|
@pytest.mark.dependency(depends=["test_001_project_pr"])
|
|
def test_002_updated_project_pr(gitea_env):
|
|
"""Forwarded PR head is updated"""
|
|
diff = "diff --git a/another_test.txt b/another_test.txt\nnew file mode 100444\nindex 0000000..e69de21\n"
|
|
gitea_env.modify_gitea_pr("pool/pkgA", pytest.initial_pr_number, diff, "Tweaks")
|
|
sha_old = pytest.pr_details["head"]["sha"]
|
|
|
|
sha_changed = False
|
|
for _ in range(20):
|
|
time.sleep(1)
|
|
new_pr_details = gitea_env.get_pr_details("products/SLFO", pytest.forwarded_pr_number)
|
|
sha_new = new_pr_details["head"]["sha"]
|
|
if sha_new != sha_old:
|
|
print(f"Sha changed from {sha_old} to {sha_new}")
|
|
sha_changed = True
|
|
break
|
|
|
|
assert sha_changed, "Forwarded PR has sha updated"
|
|
|
|
|
|
@pytest.mark.dependency(depends=["test_001_project_pr"])
|
|
def test_003_wip(gitea_env):
|
|
"""WIP flag set for PR"""
|
|
# 1. set WIP flag in PR f"pool/pkgA#{pytest.initial_pr_number}"
|
|
initial_pr_details = gitea_env.get_pr_details("pool/pkgA", pytest.initial_pr_number)
|
|
wip_title = "WIP: " + initial_pr_details["title"]
|
|
|
|
gitea_env.update_gitea_pr_properties("pool/pkgA", pytest.initial_pr_number, title=wip_title)
|
|
# 2. in loop check whether WIP flag is set for PR f"products/SLFO #{pytest.forwarded_pr_number}"
|
|
wip_flag_set = False
|
|
for _ in range(20):
|
|
time.sleep(1)
|
|
forwarded_pr_details = gitea_env.get_pr_details(
|
|
"products/SLFO", pytest.forwarded_pr_number
|
|
)
|
|
if "WIP: " in forwarded_pr_details["title"]:
|
|
wip_flag_set = True
|
|
break
|
|
|
|
assert wip_flag_set, "WIP flag was not set in the forwarded PR."
|
|
|
|
# Remove WIP flag from PR f"pool/pkgA#{pytest.initial_pr_number}"
|
|
initial_pr_details = gitea_env.get_pr_details("pool/pkgA", pytest.initial_pr_number)
|
|
non_wip_title = initial_pr_details["title"].replace("WIP: ", "")
|
|
gitea_env.update_gitea_pr_properties(
|
|
"pool/pkgA", pytest.initial_pr_number, title=non_wip_title
|
|
)
|
|
|
|
# In loop check whether WIP flag is removed for PR f"products/SLFO #{pytest.forwarded_pr_number}"
|
|
wip_flag_removed = False
|
|
for _ in range(20):
|
|
time.sleep(1)
|
|
forwarded_pr_details = gitea_env.get_pr_details(
|
|
"products/SLFO", pytest.forwarded_pr_number
|
|
)
|
|
if "WIP: " not in forwarded_pr_details["title"]:
|
|
wip_flag_removed = True
|
|
break
|
|
assert wip_flag_removed, "WIP flag was not removed from the forwarded PR."
|