diff --git a/src/functional_tests/test_login.py b/src/functional_tests/test_login.py new file mode 100644 index 0000000..d74d073 --- /dev/null +++ b/src/functional_tests/test_login.py @@ -0,0 +1,41 @@ +import re +from django.core import mail +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from .base import FunctionalTest + +TEST_EMAIL = "disco@example.com" +SUBJECT = "a magic link to login to your Dashboard" + +class LoginTest(FunctionalTest): + def test_login_using_magic_linl(self): + self.browser.get(self.live_server_url) + self.browser.find_element(By.CSS_SELECTOR, "input[name=email]").send_keys( + TEST_EMAIL, Keys.ENTER + ) + + self.wait_for( + lambda: self.assertIn( + "Check your email", + self.browser.find_element(By.CSS_SELECTOR, "body").text, + ) + ) + + email = mail.outbox.pop() + self.assertIn(TEST_EMAIL, email.to) + self.assertEqual(email.subject, SUBJECT) + + self.assertIn("Use this link to login to your Dashboard", email.body) + url_search = re.search(r"http://.+/.+$", email.body) + if not url_search: + self.fail(f"Could not find url in email body:\n{email.body}") + url = url_search.group(0) + self.assertIn(self.live_server_url, url) + + self.browser.get(url) + + self.wait_for( + lambda: self.browser.find_element(By.CSS_SELECTOR, "#id_logout"), + ) + navbar = self.browser.find_element(By.CSS_SELECTOR, ".navbar") + self.assertIn(TEST_EMAIL, navbar.text)