import pytest @pytest.mark.fun def test_password_reset(testapp, parse_latest_mail): response = testapp.get("/", status=302).follow() assert "Please Log In" in response form = response.form form["username"] = "TestAdmin" form["password"] = "jixx" response = form.submit("Log In") assert "Credentials are invalid" in response response = testapp.get("/forgot", status=200) assert "Forgot your Password?" in response form = response.form form["email_or_username"] = "jane@example.com" response = form.submit("Send_Reset_Link").follow() assert "An email for the password reset was sent" in response parsed = parse_latest_mail() assert "If you forgot your password" in parsed.body response = testapp.get(parsed.link) assert "You can now set a new password" in response form = response.form form["new_password"] = "jixx" response = form.submit("Reset_Password").follow() assert "You changed your Password." in response response = testapp.get("/", status=302).follow() form = response.form form["username"] = "TestAdmin" form["password"] = "jane" response = form.submit("Log In") assert "Credentials are invalid" in response response = testapp.get("/", status=302).follow() form = response.form form["username"] = "TestAdmin" form["password"] = "jixx" response = form.submit("Log In").follow() assert "My Orders" in response @pytest.mark.fun def test_password_cancel_forgot_password(testapp): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = testapp.get("/forgot", status=200) assert "Forgot your Password?" in response form = response.form form["email_or_username"] = "jane@example.com" response = form.submit("Cancel").follow().follow() assert "Please Log In" in response @pytest.mark.fun def test_password_reset_user_or_email_not_found(testapp): from pyramid_mailer import get_mailer response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = testapp.get("/forgot", status=200) assert "Forgot your Password?" in response form = response.form form["email_or_username"] = "Unknown User" response = form.submit("Send_Reset_Link").follow() assert "An email for the password reset was sent" in response registry = testapp.app.registry mailer = get_mailer(registry) assert len(mailer.outbox) == 0 @pytest.mark.fun def test_password_reset_cancel_after_token(testapp, parse_latest_mail): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = testapp.get("/forgot", status=200) assert "Forgot your Password?" in response form = response.form form["email_or_username"] = "jane@example.com" response = form.submit("Send_Reset_Link").follow() assert "An email for the password reset was sent" in response parsed = parse_latest_mail() assert "If you forgot your password" in parsed.body response = testapp.get(parsed.link) assert "You can now set a new password" in response form = response.form form["new_password"] = "jixx" response = form.submit("Cancel").follow(status=302).follow() assert "Please Log In" in response response = testapp.get("/", status=302).follow() form = response.form form["username"] = "TestAdmin" form["password"] = "jane" response = form.submit("Log In").follow() assert "My Orders" in response @pytest.mark.fun def test_password_reset_empty_password(testapp, parse_latest_mail): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = testapp.get("/forgot", status=200) assert "Forgot your Password?" in response form = response.form form["email_or_username"] = "jane@example.com" response = form.submit("Send_Reset_Link").follow() assert "An email for the password reset was sent" in response parsed = parse_latest_mail() assert "If you forgot your password" in parsed.body response = testapp.get(parsed.link) assert "You can now set a new password" in response form = response.form form["new_password"] = "" response = form.submit("Reset_Password") assert "There was a problem with your submission" in response @pytest.mark.fun def test_password_reset_invalid_token(testapp): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = testapp.get("/reset?t=invalid").follow(status=302).follow() assert "Please Log In" in response @pytest.mark.fun def test_password_reset_form_invalid_token(testapp, parse_latest_mail): response = testapp.get("/", status=302).follow() assert "Please Log In" in response response = testapp.get("/forgot", status=200) assert "Forgot your Password?" in response form = response.form form["email_or_username"] = "jane@example.com" response = form.submit("Send_Reset_Link").follow() assert "An email for the password reset was sent" in response parsed = parse_latest_mail() assert "If you forgot your password" in parsed.body response = testapp.get(parsed.link) assert "You can now set a new password" in response form = response.form form.action = "/reset?t=invalid" form["new_password"] = "jixx" response = form.submit("Reset_Password").follow(status=302).follow() assert "Please Log In" in response form = response.form form["username"] = "TestAdmin" form["password"] = "jane" response = form.submit("Log In").follow() assert "My Orders" in response