Build custom container images / build (map[base_image:php:8-fpm-alpine build_args:PHP_VERSION=8
context:php8-pgsql fingerprint_command:{ apk info -v | LC_ALL=C sort; find /usr/local/lib/php/extensions /usr/local/etc/php/conf.d -type f -exec sha256sum {} + | LC_ALL=C sort; }
name:ph… (push) Successful in 48s
Build custom container images / build (map[base_image:postgres:18 build_args:PG_VERSION=18
POSTGIS_VERSION=3
VCHORD_VERSION=0.5.3
context:postgres fingerprint_command:{ dpkg-query -W -f='${binary:Package}=${Version}\n' | LC_ALL=C sort; find /usr/lib/postgresql -type f -exec sha256su… (push) Successful in 55s
Build custom container images / build (map[base_image:python:3 build_args:PYTHON_VERSION=3
context:python-tools fingerprint_command:{ dpkg-query -W -f='${binary:Package}=${Version}\n' | LC_ALL=C sort; pip freeze | LC_ALL=C sort; }
name:python-tools oci_labels:org.opencontainers.ima… (push) Successful in 54s
Build custom container images / build (map[base_image:python:3.12-slim build_args:PYTHON_VERSION=3.12-slim
context:linkki-tiedotus fingerprint_command:{ dpkg-query -W -f='${binary:Package}=${Version}\n' | LC_ALL=C sort; pip freeze | LC_ALL=C sort; }
name:linkki-tiedotus oci_labels:… (push) Successful in 39s
203 lines
5.6 KiB
Python
203 lines
5.6 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
from webapp.auth import load_users, set_user_language
|
|
|
|
|
|
def test_load_users_defaults_permissions_to_false(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "viewer",
|
|
"password_hash": "hash"
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
users = load_users(users_file)
|
|
|
|
assert users["viewer"]["password_hash"] == "hash"
|
|
assert all(value is False for value in users["viewer"]["permissions"].values())
|
|
assert users["viewer"]["language"] == "en"
|
|
saved_payload = json.loads(users_file.read_text(encoding="utf-8"))
|
|
saved_permissions = saved_payload["users"][0]["permissions"]
|
|
assert all(saved_permissions[key] is False for key in saved_permissions)
|
|
|
|
|
|
def test_load_users_accepts_bool_like_permission_values(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "editor",
|
|
"password_hash": "hash",
|
|
"permissions": {
|
|
"edit_content": 1,
|
|
"edit_targets": 1,
|
|
"save_announcements": 1,
|
|
"open_telegram": 1,
|
|
"post_now": "true",
|
|
"schedule": "yes",
|
|
"unschedule": true
|
|
}
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
users = load_users(users_file)
|
|
permissions = users["editor"]["permissions"]
|
|
|
|
assert permissions["edit_content"] is True
|
|
assert permissions["edit_targets"] is True
|
|
assert permissions["save_announcements"] is True
|
|
assert permissions["open_telegram"] is True
|
|
assert permissions["post_now"] is True
|
|
assert permissions["schedule"] is True
|
|
assert permissions["unschedule"] is True
|
|
assert permissions["unlink_telegram"] is False
|
|
|
|
|
|
def test_set_user_language_updates_users_file(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "editor",
|
|
"password_hash": "hash",
|
|
"permissions": {}
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
set_user_language(users_file, "editor", "fi")
|
|
|
|
users = load_users(users_file)
|
|
assert users["editor"]["language"] == "fi"
|
|
|
|
|
|
def test_load_users_accepts_auto_language(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "auto_user",
|
|
"password_hash": "hash",
|
|
"language": "auto"
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
users = load_users(users_file)
|
|
|
|
assert users["auto_user"]["language"] == "auto"
|
|
|
|
|
|
def test_set_user_language_can_store_auto(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "editor",
|
|
"password_hash": "hash",
|
|
"permissions": {}
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
set_user_language(users_file, "editor", "auto")
|
|
|
|
users = load_users(users_file)
|
|
assert users["editor"]["language"] == "auto"
|
|
|
|
|
|
def test_load_users_adds_missing_permissions_to_existing_permissions_block(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "editor",
|
|
"password_hash": "hash",
|
|
"permissions": {
|
|
"edit_content": true
|
|
}
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
users = load_users(users_file)
|
|
|
|
assert users["editor"]["permissions"]["edit_content"] is True
|
|
assert users["editor"]["permissions"]["edit_targets"] is False
|
|
assert users["editor"]["permissions"]["save_announcements"] is False
|
|
assert users["editor"]["permissions"]["open_telegram"] is False
|
|
saved_payload = json.loads(users_file.read_text(encoding="utf-8"))
|
|
saved_permissions = saved_payload["users"][0]["permissions"]
|
|
assert saved_permissions["edit_content"] is True
|
|
assert saved_permissions["edit_targets"] is False
|
|
assert saved_permissions["save_announcements"] is False
|
|
assert saved_permissions["open_telegram"] is False
|
|
assert saved_permissions["post_now"] is False
|
|
assert saved_permissions["schedule"] is False
|
|
assert saved_permissions["unschedule"] is False
|
|
assert saved_permissions["unlink_telegram"] is False
|
|
assert saved_permissions["delete_telegram"] is False
|
|
assert saved_permissions["delete_storage"] is False
|
|
|
|
|
|
def test_load_users_removes_legacy_edit_broadcasts_permission(tmp_path: Path) -> None:
|
|
users_file = tmp_path / "users.json"
|
|
users_file.write_text(
|
|
"""
|
|
{
|
|
"users": [
|
|
{
|
|
"username": "editor",
|
|
"password_hash": "hash",
|
|
"permissions": {
|
|
"edit_broadcasts": true
|
|
}
|
|
}
|
|
]
|
|
}
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
users = load_users(users_file)
|
|
|
|
assert "edit_broadcasts" not in users["editor"]["permissions"]
|
|
saved_payload = json.loads(users_file.read_text(encoding="utf-8"))
|
|
saved_permissions = saved_payload["users"][0]["permissions"]
|
|
assert "edit_broadcasts" not in saved_permissions
|