1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- """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)
|