def test_secretlink_serializer_creation(app, db):
    """Ensure that no two tokens are identical."""
    with app.app_context():
        s = SecretLinkSerializer()
        t1 = s.create_token(98765, dict(recid=4321))
        t2 = s.create_token(98765, dict(recid=4321))
        assert t1 != t2
def test_secretlink_serializer_noencryption(app, db):
    """Test that token is not encrypted."""
    with app.app_context():
        s = SecretLinkSerializer()
        t1 = s.create_token(1, dict(recid=1))
        with pytest.raises(BadSignature):
            JSONWebSignatureSerializer('anotherkey').loads(t1)
def test_secretlink_serializer_create_validate(app, db):
    """Test token creation."""
    with app.app_context():
        s = SecretLinkSerializer()
        t = s.create_token(1234, dict(recid=56789))
        data = s.validate_token(t)
        assert data['id'] == 1234
        assert data['data']['recid'] == 56789
def test_secretlink_factory_creation(app, db):
    """Test token creation."""
    extra_data = dict(recid='1')
    with app.app_context():
        d = datetime.utcnow()+timedelta(days=1)

        t = SecretLinkFactory.create_token(1, extra_data)

        assert SecretLinkSerializer().validate_token(
            t, expected_data=extra_data) is not None
        assert TimedSecretLinkSerializer().validate_token(
            t, expected_data=extra_data) is None

        t1 = SecretLinkFactory.create_token(
            1, extra_data, expires_at=d
        )
        t2 = SecretLinkFactory.create_token(1, extra_data)

        assert SecretLinkSerializer().validate_token(
            t1, expected_data=extra_data) is None
        assert TimedSecretLinkSerializer().validate_token(
            t1, expected_data=extra_data) is not None
        assert t1 != t2