diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb5597c69..deff6138d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -116,19 +116,20 @@ jobs: production-check: + name: "Production check" runs-on: ubuntu-latest + needs: [bare, docker] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: "3.11" cache: pip - - name: Install Cookiecutter - run: pip install cookiecutter - - name: Generate project - run: cookiecutter . --no-input project_slug=test_project - - name: Install project dependencies - run: pip install -r test_project/requirements.txt - - name: Run Django deployment checks - working-directory: test_project - run: python manage.py check --deploy \ No newline at end of file + cache-dependency-path: | + requirements.txt + {{cookiecutter.project_slug}}/requirements/base.txt + {{cookiecutter.project_slug}}/requirements/local.txt + - name: Install dependencies + run: pip install -r requirements.txt + - name: Production check + run: sh tests/test_production.sh \ No newline at end of file diff --git a/tests/test_production_build.py b/tests/test_production_build.py index d0c3d1e1b..1fbcb1f60 100644 --- a/tests/test_production_build.py +++ b/tests/test_production_build.py @@ -2,7 +2,81 @@ import os import subprocess -def test_production_check(): - base_dir = os.getcwd() - manage_py_path = os.path.join(base_dir, "test_project", "manage.py") - subprocess.check_call(['python', manage_py_path, 'check', '--deploy']) \ No newline at end of file +def test_production_build(): + """Test production build.""" + # Run production build + subprocess.run(["npm", "run", "build"], check=True) + + # Check that the build folder exists + assert os.path.isdir("build") + + # Check that the build folder contains the index.html file + assert os.path.isfile("build/index.html") + + # Check that the build folder contains the static folder + assert os.path.isdir("build/static") + + +def test_production_build_with_env(): + """Test production build with environment variable.""" + # Set environment variable + os.environ["REACT_APP_API_URL"] = "http://localhost:5000" + + # Run production build + subprocess.run(["npm", "run", "build"], check=True) + + # Check that the build folder exists + assert os.path.isdir("build") + + # Check that the build folder contains the index.html file + assert os.path.isfile("build/index.html") + + # Check that the build folder contains the static folder + assert os.path.isdir("build/static") + + # Unset environment variable + del os.environ["REACT_APP_API_URL"] + + +def test_production_build_with_env_and_no_api_url(): + """Test production build with environment variable and no API URL.""" + # Set environment variable + os.environ["REACT_APP_API_URL"] = "" + + # Run production build + subprocess.run(["npm", "run", "build"], check=True) + + # Check that the build folder exists + assert os.path.isdir("build") + + # Check that the build folder contains the index.html file + assert os.path.isfile("build/index.html") + + # Check that the build folder contains the static folder + assert os.path.isdir("build/static") + + # Unset environment variable + del os.environ["REACT_APP_API_URL"] + + +def test_production_build_with_env_and_invalid_api_url(): + """Test production build with environment variable and invalid API URL.""" + # Set environment variable + os.environ["REACT_APP_API_URL"] = "invalid" + + # Run production build + subprocess.run(["npm", "run", "build"], check=True) + + # Check that the build folder exists + assert os.path.isdir("build") + + # Check that the build folder contains the index.html file + assert os.path.isfile("build/index.html") + + # Check that the build folder contains the static folder + assert os.path.isdir("build/static") + + # Unset environment variable + del os.environ["REACT_APP_API_URL"] + +