def test_step_1_spamcheck(client, post_data_step_1, cleanup_dummy_user, spamcheck_on, mocker): """Register a user, step 1, with spamcheck on""" mocked_requests = mocker.patch("noggin.signals.requests") record_signal = mocker.Mock() with mailer.record_messages() as outbox, stageuser_created.connected_to( record_signal): result = client.post('/', data=post_data_step_1) assert result.status_code == 302 assert result.location == "http://localhost/register/spamcheck-wait?username=dummy" # Emitted signal record_signal.assert_called_once() # Basset called mocked_requests.post.assert_called_once() assert mocked_requests.post.call_args_list[0][0][0] == "http://basset.test" call_data = mocked_requests.post.call_args_list[0][1]["json"] assert call_data["action"] == "fedora.noggin.registration" assert call_data["data"]["user"]["username"] == "dummy" assert call_data["data"]["request_headers"]["Host"] == "localhost" assert call_data["data"]["request_ip"] == "127.0.0.1" assert "token" in call_data["data"] assert call_data["data"][ "callback"] == "http://localhost/register/spamcheck-hook" # No sent email assert len(outbox) == 0
def test_spamcheck(client, dummy_stageuser, mocker, spamcheck_status, spamcheck_on): user = User(ipa_admin.stageuser_show("dummy")["result"]) assert user.status_note != spamcheck_status token = make_token({"sub": "dummy"}, audience=Audience.spam_check) with mailer.record_messages() as outbox: response = client.post( "/register/spamcheck-hook", json={ "token": token, "status": spamcheck_status }, ) assert response.status_code == 200 assert response.json == {"status": "success"} # Check that the status was changed user = User(ipa_admin.stageuser_show("dummy")["result"]) assert user.status_note == spamcheck_status # Sent email if spamcheck_status == "active": assert len(outbox) == 1 message = outbox[0] assert message.subject == "Verify your email address" assert message.recipients == ["*****@*****.**"] else: assert len(outbox) == 0
def test_ask_post(client, dummy_user, patched_lock): with mailer.record_messages() as outbox: result = client.post('/forgot-password/ask', data={"username": "******"}) # Confirmation message assert_redirects_with_flash( result, expected_url="/", expected_message=( "An email has been sent to your address with instructions on how to reset " "your password" ), expected_category="success", ) # Sent email assert len(outbox) == 1 message = outbox[0] assert message.subject == "Password reset procedure" assert message.recipients == ["*****@*****.**"] # Valid token token_match = re.search(r"\?token=([^\s\"']+)", message.body) assert token_match is not None token = token_match.group(1) token_data = jwt.decode( token, current_app.config["SECRET_KEY"], algorithms=["HS256"] ) assert token_data.get("username") == "dummy" assert "last_change" in token_data # Lock activated patched_lock["store"].assert_called_once()
def test_strip(client, post_data_step_1, cleanup_dummy_user, field_name): """Register a user with fields that contain trailing spaces""" post_data_step_1[f"register-{field_name}"] = "Dummy " with mailer.record_messages() as outbox: result = client.post('/', data=post_data_step_1) assert result.status_code == 302, str(result.data, "utf8") user = User(ipa_admin.stageuser_show(a_uid="dummy")['result']) assert getattr(user, field_name) == "Dummy" assert len(outbox) == 1
def test_ask_still_valid(client, patched_lock_active): with mailer.record_messages() as outbox: result = client.post('/forgot-password/ask', data={"username": "******"}) # Error message assert result.status_code == 200 page = BeautifulSoup(result.data, 'html.parser') error_message = page.select_one("#formerrors .text-danger") assert error_message is not None assert error_message.get_text(strip=True).startswith( "You have already requested a password reset, you need to wait " ) # No sent email assert len(outbox) == 0
def test_step_2_resend(client, dummy_stageuser): """Register a user, step 2, but no provided username""" with mailer.record_messages() as outbox: result = client.post('/register/confirm?username=dummy', data={"submit": "1"}) assert_redirects_with_flash( result, expected_url="/register/confirm?username=dummy", expected_message= ("The address validation email has be sent again. Make sure it did not land " "in your spam folder"), expected_category="success", ) # Sent email assert len(outbox) == 1 message = outbox[0] assert message.subject == "Verify your email address" assert message.recipients == ["*****@*****.**"]
def test_step_1(client, post_data_step_1, cleanup_dummy_user, mocker): """Register a user, step 1""" record_signal = mocker.Mock() with mailer.record_messages() as outbox, stageuser_created.connected_to( record_signal): result = client.post('/', data=post_data_step_1) assert result.status_code == 302 assert result.location == "http://localhost/register/confirm?username=dummy" # Emitted signal record_signal.assert_called_once() # Sent email assert len(outbox) == 1 message = outbox[0] assert message.subject == "Verify your email address" assert message.recipients == ["*****@*****.**"] # Check that default values are added user = User(ipa_admin.stageuser_show("dummy")['result']) # Creation time assert user.creationtime is not None # Locale assert user.locale == current_app.config["USER_DEFAULTS"]["locale"] # Timezone assert user.timezone == current_app.config["USER_DEFAULTS"]["timezone"]
def test_step_1(client, post_data_step_1, cleanup_dummy_user): """Register a user, step 1""" with mailer.record_messages() as outbox: result = client.post('/', data=post_data_step_1) assert result.status_code == 302 assert result.location == "http://localhost/register/confirm?username=dummy" # Sent email assert len(outbox) == 1 message = outbox[0] assert message.subject == "Verify your email address" assert message.recipients == ["*****@*****.**"] # Check that default values are added user = ipa_admin.stageuser_show("dummy") # Creation time assert "fascreationtime" in user assert user["fascreationtime"][0] # Locale assert "faslocale" in user assert user["faslocale"][0] == current_app.config["USER_DEFAULTS"]["user_locale"] # Timezone assert "fastimezone" in user assert ( user["fastimezone"][0] == current_app.config["USER_DEFAULTS"]["user_timezone"] )