
* use pathlib as much as possible
* fixstuff
* break locally to unbreak in CI 🤷
* add type on env
* debug attempt 1
* debugged
* oops, there is the actual fix
* fix 3.9 compat
69 lines
2.1 KiB
Python
Executable File
69 lines
2.1 KiB
Python
Executable File
"""Integration tests for all urls in Reflex."""
|
|
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
import requests
|
|
|
|
|
|
def check_urls(repo_dir: Path):
|
|
"""Check that all URLs in the repo are valid and secure.
|
|
|
|
Args:
|
|
repo_dir: The directory of the repo.
|
|
|
|
Returns:
|
|
A list of errors.
|
|
"""
|
|
url_pattern = re.compile(r'http[s]?://reflex\.dev[^\s")]*')
|
|
errors = []
|
|
|
|
for root, _dirs, files in os.walk(repo_dir):
|
|
root = Path(root)
|
|
if root.stem == "__pycache__":
|
|
continue
|
|
|
|
for file_name in files:
|
|
if not file_name.endswith(".py") and not file_name.endswith(".md"):
|
|
continue
|
|
|
|
file_path = root / file_name
|
|
try:
|
|
for line in file_path.read_text().splitlines():
|
|
urls = url_pattern.findall(line)
|
|
for url in set(urls):
|
|
if url.startswith("http://"):
|
|
errors.append(
|
|
f"Found insecure HTTP URL: {url} in {file_path}"
|
|
)
|
|
url = url.strip('"\n')
|
|
try:
|
|
response = requests.head(
|
|
url, allow_redirects=True, timeout=5
|
|
)
|
|
response.raise_for_status()
|
|
except requests.RequestException as e:
|
|
errors.append(
|
|
f"Error accessing URL: {url} in {file_path} | Error: {e}, , Check your path ends with a /"
|
|
)
|
|
except Exception as e:
|
|
errors.append(f"Error reading file: {file_path} | Error: {e}")
|
|
|
|
return errors
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"repo_dir",
|
|
[Path(__file__).resolve().parent.parent / "reflex"],
|
|
)
|
|
def test_find_and_check_urls(repo_dir: Path):
|
|
"""Test that all URLs in the repo are valid and secure.
|
|
|
|
Args:
|
|
repo_dir: The directory of the repo.
|
|
"""
|
|
errors = check_urls(repo_dir)
|
|
assert not errors, "\n".join(errors)
|