diff --git a/.dockerignore b/.dockerignore index ea2e09c..2e27272 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ src/db.sqlite3 +src/functional_tests/management diff --git a/container.db.sqlite3 b/container.db.sqlite3 index 0c342b7..226a71f 100644 Binary files a/container.db.sqlite3 and b/container.db.sqlite3 differ diff --git a/infra/deploy-playbook.yaml b/infra/deploy-playbook.yaml index 3181d81..366a56a 100644 --- a/infra/deploy-playbook.yaml +++ b/infra/deploy-playbook.yaml @@ -78,8 +78,9 @@ env: DJANGO_DEBUG_FALSE: "1" 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" + EMAIL_HOST_PASSWORD: "{{ lookup('env', 'EMAIL_HOST_PASSWORD') }}" ports: 80:8888 # container port 80 (standard http port) maps to server port 8888 (arbitrary internal port) diff --git a/src/core/settings.py b/src/core/settings.py index 7206c26..4f77465 100644 --- a/src/core/settings.py +++ b/src/core/settings.py @@ -51,6 +51,9 @@ INSTALLED_APPS = [ # Depend apps ] +if 'DJANGO_DEBUG_FALSE' not in os.environ: + INSTALLED_APPS += ['functional_tests'] + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -149,7 +152,7 @@ LOGGING = { # Email Settings EMAIL_HOST = "smtp.mailgun.org" -EMAIL_HOST_USER = os.environ["EMAIL_HOST_USER"] -EMAIL_HOST_PASSWORD = os.environ["EMAIL_HOST_PASSWORD"] +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.get("EMAIL_HOST_PASSWORD") # switch back to .environ[] EMAIL_PORT = 587 EMAIL_USER_TLS = True diff --git a/src/functional_tests/base.py b/src/functional_tests/base.py index 0c2a505..6c29c5d 100644 --- a/src/functional_tests/base.py +++ b/src/functional_tests/base.py @@ -27,8 +27,9 @@ class FunctionalTest(StaticLiveServerTestCase): # Helper methods def setUp(self): self.browser = webdriver.Firefox() - if test_server := os.environ.get('TEST_SERVER'): - self.live_server_url = 'http://' + test_server + self.test_server = os.environ.get("TEST_SERVER") + if self.test_server: + self.live_server_url = 'http://' + self.test_server def tearDown(self): self.browser.quit() diff --git a/src/functional_tests/management/__init__.py b/src/functional_tests/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/functional_tests/management/commands/__init__.py b/src/functional_tests/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/functional_tests/management/commands/create_session.py b/src/functional_tests/management/commands/create_session.py new file mode 100644 index 0000000..b96bf65 --- /dev/null +++ b/src/functional_tests/management/commands/create_session.py @@ -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 diff --git a/src/functional_tests/test_login.py b/src/functional_tests/test_login.py index 4a96ed4..477b0ac 100644 --- a/src/functional_tests/test_login.py +++ b/src/functional_tests/test_login.py @@ -21,6 +21,9 @@ class LoginTest(FunctionalTest): ) ) + if self.test_server: + return + email = mail.outbox.pop() self.assertIn(TEST_EMAIL, email.to) self.assertEqual(email.subject, SUBJECT)