mitai-jinkendo/.claude/commands/test.md
Lars 7940dc7560 docs: Struktur .claude/docs versionieren, working/, Gitea-Index, Regeln
- .gitignore: .claude/docs, rules, commands tracken; settings.local weiter ignorieren
- DOCUMENTATION.md: verbindliche Ablage functional/technical/working/issues
- .claude/README.md: Agent-Einstieg; GITEA_ISSUES_INDEX aus MCP (Stand 2026-04-08)
- Arbeitspapiere von docs/ nach .claude/docs/working/ verschoben
- docs/MEMBERSHIP_SYSTEM.md als Stub; kanonisch technical/MEMBERSHIP_SYSTEM.md
- CLAUDE.md Pflichtlektüre und Links angepasst; docs/README.md vereinfacht

Made-with: Cursor
2026-04-08 13:01:49 +02:00

6.6 KiB
Raw Permalink Blame History

Test Vollständige Test-Suite

Führt Backend-Tests (API + Logs) und Frontend-Tests (Playwright) durch. Claude Code schreibt, führt aus und korrigiert bis alle Tests grün sind.

Workflow für neue Features

Nach jeder Implementierung:

  1. Backend-Tests schreiben und ausführen
  2. Frontend-Tests schreiben und ausführen
  3. Logs auf Fehler prüfen
  4. Alle grün → committen

TEIL 1: Backend API-Tests (schnell, immer zuerst)

1.1 Login + Token holen

TOKEN=$(curl -s -X POST https://dev.mitai.jinkendo.de/api/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"$TEST_EMAIL\",\"pin\":\"$TEST_PASSWORD\"}" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('token','KEIN_TOKEN'))")
echo "Token: ${TOKEN:0:30}..."

1.2 Basis-Endpoints prüfen

# Version
curl -sf https://dev.mitai.jinkendo.de/api/version \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print('Version:', d.get('app_version'), '| DB:', d.get('db_schema_version'))"

# Auth Status
curl -sf https://dev.mitai.jinkendo.de/api/auth/status \
  && echo "Auth OK" || echo "Auth FEHLER"

# Stats (mit Token)
curl -sf https://dev.mitai.jinkendo.de/api/stats \
  -H "X-Auth-Token: $TOKEN" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print('Stats OK:', list(d.keys())[:5])"

1.3 CRUD-Test für neues Modul

Template für jeden neuen Router:

# CREATE
ID=$(curl -s -X POST https://dev.mitai.jinkendo.de/api/MODUL \
  -H "Content-Type: application/json" \
  -H "X-Auth-Token: $TOKEN" \
  -d '{"date":"2026-01-01","FELD":"WERT"}' \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('id','FEHLER'))")
echo "CREATE: ID=$ID"

# READ
curl -sf https://dev.mitai.jinkendo.de/api/MODUL?limit=5 \
  -H "X-Auth-Token: $TOKEN" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print('READ: Einträge:', len(d))"

# DELETE (Test-Eintrag aufräumen)
curl -s -X DELETE https://dev.mitai.jinkendo.de/api/MODUL/$ID \
  -H "X-Auth-Token: $TOKEN" \
  && echo "DELETE OK" || echo "DELETE FEHLER"

1.4 Auth-Schutz prüfen

# Endpoint OHNE Token muss 401 zurückgeben
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://dev.mitai.jinkendo.de/api/stats)
[ "$STATUS" = "401" ] && echo "Auth-Schutz OK (401)" || echo "WARNUNG: Auth-Schutz fehlt! ($STATUS)"

1.5 Admin-Endpoint prüfen

# Admin-Endpoint mit normalem Token muss 403 zurückgeben
STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
  https://dev.mitai.jinkendo.de/api/admin/profiles \
  -H "X-Auth-Token: $TOKEN")
echo "Admin-Schutz: $STATUS (erwartet 403 für nicht-Admin)"

TEIL 2: Backend Logs prüfen

2.1 Letzte Logs auf Fehler prüfen

ssh pi "docker logs dev-mitai-api --tail 50 2>&1 | grep -i 'error\|exception\|traceback\|warning' | head -20"

2.2 Nach Test-Requests: Logs prüfen

# Direkt nach API-Tests ausführen
ssh pi "docker logs dev-mitai-api --tail 20 --timestamps 2>&1"

