import pytest

from flaskbb.core.exceptions import ValidationError
from flaskbb.core.tokens import Token, TokenActions
from flaskbb.tokens import verifiers
from flaskbb.user.models import User

pytestmark = pytest.mark.usefixtures('default_settings')


def test_raises_if_email_doesnt_match_token_user(Fred):
    verifier = verifiers.EmailMatchesUserToken(User)
    token = Token(user_id=1, operation=TokenActions.RESET_PASSWORD)

    with pytest.raises(ValidationError) as excinfo:
        verifier(token, email="not really")

    assert excinfo.value.attribute == "email"
    assert excinfo.value.reason == "Wrong email"


def test_doesnt_raise_if_email_matches_token_user(Fred):
    verifier = verifiers.EmailMatchesUserToken(User)
    token = Token(user_id=Fred.id, operation=TokenActions.ACTIVATE_ACCOUNT)
    verifier(token, email=Fred.email)