def METHOD_NAME(
    client, csrf_token, login, user_rincewind: models.User
) -> None:
    """Add a new email address with an OTP and confirm an incorrect OTP is rejected."""
    login.as_(user_rincewind)
    with patch(PATCH_EMAIL_VALIDATOR, return_value=True):
        with patch(PATCH_EMAIL_OTP_SEND, autospec=True, return_value=True) as mock:
            rv1 = client.post(
                '/account/email/new',
                data=MultiDict({'csrf_token': csrf_token, 'email': TEST_NEW_EMAIL}),
            )
            assert rv1.status_code == 303
            otp_session = mock.call_args[0][0]  # First call, first argument (self)
            caught_otp = otp_session.otp
        rv2 = client.post(
            rv1.location,
            data=MultiDict(
                {'csrf_token': csrf_token, 'otp': get_wrong_otp(caught_otp)}
            ),
        )
        assert 'OTP is incorrect' in rv2.data.decode()