lightning/tests/tests_app/cli/test_cmd_init.py

100 lines
3.1 KiB
Python

import os
import re
import shutil
import subprocess
import pytest
from lightning_app.cli import cmd_init
def test_validate_init_name():
# test that a good name works (mix chars)
value = cmd_init._capture_valid_app_component_name("abc1-cde")
assert value == "abc1-cde"
# test that a good name works (letters only)
value = cmd_init._capture_valid_app_component_name("abc-cde")
assert value == "abc-cde"
# assert bad input
with pytest.raises(SystemExit) as e:
value = cmd_init._capture_valid_app_component_name("abc-cde#")
assert "Error: your Lightning app name" in str(e.value)
@pytest.mark.skip(reason="need app fast_dev_run to work via CLI")
def test_make_app_template():
template_name = "app-test-template"
template_name_folder = re.sub("-", "_", template_name)
# remove the template if there
template_dir = os.path.join(os.getcwd(), template_name)
try:
shutil.rmtree(template_dir)
except Exception as e: # noqa
pass
# create template
subprocess.check_output(f"lightning init app {template_name}", shell=True)
# make sure app is not in the env
env_output = subprocess.check_output("pip freeze", shell=True)
assert template_name not in str(env_output)
# install the app
env_output = subprocess.check_output(
f"cd {template_name} && pip install -r requirements.txt && pip install -e .", shell=True
)
env_output = subprocess.check_output("pip freeze", shell=True)
assert template_name in str(env_output)
app_dir = os.path.join(template_dir, f"{template_name_folder}/app.py")
output = subprocess.check_output(f"lightning run app {app_dir} --fast_dev_run") # noqa
# TODO: verify output
# clean up the template dir
try:
shutil.rmtree(template_dir)
except Exception as e: # noqa
pass
@pytest.mark.skip(reason="need component fast_dev_run to work via CLI")
def test_make_component_template():
template_name = "component-test-template"
template_name_folder = re.sub("-", "_", template_name)
# remove the template if there
template_dir = os.path.join(os.getcwd(), template_name)
try:
shutil.rmtree(template_dir)
except Exception as e: # noqa
pass
# create template
subprocess.check_output(f"lightning init component {template_name}", shell=True)
# make sure app is not in the env
env_output = subprocess.check_output("pip freeze", shell=True)
assert template_name not in str(env_output)
# install the app
env_output = subprocess.check_output(
f"cd {template_name} && pip install -r requirements.txt && pip install -e .", shell=True
)
env_output = subprocess.check_output("pip freeze", shell=True)
assert template_name in str(env_output)
app_dir = os.path.join(template_dir, f"{template_name_folder}/app.py")
output = subprocess.check_output(f"lightning run app {app_dir} --fast_dev_run") # noqa
# TODO: verify output
# clean up the template dir
try:
shutil.rmtree(template_dir)
except Exception as e: # noqa
pass