1import os
2import subprocess
3import sys
4
5import click
6from dotenv import load_dotenv
7
8from plain.cli import register_cli
9from plain.cli.runtime import common_command
10
11
12@common_command
13@register_cli("test")
14@click.command(
15 context_settings={
16 "ignore_unknown_options": True,
17 }
18)
19@click.argument("pytest_args", nargs=-1, type=click.UNPROCESSED)
20def cli(pytest_args: tuple[str, ...]) -> None:
21 """Test suite with pytest"""
22
23 if os.path.exists(".env.test"):
24 click.secho(
25 "Loading environment variables from .env.test...", dim=True, italic=True
26 )
27 # plain.dev may load .env files first, so make sure we override any existing variables
28 load_dotenv(".env.test", override=True)
29
30 cmd = [
31 sys.executable,
32 "-m",
33 "pytest",
34 ] + list(pytest_args)
35
36 result = subprocess.run(cmd, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr)
37
38 if returncode := result.returncode:
39 sys.exit(returncode)