def test_email_confirmation_serializer_creation(app, db):
    """Ensure that no two tokens are identical."""
    extra_data = dict(email="*****@*****.**")
    with app.app_context():
        s = EmailConfirmationSerializer()
        t1 = s.create_token(1, extra_data)
        t2 = s.create_token(1, extra_data)
        assert t1 != t2
def test_email_confirmation_serializer_expected_data_mismatch(app, db):
    """Test token validation."""
    extra_data = dict(email="*****@*****.**")
    with app.app_context():
        s = EmailConfirmationSerializer()
        t = s.create_token(1, extra_data)
        assert s.validate_token(t) is not None
        assert s.validate_token(t, dict(notvalid=1)) is None
        assert s.validate_token(t, dict(email='another@email')) is None
def test_email_confirmation_serializer_create_validate(app, db):
    """Test token creation."""
    extra_data = dict(email="*****@*****.**")
    with app.app_context():
        s = EmailConfirmationSerializer()
        t = s.create_token(1, extra_data)
        data = s.validate_token(t, expected_data=extra_data)
        assert data['id'] == 1
        assert data['data'] == extra_data
def test_email_confirmation_serializer_expired(app, db):
    """Test token expiry."""
    extra_data = dict(email="*****@*****.**")
    with app.app_context():
        s = EmailConfirmationSerializer(expires_in=-20)
        t = s.create_token(1, extra_data)
        assert s.validate_token(t) is None
        assert s.validate_token(t, expected_data=extra_data) is None
        with pytest.raises(SignatureExpired):
            s.load_token(t)
        assert s.load_token(t, force=True) is not None