Files
p42.f-w/backend/tests/conftest.py
T
guyg1474andClaude Opus 5.5 0fb3521c2f Freunde, privates Teilen, Artikelrechte, Reiserouten
- Freunde (freunde.py, Tabelle friendships): suchen, anfragen, annehmen,
  ablehnen, entfernen; neue Seite "Freunde" im Menü
- Vorratslisten und Kanban-Projekte immer privat: sichtbar für Ersteller und
  Mitglieder; teilen nur mit Freunden (Admins: mit allen); Kanban-Mitglieder
  (Tabelle kanban_project_members), Bearbeiter nur aus dem Projekt,
  ausgetretene Mitglieder verlieren ihre Zuteilung
- Artikel: lesen alle; bearbeiten Autor, Mitarbeitende verknüpfter
  Kanban-Projekte und Admins; verknüpfen nur bearbeitbare Artikel
  (sonst ließen sich Rechte erschleichen); Board-Liste auf der Artikelseite
  zeigt nur sichtbare Boards
- Administratoren sehen und bearbeiten alles
- Reisen: Städte nur von Freunden (Admins: alle); "Reiserouten zeigen"
  zeichnet die Strecken der Kilometer-Rechnung als Bögen
- Migration Schritt 6: bisher gemeinsame Listen und alle Projekte bekommen
  die vorhandenen Konten als Mitglieder, ohne Ersteller → erster Admin;
  erste Liste einer neuen Installation gehört dem ersten Konto
- Tests: test_freunde.py, test_zugriff.py, bestehende auf Privat-Modell
  umgestellt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 21:49:45 +02:00

60 lines
1.9 KiB
Python

"""Gemeinsame Test-Hilfen: jede Test-Funktion bekommt eine frische, leere Datenbank.
Die App liest den Datenordner beim Import; deshalb zeigt P42_DATA_DIR schon vorher auf einen
Wegwerf-Ordner. Pro Test wird db.DB_FILE auf eine neue Datei umgebogen und das Schema angelegt.
Hintergrund-Aufgaben (lifespan) laufen nicht, weil TestClient ohne "with" benutzt wird.
"""
import os
import sys
import tempfile
from pathlib import Path
os.environ["P42_DATA_DIR"] = tempfile.mkdtemp(prefix="p42-test-")
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
import pytest # noqa: E402
from fastapi.testclient import TestClient # noqa: E402
from app import auth, db # noqa: E402
from app.main import app # noqa: E402
PASSWORD = "passwort123"
@pytest.fixture(autouse=True)
def fresh_db(tmp_path, monkeypatch):
monkeypatch.setattr(db, "DB_FILE", tmp_path / "p42.db")
auth._failures.clear()
db.init()
return tmp_path / "p42.db"
@pytest.fixture
def conn(fresh_db):
c = db.connect()
yield c
c.close()
@pytest.fixture
def login():
"""login("anna", admin=True) → angemeldeter TestClient mit .user (id, name)."""
def make(username: str, admin: bool = False) -> TestClient:
with db.transaction() as c:
user_id = auth._create_user(c, username, username.capitalize(), PASSWORD, admin)
client = TestClient(app)
res = client.post("/api/auth/login", json={"username": username, "password": PASSWORD})
assert res.status_code == 200, res.text
client.user = {"id": user_id, "name": username.capitalize()}
return client
return make
@pytest.fixture
def befriend():
"""befriend(anna, ben): Freundschaftsanfrage + Annahme."""
def make(a: TestClient, b: TestClient) -> None:
a.post(f"/api/freunde/{b.user['id']}")
assert b.post(f"/api/freunde/{a.user['id']}").json()["friends"]
return make