Updated the proostekrant to work properly again.
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
Herfstwandeling in het Hallerbos|Zaterdagochtend trokken Douwe en Pauline eropuit voor een lange herfstwandeling in het Hallerbos. Het bos kleurde prachtig goudgeel en de paden lagen bezaaid met kastanjes. Onderweg picknikten ze bij de oude jachthut, waar Pauline verrassend goede thermoskoffie bleek te hebben meegenomen. Na ruim drie uur kwamen ze voldaan weer thuis. Volgende maand willen ze het bos nog eens bezoeken, dan met de kleine kinderen mee.|Douwe|Douwe,Pauline|2026-10-06
|
||||
Cedric loopt zijn eerste halve marathon|Het is gelukt: Cedric heeft zondag zijn allereerste halve marathon uitgelopen in Kasterlee. Na maandenlange training in de vroege ochtenduren finishte hij in twee uur en acht minuten, wat niemand had verwacht. Langs de finish stonden Geert en Oma Dien hem luidkeels aan te moedigen. Ter afsluiting was er natuurlijk een stevige portie pasta bij de familie thuis.|Geert|Cedric,Geert|2026-10-12
|
||||
De pompoensoep van Oma Dien is niet te evenaren|Met de eerste koele dagen van het najaar verschijnt hij weer op tafel: de beroemde pompoensoep van Oma Dien. Dit jaar gebruikte ze pompoenen uit eigen tuin, die volgens kenners de beste van de Broekstraat zijn. Het geheime recept gaat van generatie op generatie, maar wie denkt dat het alleen om de pompoen gaat, heeft het mis. De kruidnagel en een scheutje room maken het verschil.|Dien|Dien|2026-10-03
|
||||
Weekend in de Ardennen met de neven|Gunter en Daan trokken een lang weekend naar de Ardennen voor hun jaarlijkse broertjesuitje. De wandeltocht langs de Ourthe was zwaar maar prachtig, en de avonden bij de open haard in de gite maakten alles goed. Op zondag bezochten ze nog de grotten van Han, waar Daan zoals altijd de gids verbeterde. Volgend jaar hopen ze de Vogelberg te beklimmen.|Gunter|Gunter,Daan|2026-10-17
|
||||
Luc haalt zijn duikbrevet|Groot nieuws uit de duikschool: Luc heeft met lof zijn duikbrevet gehaald. Na maanden oefenen in het binnenbad van Herentals was de proefduik in de Nete een groot succes. De zichtbaarheid onder water was verrassend goed, al bleef het koud volgens de beginnende duiker. Ter beloning ging de hele bende eten bij de frituur, wat volgens Luc het beste deel van de dag was.|Mathilde|Mathilde,Luc|2026-10-05
|
||||
Appelpluk bij boer Janssens|Zondag werd er massaal appels geplukt bij boer Janssens. Chris en Geert kregen hulp van de hele bende en brachten ruim veertig kilo appels naar huis. Volgens Chris was het de beste oogst in jaren, dankzij de zachte zomer. In de komende weken staat er dus appelmoes, appeltaart en vers geperst sap op het menu. De kinderen mochten in de hooiberg spelen.|Chris|Chris,Geert|2026-09-27
|
||||
Kerstmarkt in Keulen met de trein|Pauline en Douwe zijn traditiegetrouw per trein naar de kerstmarkt in Keulen gereisd. De Dom stak prachtig af tegen de sneeuw die zaterdag viel, en de gluhwein was zoals elk jaar weer stevig lekker. Douwe kocht een onnodig maar magnifiek houten klokje op de handwerkmarkt. Na een lange dag kwamen ze laat maar voldaan terug in het Kempenland.|Pauline|Pauline,Douwe|2026-11-21
|
||||
Mathilde op kamers in Leuven|Een nieuw hoofdstuk voor Mathilde: ze is begonnen met haar studies in Leuven en woont nu op een studentenkamer boven de Oude Markt. De verhuizing verliep vlot, al moest er flink geboend worden voordat het gezellig werd. In het weekend komt ze geregeld naar huis om bij te slapen en de was te doen, netjes volgens de familiegebruiken.|Mathilde|Mathilde|2026-09-28
|
||||
De renovatie van de Broekstraat is eindelijk af|Na zes maanden stof, steigers en geduld is de renovatie van de Broekstraat officieel afgerond. Kevin coördineerde het hele traject en toont zich trots op het resultaat. De nieuwe gevels zijn terug in de originele kleuren geschilderd en de straatklinkers zijn compleet vernieuwd. De buren organiseerden een gezellige straatfeest, waar tot laat in de avond werd nagepraat.|Kevin|Kevin,Chris|2026-10-09
|
||||
Sinterklaas bij de Proostens|Ook dit jaar wist Sinterklaas de Broekstraat weer feilloos te vinden. De kinderen zongen luidkeels hun liederen en de pepernoten vlogen in het rond. Kyala en Michel hadden de zolder weer omgetoverd tot een ware surpriseschuur. Voor Tilde was er een echte racebaan, en de volwassenen kregen zoals elk jaar gedichten die niemand ongestraft overleeft.|Kyala|Kyala,Michel,Tilde|2026-12-05
|
||||
Pieter en de oude tractor|Pieter heeft dit najaar een ware schat gerestaureerd: een aftandse oldtimer tractor uit 1962, gevonden op een veiling in Peer. Maandenlang prutste hij elke zaterdag in de schuur, tot de motor onlangs weer aansloeg. De tractor trekt inmiddels hout aan voor de open haard van de hele familie. Volgende lente wil hij ermee naar de trekkermeeting in Bree.|Pieter|Pieter|2026-10-11
|
||||
Dagje Düsseldorf met de trein|Dries pakte de vroege trein voor een dagje shoppen in Düsseldorf. De Konigsallee was een walhalla, al bleef zijn portemonnee verrassend gesloten. Op de terugweg viel hij in slaap en reed hij bijna zijn halte voorbij, wat zijn mede-reizigers deed grijnzen. Een geslaagd dagje volgens de vaste normen van de familie.|Dries|Dries,Kyala|2026-10-18
|
||||
Boomhut timmeren in de achtertuin|Kevin en Luc zijn een weekend bezig geweest met de bouw van een echte boomhut in de grote eik achteraan de tuin. Het plan werd zorgvuldig getekend op een pak cornflakes. Na wat geschuifel met planken en vele koppen limonade staat er nu een fort om trots op te zijn. De opening was gisteren, met linten en een feestelijke ontvangst voor de buurtkinderen.|Kevin|Kevin,Luc|2026-10-25
|
||||
De tuin winterklaar maken|Zondag werd de laatste hand aan de wintervoorbereiding gelegd: de tuin is officieel winterklaar. Dien en Chris sneden de hagen, ruimden het onkruid en de vijver kreeg een winterdek. De laatste chrysanten staan nog in bloei en kleuren de moestuin verrassend feestelijk. Volgens insiders wordt het een strenge winter, dus de kachelhoutvoorraad is aanzienlijk.|Dien|Dien,Chris|2026-11-08
|
||||
Opa wordt tachtig, en het hele dier komt feesten|Het was een dag om in te lijsten: Oma Dien en Opa werden verrast met een knalfeest ter gelegenheid van zijn tachtigste verjaardag. De garage was omgebouwd tot feestzaal en de gasten stonden tot op straat. Er was muziek van de fanfare, een zelfgebakken taart van drie verdiepingen en speechen die het ochtendjournaal haalden. Opa hield het droog, al kwamen de zakdoeken wel tevoorschijn.|Gunter|Gunter,Daan,Kyala,Michel|2026-10-30
|
||||
Cedric pakt brons op de judocompetitie|Het judoseizoen is goed begonnen: Cedric pakte zondag brons op de interclubcompetitie in Turnhout. Na twee gewonnen gevechten volgde een spannende beslissingswedstrijd die net niet werd gehaald. Trainer Geert noemde het de beste techniek van de dag. Volgende maand staat de beker van Kempen op het programma, waar de familie uiteraard weer massaal aanwezig zal zijn.|Geert|Cedric,Geert|2026-11-15
|
||||
Kerstboom kopen in de eerste sneeuw|Met de eerste echte sneeuw van het seizoen erbij was de kerstboommarkt een sprookje. Douwe en Pauline kozen dit jaar weer een echte Nordman, ditmaal eentje van ruim tweeeneenhalf meter, wat een heuse discussie gaf over de auto. Thuis versierd met de oude ballen van Bomma en nieuwe lichtjes uit de kraam van de scouting. De katten zijn dolblij met de nieuwe klimboom.|Douwe|Douwe,Pauline|2026-12-12
|
||||
Kyala start als teamleider bij de bank|Goed nieuws uit het bankwezen: Kyala is per dit najaar bevorderd tot teamleider van het kantoor in Retie. De familie was niet verbaasd; wie Kyala kent weet dat ze overal de leiding neemt. De afdeling werd alvast omgetoverd met planten en een echt koffiezetapparaat. Over een promotiebonus wordt gefluisterd, maar daarover is nog niets bekendgemaakt.|Kyala|Kyala|2026-10-02
|
||||
Zondagsrit naar de kust|Michel en Mathilde pakten de fiets voor een lange zondagsrit naar de kust. Via de kanalen en over de veer bij Mariekerke bereikten ze Oostende in drie uur. Er werd vis gegeten aan de grote kaai, en het ijsje op de zeedijk was niet aan de familie te besteden. Op de terugweg deden ze nog de steenweg van Blankenberge aan.|Michel|Michel,Mathilde|2026-10-19
|
||||
Voorbereidingen voor de nieuwjaarsduik|Het is weer bijna zover: de jaarlijkse nieuwjaarsduik in het kanaal. Daan en Gunter trainen al weken, in badpak en met een ernstig gezicht. Er wordt gewed op wie dit jaar het langste in het ijskoude water durft te blijven. De wafels en de jenever waren alvast veiliggesteld bij de plaatselijke bakker.|Daan|Daan,Gunter|2026-12-13
|
||||
Tilde blitst de oudekoektrommel op|Tilde heeft met man en macht de oude koektrommel van Bomma teruggevonden en geschonken laten herstellen. De koperen rand glimt weer als een spiegel en volgens de kenners is dit het mooiste stuk van de hele collectie. Bij de onthulling werd er natuurlijk gevulde koek geserveerd. Wie de trommel ooit weer leeg zag, deed een gooi naar het verhaal van de kerst van 1994.|Tilde|Tilde,Dien|2026-11-01
|
||||
|
Executable
+84
@@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
# Simuleert 20 familiezendingen via de echte website-flow (paszin -> formulier),
|
||||
# publiceert ze als redactie en drukt de Herfst-editie.
|
||||
set -u
|
||||
BASE=http://localhost:8080
|
||||
PASS="ProostenKrant2024!"
|
||||
JAR=/tmp/sim.cookies
|
||||
IMG1="/home/douwe/Projects/proostenkrant.net/app/public/images/articles/930c7e6f_ScreenshotFrom20260806141156.png"
|
||||
IMG2="/home/douwe/Projects/proostenkrant.net/app/public/images/articles/3b901c4e_ScreenshotFrom20260212232013.png"
|
||||
|
||||
get_token() {
|
||||
curl -s -b "$JAR" -c "$JAR" "$BASE$1" -o "$2"
|
||||
TOKEN=$(grep -o 'name="__RequestVerificationToken"[^>]*value="[^"]*"' "$2" | head -1 | sed 's/.*value="//;s/"$//')
|
||||
HANDLER=$(grep -o 'name="_handler" value="[^"]*"' "$2" | head -1 | sed 's/.*value="//;s/"$//')
|
||||
}
|
||||
|
||||
echo "=== Opruimen: testartikelen van eerder ==="
|
||||
docker exec proostenkrant-mysql mysql -u proostenkrant -pproostenkrant proostenkrant -e "TRUNCATE TABLE articles;" 2>/dev/null
|
||||
|
||||
echo "=== 20 artikelen indienen via /indienen ==="
|
||||
n=0
|
||||
declare -A UID_MAP
|
||||
while IFS=$'\t' read -r naam id; do
|
||||
UID_MAP["$naam"]="$id"
|
||||
done < <(docker exec proostenkrant-mysql mysql -N -u proostenkrant -pproostenkrant proostenkrant -e "SELECT display_name, id FROM users;" 2>/dev/null | tr -d ' ')
|
||||
id_van() { echo "${UID_MAP[$1]:-0}"; }
|
||||
|
||||
while IFS='|' read -r TITEL TEKST SCHRIJVER DEELNEMERS DATUM; do
|
||||
[ -z "$TITEL" ] && continue
|
||||
n=$((n+1))
|
||||
# paszin-flow per artikel (cookie wordt na elke indiening gewist)
|
||||
rm -f "$JAR"
|
||||
get_token "/indienen" /tmp/sim_pas.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Paszin=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null
|
||||
get_token "/indienen/formulier" /tmp/sim_form.html
|
||||
# wissel de twee dummy-afbeeldingen af
|
||||
if [ $((n % 2)) -eq 1 ]; then IMG="$IMG1"; else IMG="$IMG2"; fi
|
||||
IFS=',' read -ra NAMEN <<< "$DEELNEMERS"
|
||||
ARGS=()
|
||||
for d in "${NAMEN[@]}"; do ARGS+=(-F "Participants=$(id_van "$d")"); done
|
||||
code=$(curl -s -b "$JAR" -X POST "$BASE/indienen/formulier" \
|
||||
-F "_handler=$HANDLER" \
|
||||
-F "Input.Title=$TITEL" \
|
||||
-F "Input.Content=$TEKST" \
|
||||
-F "Input.WriterId=$(id_van "$SCHRIJVER")" \
|
||||
-F "Input.EventDate=$DATUM" \
|
||||
"${ARGS[@]}" \
|
||||
-F "Afbeelding=@$IMG" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "%{http_code}")
|
||||
echo "artikel $n: $code - $TITEL"
|
||||
done < /home/douwe/Projects/proostenkrant.net/scripts/demo-articles.tsv
|
||||
|
||||
echo "=== Inloggen als redactie en publiceren ==="
|
||||
rm -f "$JAR"
|
||||
get_token "/login" /tmp/sim_login.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/login" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Username=douwe" \
|
||||
--data-urlencode "Input.Password=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null
|
||||
|
||||
IDS=$(docker exec proostenkrant-mysql mysql -N -u proostenkrant -pproostenkrant proostenkrant -e "SELECT id FROM articles WHERE status='draft' ORDER BY id;" 2>/dev/null)
|
||||
for id in $IDS; do
|
||||
get_token "/artikelen/$id" /tmp/sim_art.html
|
||||
code=$(curl -s -b "$JAR" -X POST "$BASE/artikelen/$id" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "%{http_code}")
|
||||
echo "publiceer $id: $code"
|
||||
done
|
||||
|
||||
echo "=== Krant drukken (Herfst) ==="
|
||||
get_token "/seizoenen" /tmp/sim_seiz.html
|
||||
curl -s -b "$JAR" -X POST "$BASE/api/genereer-pdf" \
|
||||
-F "SeizoenId=3" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "drukken: %{http_code} -> %{redirect_url}\n" --max-time 240
|
||||
ls -la /home/douwe/Projects/proostenkrant.net/app/storage/latex/*.pdf
|
||||
Executable
+265
@@ -0,0 +1,265 @@
|
||||
#!/bin/bash
|
||||
# ProostenKrant end-to-end regressietest (draait tegen een draaiende stack op localhost:8080).
|
||||
# Gebruik: docker compose up -d && scripts/e2e-test.sh
|
||||
# Let op: de test maakt artikelen aan in de database en drukt een proefeditie.
|
||||
set -u
|
||||
# ProostenKrant end-to-end test
|
||||
set -u
|
||||
BASE=http://localhost:8080
|
||||
JAR=/tmp/krant.cookies
|
||||
PASS="ProostenKrant2024!"
|
||||
PASS_FAILED=0
|
||||
|
||||
ok() { echo "PASS: $1"; }
|
||||
fail() { echo "FAIL: $1"; PASS_FAILED=1; }
|
||||
|
||||
check() { # desc, expected, actual
|
||||
if [ "$2" = "$3" ]; then ok "$1"; else fail "$1 (expected [$2], got [$3])"; fi
|
||||
}
|
||||
contains() { # desc, file, pattern
|
||||
if grep -q "$3" "$2"; then ok "$1"; else fail "$1 (pattern '$3' not found in $2)"; fi
|
||||
}
|
||||
notcontains() {
|
||||
if ! grep -q "$3" "$2"; then ok "$1"; else fail "$1 (unexpected pattern '$3' in $2)"; fi
|
||||
}
|
||||
|
||||
get_token() { # url, outfile -> sets TOKEN
|
||||
curl -s -b "$JAR" -c "$JAR" "$BASE$1" -o "$2"
|
||||
TOKEN=$(grep -o 'name="__RequestVerificationToken"[^>]*value="[^"]*"' "$2" | head -1 | sed 's/.*value="//;s/"$//')
|
||||
HANDLER=$(grep -o 'name="_handler" value="[^"]*"' "$2" | head -1 | sed 's/.*value="//;s/"$//')
|
||||
}
|
||||
|
||||
echo "=== 1. Publieke pagina's (anoniem) ==="
|
||||
for p in "/" "/archief" "/indienen" "/login"; do
|
||||
code=$(curl -s -o /dev/null -w "%{http_code}" "$BASE$p")
|
||||
check "GET $p" 200 "$code"
|
||||
done
|
||||
code=$(curl -s -o /dev/null -w "%{http_code}" "$BASE/dashboard")
|
||||
check "GET /dashboard anoniem -> 302" 302 "$code"
|
||||
|
||||
echo "=== 2. Inloggen ==="
|
||||
rm -f "$JAR"
|
||||
get_token "/login" /tmp/t_login.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/login" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Username=douwe" \
|
||||
--data-urlencode "Input.Password=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w ""
|
||||
code=$(curl -s -b "$JAR" -o /tmp/t_dash.html -w "%{http_code}" "$BASE/dashboard")
|
||||
check "GET /dashboard ingelogd" 200 "$code"
|
||||
contains "dashboard toont welkom" /tmp/t_dash.html "Welkom, Douwe"
|
||||
contains "dashboard toont stats" /tmp/t_dash.html "Kladartikelen"
|
||||
|
||||
echo "=== 2b. Fout wachtwoord ==="
|
||||
rm -f "$JAR"
|
||||
get_token "/login" /tmp/t_login.html
|
||||
resp=$(curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/login" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Username=douwe" \
|
||||
--data-urlencode "Input.Password=fout" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" -o /tmp/t_loginbad.html -w "%{http_code}")
|
||||
check "POST login met fout wachtwoord -> 200 met foutmelding" 200 "$resp"
|
||||
contains "foutmelding tonen" /tmp/t_loginbad.html "Ongeldige gebruikersnaam of wachtwoord"
|
||||
|
||||
echo "=== 3. Opnieuw inloggen + artikel maken (redactie) ==="
|
||||
rm -f "$JAR"
|
||||
get_token "/login" /tmp/t_login.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/login" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Username=douwe" \
|
||||
--data-urlencode "Input.Password=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" -o /dev/null
|
||||
|
||||
get_token "/artikelen/nieuw" /tmp/t_nieuw.html
|
||||
code=$(curl -s -b "$JAR" -X POST "$BASE/artikelen/nieuw" \
|
||||
-F "_handler=$HANDLER" \
|
||||
-F "Input.Title=Eerste artikel in de Blazor-krant" \
|
||||
-F "Input.Content=Dit is de eerste testcase. De ProostenKrant is nu een Blazor-applicatie en dit artikel moet netjes in de database belanden." \
|
||||
-F "Input.WriterId=1" \
|
||||
-F "Input.EventDate=2026-10-01" \
|
||||
-F "Input.SeasonId=3" \
|
||||
-F "Input.Status=published" \
|
||||
-F "Participants=1" -F "Participants=2" \
|
||||
-F "Afbeelding=@/home/douwe/Projects/proostenkrant.net/app/public/images/articles/Marathon.jpg" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "%{http_code}")
|
||||
check "POST nieuw artikel -> 302" 302 "$code"
|
||||
curl -s -b "$JAR" "$BASE/artikelen" -o /tmp/t_lijst.html
|
||||
contains "artikel staat in de lijst" /tmp/t_lijst.html "Eerste artikel in de Blazor-krant"
|
||||
|
||||
echo "=== 4. Artikeldetail (publiek voor published) ==="
|
||||
NIEUWID=$(grep -o 'href="/artikelen/[0-9]*">Eerste artikel in de Blazor-krant' /tmp/t_lijst.html | grep -o '[0-9]*' | head -1)
|
||||
code=$(curl -s -o /tmp/t_art.html -w "%{http_code}" "$BASE/artikelen/$NIEUWID")
|
||||
check "GET /artikelen/$NIEUWID anoniem" 200 "$code"
|
||||
contains "artikelkop" /tmp/t_art.html "Eerste artikel in de Blazor-krant"
|
||||
contains "deelnemers avatars" /tmp/t_art.html "participant-avatar"
|
||||
if grep -q "uploads/articles" /tmp/t_art.html; then ok "artikelafbeelding geupload"; else fail "artikelafbeelding geupload"; fi
|
||||
|
||||
echo "=== 5. Seizoenen + PDF genereren ==="
|
||||
curl -s -b "$JAR" "$BASE/seizoenen" -o /tmp/t_seizoenen.html
|
||||
contains "seizoenenoverzicht" /tmp/t_seizoenen.html "Druk deze editie"
|
||||
get_token "/seizoenen" /tmp/t_seizoenen.html
|
||||
code=$(curl -s -b "$JAR" -X POST "$BASE/api/genereer-pdf" \
|
||||
-F "SeizoenId=3" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "%{http_code}" --max-time 240)
|
||||
check "POST druk Herfst-editie -> 302" 302 "$code"
|
||||
PDF=$(ls -t /home/douwe/Projects/proostenkrant.net/app/storage/latex/*.pdf 2>/dev/null | head -1)
|
||||
if [ -n "$PDF" ] && [ -f "$PDF" ]; then ok "PDF gegenereerd: $(basename "$PDF")"; else fail "PDF gegenereerd"; PDF=""; fi
|
||||
if [ -n "$PDF" ]; then
|
||||
head -c 4 "$PDF" | grep -q "%PDF" && ok "PDF header geldig" || fail "PDF header geldig"
|
||||
size=$(stat -c%s "$PDF")
|
||||
[ "$size" -gt 20000 ] && ok "PDF grootte redelijk ($size b)" || fail "PDF grootte ($size b)"
|
||||
fi
|
||||
|
||||
echo "=== 6. Editie downloaden en archief ==="
|
||||
if [ -n "$PDF" ]; then
|
||||
code=$(curl -s -o /dev/null -w "%{http_code}" "$BASE/edities/$(basename "$PDF")")
|
||||
check "GET /edities/PDF" 200 "$code"
|
||||
fi
|
||||
curl -s "$BASE/archief" -o /tmp/t_archief.html
|
||||
contains "archief toont editie" /tmp/t_archief.html "ProostenKrant"
|
||||
contains "archief toont gepubliceerd artikel" /tmp/t_archief.html "Eerste artikel in de Blazor-krant"
|
||||
|
||||
echo ""
|
||||
echo "=== RESULTAAT DEEL 1: $([ $PASS_FAILED = 0 ] && echo ALLES GESLAAGD || echo FOUTEN GEVONDEN) ==="
|
||||
|
||||
echo ""
|
||||
rm -f /tmp/krant.cookies2
|
||||
# ProostenKrant end-to-end test — deel 2: inzendflow, bewerkflow, uitloggen
|
||||
set -u
|
||||
BASE=http://localhost:8080
|
||||
JAR=/tmp/krant.cookies2
|
||||
PASS="ProostenKrant2024!"
|
||||
PASS_FAILED=0
|
||||
|
||||
ok() { echo "PASS: $1"; }
|
||||
fail() { echo "FAIL: $1"; PASS_FAILED=1; }
|
||||
check() { if [ "$2" = "$3" ]; then ok "$1"; else fail "$1 (expected [$2], got [$3])"; fi; }
|
||||
contains() { if grep -q "$3" "$2"; then ok "$1"; else fail "$1 (pattern '$3' niet in $2)"; fi; }
|
||||
|
||||
get_token() {
|
||||
curl -s -b "$JAR" -c "$JAR" "$BASE$1" -o "$2"
|
||||
TOKEN=$(grep -o 'name="__RequestVerificationToken"[^>]*value="[^"]*"' "$2" | head -1 | sed 's/.*value="//;s/"$//')
|
||||
HANDLER=$(grep -o 'name="_handler" value="[^"]*"' "$2" | head -1 | sed 's/.*value="//;s/"$//')
|
||||
}
|
||||
|
||||
echo "=== 7. Inzendflow: paszin ==="
|
||||
rm -f "$JAR"
|
||||
code=$(curl -s -o /dev/null -w "%{http_code}" "$BASE/indienen/formulier")
|
||||
check "formulier zonder paszin -> redirect (302)" 302 "$code"
|
||||
|
||||
get_token "/indienen" /tmp/u_ind.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Paszin=foutezin" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /tmp/u_ind_bad.html
|
||||
contains "foute paszin -> foutmelding" /tmp/u_ind_bad.html "Onjuiste paszin"
|
||||
|
||||
get_token "/indienen" /tmp/u_ind.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Paszin=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "" -D /tmp/u_ind_ok.headers
|
||||
contains "juiste paszin -> cookie" /tmp/u_ind_ok.headers "ProostenKrant="
|
||||
code=$(curl -s -b "$JAR" -o /tmp/u_form.html -w "%{http_code}" "$BASE/indienen/formulier")
|
||||
check "formulier met paszin -> 200" 200 "$code"
|
||||
contains "formulier toont titelveld" /tmp/u_form.html "Titel"
|
||||
|
||||
echo "=== 8. Inzendflow: artikel indienen met foto ==="
|
||||
get_token "/indienen/formulier" /tmp/u_form.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen/formulier" \
|
||||
-F "_handler=$HANDLER" \
|
||||
-F "Input.Title=Een dagje aan zee" \
|
||||
-F "Input.Content=We gingen met de hele familie naar Blankenberge. Het was prachtig weer en de zee was kalm. Iedereen heeft genoten van de dag." \
|
||||
-F "Input.WriterId=2" \
|
||||
-F "Input.EventDate=2026-10-05" \
|
||||
-F "Participants=2" -F "Participants=3" \
|
||||
-F "Afbeelding=@/tmp/blankenberge.jpg" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -D /tmp/u_post.h -w ""
|
||||
loc=$(grep -i "^location" /tmp/u_post.h | tr -d '\r' | awk '{print $2}')
|
||||
echo "redirect: $loc"
|
||||
contains "redirect naar bevestiging" /tmp/u_post.h "indienen/bevestiging"
|
||||
curl -s "$loc" -o /tmp/u_bev.html
|
||||
contains "bevestiging toont titel" /tmp/u_bev.html "Een dagje aan zee"
|
||||
ARTID=$(echo "$loc" | grep -o "artikel=[0-9]*" | cut -d= -f2)
|
||||
echo "nieuw artikel-id: $ARTID"
|
||||
|
||||
echo "=== 9. Cookie verlopen na indienen ==="
|
||||
code=$(curl -s -b "$JAR" -o /dev/null -w "%{http_code}" "$BASE/indienen/formulier")
|
||||
check "formulier opnieuw -> redirect (cookie weg)" 302 "$code"
|
||||
|
||||
echo "=== 10. Bewerkflow: paszin -> lijst -> schrijver verificatie ==="
|
||||
rm -f "$JAR"
|
||||
get_token "/indienen/bewerken" /tmp/u_bp.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen/bewerken" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Paszin=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null
|
||||
curl -s -b "$JAR" "$BASE/indienen/bewerken/lijst" -o /tmp/u_lijst.html
|
||||
contains "lijst toont kladartikel" /tmp/u_lijst.html "Een dagje aan zee"
|
||||
|
||||
echo "--- foute schrijver (id 1, echte schrijver is 2) ---"
|
||||
get_token "/indienen/bewerken/$ARTID" /tmp/u_ver.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen/bewerken/$ARTID" \
|
||||
-F "_handler=$HANDLER" \
|
||||
-F "Input.WriterId=1" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /tmp/u_ver_fout.html -w "foute POST status: %{http_code}\n"
|
||||
contains "verkeerde schrijver geweigerd" /tmp/u_ver_fout.html "Alleen de schrijver"
|
||||
|
||||
echo "--- juiste schrijver (id 2) ---"
|
||||
get_token "/indienen/bewerken/$ARTID" /tmp/u_ver.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen/bewerken/$ARTID" \
|
||||
-F "_handler=$HANDLER" \
|
||||
-F "Input.WriterId=2" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -D /tmp/u_ver_ok.h -w "juiste POST status: %{http_code}\n"
|
||||
loc=$(grep -i "^location" /tmp/u_ver_ok.h | tr -d '\r' | awk '{print $2}')
|
||||
echo "redirect: $loc"
|
||||
curl -s -b "$JAR" "$loc" -o /tmp/u_edit.html
|
||||
contains "bewerkformulier toont bestaande titel" /tmp/u_edit.html "Een dagje aan zee"
|
||||
contains "bewerkformulier staat in bewerkmodus" /tmp/u_edit.html "Artikel bewerken"
|
||||
|
||||
echo "--- wijzig opslaan ---"
|
||||
get_token "/indienen/formulier" /tmp/u_edit.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/indienen/formulier" \
|
||||
-F "_handler=$HANDLER" \
|
||||
-F "Input.Title=Een dagje aan zee (ge-edit)" \
|
||||
-F "Input.Content=We gingen met de hele familie naar Blankenberge. Het was prachtig weer en de zee was kalm. Iedereen heeft genoten van de dag. Update: het artikel is bewerkt." \
|
||||
-F "Input.WriterId=2" \
|
||||
-F "Input.EventDate=2026-10-05" \
|
||||
-F "Participants=2" \
|
||||
-F "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -D /tmp/u_edit_post.h
|
||||
contains "wijziging doorgestuurd" /tmp/u_edit_post.h "indienen/bevestiging"
|
||||
|
||||
echo "=== 11. Redactie ziet nieuwe kladartikelen ==="
|
||||
rm -f "$JAR"
|
||||
get_token "/login" /tmp/u_login.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/login" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "Input.Username=douwe" \
|
||||
--data-urlencode "Input.Password=$PASS" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" -o /dev/null
|
||||
curl -s -b "$JAR" "$BASE/artikelen?status=draft" -o /tmp/u_drafts.html
|
||||
contains "klad-overzicht toont bewerkte titel" /tmp/u_drafts.html "Een dagje aan zee (ge-edit)"
|
||||
|
||||
echo "=== 12. Uitloggen ==="
|
||||
get_token "/uitloggen" /tmp/u_uit.html
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST "$BASE/uitloggen" \
|
||||
--data-urlencode "_handler=$HANDLER" \
|
||||
--data-urlencode "__RequestVerificationToken=$TOKEN" \
|
||||
-o /dev/null -w "" -D /tmp/u_uit.h
|
||||
code=$(curl -s -b "$JAR" -o /dev/null -w "%{http_code}" "$BASE/dashboard")
|
||||
check "dashboard na uitloggen -> 302" 302 "$code"
|
||||
|
||||
echo ""
|
||||
echo "=== RESULTAAT DEEL 2: $([ $PASS_FAILED = 0 ] && echo ALLES GESLAAGD || echo FOUTEN GEVONDEN) ==="
|
||||
|
||||
exit $PASS_FAILED
|
||||
Reference in New Issue
Block a user