2.3 Alle neuen Endpoints im Log sichtbar?

# Prüft ob Router korrekt registriert
ssh pi "docker logs dev-mitai-api 2>&1 | grep 'router\|route\|endpoint' | head -10"

2.4 DB-Verbindung gesund?

ssh pi "docker exec dev-mitai-postgres pg_isready -U mitai_dev && echo 'DB OK'"

2.5 Neue Tabellen vorhanden?

ssh pi "docker exec dev-mitai-postgres psql -U mitai_dev -d mitai_dev -c '\dt' 2>/dev/null | grep -E 'TABELLEN_NAME'"

TEIL 3: Frontend Playwright-Tests

3.1 Alle Smoke Tests

npx playwright test

3.2 Nur neues Feature testen

npx playwright test --grep "FEATURE_NAME"

3.3 Mit sichtbarem Browser

npx playwright test --headed

3.4 Screenshot bei Fehler ansehen

start test-results\TESTNAME\test-failed-1.png

TEIL 4: Tests schreiben

Backend-Test Template (in test-Abschnitt einfügen)

# Für jeden neuen Endpoint:
echo "=== Test: MODUL_NAME ==="
TOKEN=$(curl -s -X POST https://dev.mitai.jinkendo.de/api/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"$TEST_EMAIL\",\"pin\":\"$TEST_PASSWORD\"}" \
  | python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))")

# GET Test
curl -sf https://dev.mitai.jinkendo.de/api/MODUL \
  -H "X-Auth-Token: $TOKEN" \
  && echo "GET OK" || echo "GET FEHLER"

# POST Test
curl -s -X POST https://dev.mitai.jinkendo.de/api/MODUL \
  -H "Content-Type: application/json" \
  -H "X-Auth-Token: $TOKEN" \
  -d '{"date":"2026-01-01"}' \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print('POST OK, id:', d.get('id'))"

# Auth-Schutz
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://dev.mitai.jinkendo.de/api/MODUL)
[ "$STATUS" = "401" ] && echo "Auth-Schutz OK" || echo "Auth-Schutz FEHLER ($STATUS)"

Frontend-Test Template (in dev-smoke-test.spec.js)

test('MODUL: Seite lädt und Grundfunktion', async ({ page }) => {
  await login(page);
  
  // Navigation
  await page.click('text=NAV_TEXT');
  await page.waitForLoadState('networkidle');
  await expect(page.locator('.spinner')).toHaveCount(0, { timeout: 10000 });
  
  // Formular ausfüllen
  await page.fill('input[name="FELD"]', 'TESTWERT');
  await page.click('button:has-text("Speichern")');
  
  // Ergebnis prüfen
  await expect(page.locator('text=gespeichert')).toBeVisible({ timeout: 5000 });
  await page.screenshot({ path: 'screenshots/MODUL-test.png' });
  console.log('MODUL OK');
});

TEIL 5: Vollständiger Test-Lauf (vor jedem Deploy)

echo "=== BACKEND TESTS ===" && \
TOKEN=$(curl -s -X POST https://dev.mitai.jinkendo.de/api/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"$TEST_EMAIL\",\"pin\":\"$TEST_PASSWORD\"}" \
  | python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))") && \
curl -sf https://dev.mitai.jinkendo.de/api/version | python3 -c "import sys,json; d=json.load(sys.stdin); print('Version:', d.get('app_version'))" && \
curl -sf https://dev.mitai.jinkendo.de/api/stats -H "X-Auth-Token: $TOKEN" > /dev/null && echo "Stats OK" && \
echo "" && \
echo "=== LOGS PRUEFEN ===" && \
ssh pi "docker logs dev-mitai-api --tail 20 2>&1 | grep -i 'error\|exception' | head -5 || echo 'Keine Fehler in Logs'" && \
echo "" && \
echo "=== FRONTEND TESTS ===" && \
npx playwright test && \
echo "" && \
echo "=== ALLE TESTS BESTANDEN ==="

Credentials setzen (einmalig pro Session)

$env:TEST_EMAIL="lars@stommer.com"
$env:TEST_PASSWORD="5112"

Prod-Schutz

Tests laufen AUSSCHLIESSLICH gegen:

NIEMALS gegen: