Files
ajp_anton 8ec3cde4f2
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
Add Linkki broadcast image
2026-08-19 20:51:26 +00:00

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