72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
import subprocess
|
|
import sys
|
|
import time
|
|
|
|
|
|
def wait_for_postgres(max_retries=5, delay=5):
|
|
for _ in range(max_retries):
|
|
try:
|
|
result = subprocess.run(
|
|
[
|
|
"docker",
|
|
"compose",
|
|
"-f",
|
|
"docker-compose.test.yaml",
|
|
"exec",
|
|
"postgres-test",
|
|
"pg_isready",
|
|
"-U",
|
|
"agpt_user",
|
|
"-d",
|
|
"agpt_local",
|
|
],
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
if "accepting connections" in result.stdout:
|
|
print("PostgreSQL is ready.")
|
|
return True
|
|
except subprocess.CalledProcessError:
|
|
print(f"PostgreSQL is not ready yet. Retrying in {delay} seconds...")
|
|
time.sleep(delay)
|
|
print("Failed to connect to PostgreSQL.")
|
|
return False
|
|
|
|
|
|
def run_command(command, check=True):
|
|
try:
|
|
subprocess.run(command, check=check)
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Command failed: {e}")
|
|
sys.exit(1)
|
|
|
|
|
|
def test():
|
|
# Start PostgreSQL with Docker Compose
|
|
run_command(
|
|
[
|
|
"docker",
|
|
"compose",
|
|
"-f",
|
|
"docker-compose.test.yaml",
|
|
"up",
|
|
"-d",
|
|
"postgres-test",
|
|
]
|
|
)
|
|
|
|
if not wait_for_postgres():
|
|
run_command(["docker", "compose", "-f", "docker-compose.test.yaml", "down"])
|
|
sys.exit(1)
|
|
|
|
# Run Prisma migrations
|
|
run_command(["prisma", "migrate", "dev"])
|
|
|
|
# Run the tests
|
|
result = subprocess.run(["pytest"] + sys.argv[1:], check=False)
|
|
|
|
run_command(["docker", "compose", "-f", "docker-compose.test.yaml", "down"])
|
|
|
|
sys.exit(result.returncode)
|