Stand 2026-04-13: PHP/MySQL Infrastruktur, Flussmanagement, Stadt-Prototyp

- PHP/MySQL Backend (XAMPP + Produktionsserver)
- Front-Controller, API-Endpunkte, Session-Management
- Flussmanagement-Simulation (Echtzeit, Punkt-basierter Fluss)
- Stadt & Raumplanung (Prototyp, Top-Down Kachelsystem)
- Klimawaechter 3D: Deiche kleiner, Baeume kippen, Budget angepasst
- persistence.ts: Dualer Speicher (localStorage + Server-API)
- 6 Unit-Test-Dateien fuer bestehende Simulationen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-13 16:43:42 +02:00
commit f22c5ebbfe
83 changed files with 22709 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
import { describe, it, expect } from 'vitest'
import {
AUSTRIA, GERMANY_BAYERN, SWITZERLAND,
getLocalName, getPrimaryStages, requiresReading,
getReadingLevel, getSubjectName
} from '../../src/core/education-levels'
describe('Education Levels — Österreich', () => {
it('AT: 1. Klasse MS = Schulstufe 5', () => {
expect(getLocalName(AUSTRIA, 5)).toBe('1. Klasse')
})
it('AT: 4. Klasse MS = Schulstufe 8', () => {
expect(getLocalName(AUSTRIA, 8)).toBe('4. Klasse')
})
it('AT: Volksschule = Schulstufe 14', () => {
expect(getLocalName(AUSTRIA, 1)).toBe('1. Klasse Volksschule')
expect(getLocalName(AUSTRIA, 4)).toBe('4. Klasse Volksschule')
})
it('AT: Hauptfokus = Stufe 58 (4 Stufen)', () => {
const primary = getPrimaryStages(AUSTRIA)
expect(primary).toHaveLength(4)
expect(primary[0].level).toBe(5)
expect(primary[3].level).toBe(8)
})
it('AT: Fach heißt "Geografie und wirtschaftliche Bildung" ab Stufe 5', () => {
expect(getSubjectName(AUSTRIA, 5)).toBe('Geografie und wirtschaftliche Bildung')
})
it('AT: Fach heißt "Sachunterricht" in der Volksschule', () => {
expect(getSubjectName(AUSTRIA, 3)).toBe('Sachunterricht')
})
it('AT: Stundentafel korrekt (2-1-2-2)', () => {
const primary = getPrimaryStages(AUSTRIA)
expect(primary.map(s => s.hoursPerWeek)).toEqual([2, 1, 2, 2])
})
})
describe('Education Levels — Deutschland Bayern', () => {
it('DE-BY: Stufe 5 = "5. Jahrgangsstufe"', () => {
expect(getLocalName(GERMANY_BAYERN, 5)).toBe('5. Jahrgangsstufe')
})
it('DE-BY: Kein Geo in Stufe 6 und 9 (0 Stunden)', () => {
const stages = getPrimaryStages(GERMANY_BAYERN)
const stage6 = stages.find(s => s.level === 6)
const stage9 = stages.find(s => s.level === 9)
expect(stage6?.hoursPerWeek).toBe(0)
expect(stage9?.hoursPerWeek).toBe(0)
})
it('DE-BY: Fach heißt "Geographie"', () => {
expect(getSubjectName(GERMANY_BAYERN, 7)).toBe('Geographie')
})
})
describe('Education Levels — Schweiz', () => {
it('CH: Stufe 7 = "1. Oberstufe"', () => {
expect(getLocalName(SWITZERLAND, 7)).toBe('1. Oberstufe')
})
it('CH: Hauptfokus = Stufe 79 (Zyklus 3)', () => {
const primary = getPrimaryStages(SWITZERLAND)
expect(primary).toHaveLength(3)
expect(primary[0].level).toBe(7)
})
it('CH: Fach heißt "Räume, Zeiten, Gesellschaften" in Zyklus 3', () => {
expect(getSubjectName(SWITZERLAND, 8)).toBe('Räume, Zeiten, Gesellschaften')
})
it('CH: Fach heißt "Natur, Mensch, Gesellschaft" in Zyklus 2', () => {
expect(getSubjectName(SWITZERLAND, 5)).toBe('Natur, Mensch, Gesellschaft')
})
})
describe('Education Levels — Lesekompetenz', () => {
it('Stufe 1 (6-jährige): keine Lesekompetenz', () => {
expect(getReadingLevel(1)).toBe('none')
expect(requiresReading(1)).toBe(false)
})
it('Stufe 23 (7-9 Jahre): basale Lesekompetenz', () => {
expect(getReadingLevel(2)).toBe('basic')
expect(getReadingLevel(3)).toBe('basic')
})
it('Stufe 4+ (ab 9 Jahre): fließende Lesekompetenz', () => {
expect(getReadingLevel(4)).toBe('fluent')
expect(getReadingLevel(7)).toBe('fluent')
})
})