Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00686ba53f | ||
|
|
d2f2409a53 | ||
|
|
5d378b7b19 | ||
|
|
5899c1f14f | ||
|
|
a4b37a0bb0 | ||
|
|
115c5ae319 |
@@ -1,6 +1,6 @@
|
|||||||
name: Deploy Company Site
|
name: Deploy Company Site
|
||||||
|
|
||||||
# Runs after Unit Tests completes on master. Direct pushes only (not PRs).
|
# Deploy pipeline runs only on pushes to master (never on pull requests).
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
workflows: [Unit Tests]
|
workflows: [Unit Tests]
|
||||||
@@ -8,14 +8,34 @@ on:
|
|||||||
branches: [master]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker:
|
test:
|
||||||
if: gitea.event.workflow_run.conclusion == 'success' && gitea.event.workflow_run.event == 'push'
|
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
ref: ${{ gitea.event.workflow_run.head_sha }}
|
- name: Install uv
|
||||||
|
run: |
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: uv sync --frozen
|
||||||
|
|
||||||
|
- name: Run unit tests
|
||||||
|
env:
|
||||||
|
DJANGO_ENV: dev
|
||||||
|
DJANGO_SECRET_KEY: test-secret-key
|
||||||
|
run: |
|
||||||
|
cd company_site
|
||||||
|
uv run python manage.py test
|
||||||
|
|
||||||
|
docker:
|
||||||
|
runs-on: self-hosted
|
||||||
|
needs: test
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: docker compose build
|
run: docker compose build
|
||||||
@@ -33,7 +53,7 @@ jobs:
|
|||||||
deploy:
|
deploy:
|
||||||
if: gitea.event.workflow_run.conclusion == 'success' && gitea.event.workflow_run.event == 'push'
|
if: gitea.event.workflow_run.conclusion == 'success' && gitea.event.workflow_run.event == 'push'
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
needs: docker
|
needs: [test, docker]
|
||||||
env:
|
env:
|
||||||
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
|
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 99 KiB |
@@ -1,40 +1,12 @@
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.test import Client, TestCase, override_settings
|
from django.test import Client, TestCase, override_settings
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from .models import Contact, EmailMessage
|
from .models import Contact
|
||||||
from .seo import SERVICE_URL_NAMES, get_service_entries
|
from .seo import SERVICE_URL_NAMES, get_service_entries
|
||||||
|
|
||||||
|
|
||||||
class PreviewEmailAuthTests(TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
self.client = Client()
|
|
||||||
self.user = User.objects.create_user(username="previewer", password="pass")
|
|
||||||
self.email = EmailMessage.objects.create(
|
|
||||||
subject="Preview subject",
|
|
||||||
body="Preview body content",
|
|
||||||
recipient="recipient@example.com",
|
|
||||||
)
|
|
||||||
self.url = reverse("preview_email", kwargs={"pk": self.email.pk})
|
|
||||||
|
|
||||||
def test_unauthenticated_user_is_redirected_to_login(self):
|
|
||||||
response = self.client.get(self.url)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, 302)
|
|
||||||
self.assertIn("/accounts/login/", response.url)
|
|
||||||
|
|
||||||
def test_authenticated_user_can_preview_email(self):
|
|
||||||
self.client.login(username="previewer", password="pass")
|
|
||||||
|
|
||||||
response = self.client.get(self.url)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, 200)
|
|
||||||
self.assertContains(response, "Preview subject")
|
|
||||||
self.assertContains(response, "Preview body content")
|
|
||||||
|
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
DEBUG=True,
|
DEBUG=True,
|
||||||
EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend",
|
EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend",
|
||||||
|
|||||||
+4
-7
@@ -18,14 +18,11 @@ services:
|
|||||||
build: .
|
build: .
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
# No required env_file — CI has no .env. Defaults below; for local secrets:
|
env_file:
|
||||||
# docker compose --env-file .env up
|
- .env
|
||||||
environment:
|
environment:
|
||||||
DJANGO_ENV: ${DJANGO_ENV:-dev}
|
DJANGO_ENV: dev
|
||||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me}
|
DATABASE_URL: postgres://company_site:company_site@db:5432/company_site
|
||||||
DJANGO_DEBUG: ${DJANGO_DEBUG:-true}
|
|
||||||
DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}
|
|
||||||
DATABASE_URL: ${DATABASE_URL:-postgres://company_site:company_site@db:5432/company_site}
|
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
Reference in New Issue
Block a user