92 lines
3.1 KiB
Python
92 lines
3.1 KiB
Python
import importlib
|
|
import os
|
|
import tempfile
|
|
from unittest.mock import patch
|
|
|
|
|
|
def _fresh_auth(tmpdir):
|
|
"""Reload auth module with a temp users file and clear sessions."""
|
|
import auth
|
|
importlib.reload(auth)
|
|
auth._sessions.clear()
|
|
return os.path.join(tmpdir, "users.toml")
|
|
|
|
|
|
def test_has_users_false_when_empty():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
assert not auth.has_users()
|
|
|
|
|
|
def test_create_and_authenticate():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
auth._sessions.clear()
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
auth.create_user("thomas", "geheim123", "/tmp/transkripte", is_admin=True)
|
|
token = auth.authenticate("thomas", "geheim123")
|
|
assert token is not None
|
|
assert len(token) > 10
|
|
|
|
|
|
def test_authenticate_wrong_password():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
auth._sessions.clear()
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
auth.create_user("thomas", "geheim123", "/tmp/transkripte")
|
|
assert auth.authenticate("thomas", "falsch") is None
|
|
|
|
|
|
def test_authenticate_unknown_user():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
assert auth.authenticate("niemand", "irgendwas") is None
|
|
|
|
|
|
def test_get_user_for_token():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
auth._sessions.clear()
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
auth.create_user("anna", "secret456", "/tmp/anna")
|
|
token = auth.authenticate("anna", "secret456")
|
|
user = auth.get_user_for_token(token)
|
|
assert user["username"] == "anna"
|
|
assert user["output_dir"] == "/tmp/anna"
|
|
|
|
|
|
def test_invalidate_token():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
auth._sessions.clear()
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
auth.create_user("bob", "pass789!", "/tmp/bob")
|
|
token = auth.authenticate("bob", "pass789!")
|
|
auth.invalidate_token(token)
|
|
assert auth.get_user_for_token(token) is None
|
|
|
|
|
|
def test_has_users_true_after_create():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
import auth
|
|
importlib.reload(auth)
|
|
users_path = os.path.join(tmpdir, "users.toml")
|
|
with patch("auth.USERS_PATH", users_path):
|
|
auth.create_user("lisa", "abc123!", "/tmp/lisa")
|
|
assert auth.has_users()
|