added functional_tests to installed apps in core.settings (but only when debug is true); created management dir to contain new django cmds & listed in .dockerignore; created management.create_session cmd; recreated container.db.sqlite3; tweaked test_server setup in functional_tests.base; added test_server failsafe to magic link login testing in .test_login

This commit is contained in:
Disco DeDisco
2026-02-03 14:54:37 -05:00
parent 3fdd07e003
commit 55bb589f61
9 changed files with 37 additions and 5 deletions

View File

@@ -1 +1,2 @@
src/db.sqlite3 src/db.sqlite3
src/functional_tests/management

Binary file not shown.

View File

@@ -78,8 +78,9 @@
env: env:
DJANGO_DEBUG_FALSE: "1" DJANGO_DEBUG_FALSE: "1"
DJANGO_SECRET_KEY: "{{ secret_key.content | b64decode }}" DJANGO_SECRET_KEY: "{{ secret_key.content | b64decode }}"
DJANGO_ALLOWED_HOST: "staging.earthmanrpg.me,www.earthmanrpg.me,dashboard.earthmanrpg.me,earthmanrpg.me,104.131.184.0,localhost" DJANGO_ALLOWED_HOST: "localhost,staging.earthmanrpg.me,www.earthmanrpg.me,dashboard.earthmanrpg.me,earthmanrpg.me,104.131.184.0"
DJANGO_DB_PATH: "/home/nonroot/db.sqlite3" DJANGO_DB_PATH: "/home/nonroot/db.sqlite3"
EMAIL_HOST_PASSWORD: "{{ lookup('env', 'EMAIL_HOST_PASSWORD') }}"
ports: ports:
80:8888 # container port 80 (standard http port) maps to server port 8888 (arbitrary internal port) 80:8888 # container port 80 (standard http port) maps to server port 8888 (arbitrary internal port)

View File

@@ -51,6 +51,9 @@ INSTALLED_APPS = [
# Depend apps # Depend apps
] ]
if 'DJANGO_DEBUG_FALSE' not in os.environ:
INSTALLED_APPS += ['functional_tests']
MIDDLEWARE = [ MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
@@ -149,7 +152,7 @@ LOGGING = {
# Email Settings # Email Settings
EMAIL_HOST = "smtp.mailgun.org" EMAIL_HOST = "smtp.mailgun.org"
EMAIL_HOST_USER = os.environ["EMAIL_HOST_USER"] EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER") # switch back to .environ[] when collectstatic moved outside docker build process
EMAIL_HOST_PASSWORD = os.environ["EMAIL_HOST_PASSWORD"] EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD") # switch back to .environ[]
EMAIL_PORT = 587 EMAIL_PORT = 587
EMAIL_USER_TLS = True EMAIL_USER_TLS = True

View File

@@ -27,8 +27,9 @@ class FunctionalTest(StaticLiveServerTestCase):
# Helper methods # Helper methods
def setUp(self): def setUp(self):
self.browser = webdriver.Firefox() self.browser = webdriver.Firefox()
if test_server := os.environ.get('TEST_SERVER'): self.test_server = os.environ.get("TEST_SERVER")
self.live_server_url = 'http://' + test_server if self.test_server:
self.live_server_url = 'http://' + self.test_server
def tearDown(self): def tearDown(self):
self.browser.quit() self.browser.quit()

View File

@@ -0,0 +1,23 @@
from django.conf import settings
from django.contrib.auth import BACKEND_SESSION_KEY, SESSION_KEY, get_user_model
from django.contrib.sessions.backends.db import SessionStore
from django.core.management.base import BaseCommand
User = get_user_model()
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("email")
def handle(self, *args, **options):
session_key = create_pre_authenticated_session(options["email"])
self.stdout.write(session_key)
def create_pre_authenticated_session(email):
user = User.objects.create(email=email)
session = SessionStore()
session[SESSION_KEY] = user.pk
session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0]
session.save()
return session.session_key

View File

@@ -21,6 +21,9 @@ class LoginTest(FunctionalTest):
) )
) )
if self.test_server:
return
email = mail.outbox.pop() email = mail.outbox.pop()
self.assertIn(TEST_EMAIL, email.to) self.assertIn(TEST_EMAIL, email.to)
self.assertEqual(email.subject, SUBJECT) self.assertEqual(email.subject, SUBJECT)