mirror of
https://github.com/frappe/frappe_docker.git
synced 2024-12-23 02:28:57 +00:00
a580385295
* fix: traefik router for acme certs * fix: set default for sites * test: use .localhost site names
169 lines
3.7 KiB
Python
169 lines
3.7 KiB
Python
import os
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from tests.utils import CI, Compose
|
|
|
|
|
|
def _add_version_var(name: str, env_path: Path):
|
|
value = os.getenv(name)
|
|
|
|
if not value:
|
|
return
|
|
|
|
if value == "develop":
|
|
os.environ[name] = "latest"
|
|
|
|
with open(env_path, "a") as f:
|
|
f.write(f"\n{name}={os.environ[name]}")
|
|
|
|
|
|
def _add_sites_var(env_path: Path):
|
|
with open(env_path, "r+") as f:
|
|
content = f.read()
|
|
content = re.sub(
|
|
rf"SITES=.*",
|
|
f"SITES=`tests.localhost`,`test-erpnext-site.localhost`,`test-pg-site.localhost`",
|
|
content,
|
|
)
|
|
f.seek(0)
|
|
f.truncate()
|
|
f.write(content)
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def env_file(tmp_path_factory: pytest.TempPathFactory):
|
|
tmp_path = tmp_path_factory.mktemp("frappe-docker")
|
|
file_path = tmp_path / ".env"
|
|
shutil.copy("example.env", file_path)
|
|
|
|
_add_sites_var(file_path)
|
|
|
|
for var in ("FRAPPE_VERSION", "ERPNEXT_VERSION"):
|
|
_add_version_var(name=var, env_path=file_path)
|
|
|
|
yield str(file_path)
|
|
os.remove(file_path)
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def compose(env_file: str):
|
|
return Compose(project_name="test", env_file=env_file)
|
|
|
|
|
|
@pytest.fixture(autouse=True, scope="session")
|
|
def frappe_setup(compose: Compose):
|
|
compose.stop()
|
|
|
|
compose("up", "-d", "--quiet-pull")
|
|
yield
|
|
|
|
compose.stop()
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def frappe_site(compose: Compose):
|
|
site_name = "tests.localhost"
|
|
compose.bench(
|
|
"new-site",
|
|
"--no-mariadb-socket",
|
|
"--mariadb-root-password",
|
|
"123",
|
|
"--admin-password",
|
|
"admin",
|
|
site_name,
|
|
)
|
|
compose("restart", "backend")
|
|
yield site_name
|
|
|
|
|
|
@pytest.fixture(scope="class")
|
|
def erpnext_setup(compose: Compose):
|
|
compose.stop()
|
|
compose("up", "-d", "--quiet-pull")
|
|
|
|
yield
|
|
compose.stop()
|
|
|
|
|
|
@pytest.fixture(scope="class")
|
|
def erpnext_site(compose: Compose):
|
|
site_name = "test-erpnext-site.localhost"
|
|
args = [
|
|
"new-site",
|
|
"--no-mariadb-socket",
|
|
"--mariadb-root-password",
|
|
"123",
|
|
"--admin-password",
|
|
"admin",
|
|
"--install-app",
|
|
"erpnext",
|
|
site_name,
|
|
]
|
|
compose.bench(*args)
|
|
compose("restart", "backend")
|
|
yield site_name
|
|
|
|
|
|
@pytest.fixture
|
|
def postgres_setup(compose: Compose):
|
|
compose.stop()
|
|
compose("-f", "overrides/compose.postgres.yaml", "up", "-d", "--quiet-pull")
|
|
compose.bench("set-config", "-g", "root_login", "postgres")
|
|
compose.bench("set-config", "-g", "root_password", "123")
|
|
yield
|
|
compose.stop()
|
|
|
|
|
|
@pytest.fixture
|
|
def python_path():
|
|
return "/home/frappe/frappe-bench/env/bin/python"
|
|
|
|
|
|
@dataclass
|
|
class S3ServiceResult:
|
|
access_key: str
|
|
secret_key: str
|
|
|
|
|
|
@pytest.fixture
|
|
def s3_service(python_path: str, compose: Compose):
|
|
access_key = "AKIAIOSFODNN7EXAMPLE"
|
|
secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
|
|
cmd = (
|
|
"docker",
|
|
"run",
|
|
"--name",
|
|
"minio",
|
|
"-d",
|
|
"-e",
|
|
f"MINIO_ACCESS_KEY={access_key}",
|
|
"-e",
|
|
f"MINIO_SECRET_KEY={secret_key}",
|
|
"--network",
|
|
f"{compose.project_name}_default",
|
|
"minio/minio",
|
|
"server",
|
|
"/data",
|
|
)
|
|
subprocess.check_call(cmd)
|
|
|
|
compose("cp", "tests/_create_bucket.py", "backend:/tmp")
|
|
compose.exec(
|
|
"-e",
|
|
f"S3_ACCESS_KEY={access_key}",
|
|
"-e",
|
|
f"S3_SECRET_KEY={secret_key}",
|
|
"backend",
|
|
python_path,
|
|
"/tmp/_create_bucket.py",
|
|
)
|
|
|
|
yield S3ServiceResult(access_key=access_key, secret_key=secret_key)
|
|
subprocess.call(("docker", "rm", "minio", "-f"))
|