77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
from datetime import datetime
|
|
|
|
import pytest
|
|
|
|
from data import model
|
|
from data.model.appspecifictoken import create_token, revoke_token, access_valid_token
|
|
from data.model.appspecifictoken import gc_expired_tokens, get_expiring_tokens
|
|
from util.timedeltastring import convert_to_timedelta
|
|
|
|
from test.fixtures import *
|
|
|
|
@pytest.mark.parametrize('expiration', [
|
|
(None),
|
|
('-1m'),
|
|
('-1d'),
|
|
('-1w'),
|
|
('10m'),
|
|
('10d'),
|
|
('10w'),
|
|
])
|
|
def test_gc(expiration, initialized_db):
|
|
user = model.user.get_user('devtable')
|
|
|
|
expiration_date = None
|
|
is_expired = False
|
|
if expiration:
|
|
if expiration[0] == '-':
|
|
is_expired = True
|
|
expiration_date = datetime.now() - convert_to_timedelta(expiration[1:])
|
|
else:
|
|
expiration_date = datetime.now() + convert_to_timedelta(expiration)
|
|
|
|
# Create a token.
|
|
token = create_token(user, 'Some token', expiration=expiration_date)
|
|
|
|
# GC tokens.
|
|
gc_expired_tokens(user)
|
|
|
|
# Ensure the token was GCed if expired and not if it wasn't.
|
|
assert (access_valid_token(token.token_code) is None) == is_expired
|
|
|
|
|
|
def test_access_token(initialized_db):
|
|
user = model.user.get_user('devtable')
|
|
|
|
# Create a token.
|
|
token = create_token(user, 'Some token')
|
|
assert token.last_accessed is None
|
|
|
|
# Lookup the token.
|
|
token = access_valid_token(token.token_code)
|
|
assert token.last_accessed is not None
|
|
|
|
# Revoke the token.
|
|
revoke_token(token)
|
|
|
|
# Ensure it cannot be accessed
|
|
assert access_valid_token(token.token_code) is None
|
|
|
|
|
|
def test_expiring_soon(initialized_db):
|
|
user = model.user.get_user('devtable')
|
|
|
|
# Create some tokens.
|
|
create_token(user, 'Some token')
|
|
exp_token = create_token(user, 'Some expiring token', datetime.now() + convert_to_timedelta('1d'))
|
|
create_token(user, 'Some other token', expiration=datetime.now() + convert_to_timedelta('2d'))
|
|
|
|
# Get the token expiring soon.
|
|
expiring_soon = get_expiring_tokens(user, convert_to_timedelta('25h'))
|
|
assert expiring_soon
|
|
assert len(expiring_soon) == 1
|
|
assert expiring_soon[0].id == exp_token.id
|
|
|
|
expiring_soon = get_expiring_tokens(user, convert_to_timedelta('49h'))
|
|
assert expiring_soon
|
|
assert len(expiring_soon) == 2
|