ci: a real smoke test for the localized routes, and a single redirect from the root
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cbf724db2a
commit
3a1a095e97
4 files changed
+78
-7
No files matched your search
Executable
+57
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
# Teste de fumaça do servidor: rotas por idioma, redirects e regras do livro.
|
||||
#
|
||||
# scripts/smoke-imagem.sh http://127.0.0.1:3999
|
||||
#
|
||||
# Cada falha é impressa e o script sai com 1 no fim, para mostrar tudo de uma vez.
|
||||
set -uo pipefail
|
||||
|
||||
base=${1:?uso: smoke-imagem.sh <url-base>}
|
||||
falhas=0
|
||||
|
||||
# status <esperado> <caminho> [cabeçalho]
|
||||
status() {
|
||||
local got
|
||||
got=$(curl -s -o /dev/null -w '%{http_code}' ${3:+-H "$3"} "$base$2")
|
||||
[ "$got" = "$1" ] || { echo "FALHOU $2 ${3:-}: esperado $1, veio $got"; falhas=$((falhas + 1)); }
|
||||
}
|
||||
|
||||
# destino <status> <caminho> <redirecionamento esperado> [cabeçalho]
|
||||
destino() {
|
||||
local out
|
||||
out=$(curl -s -o /dev/null -w '%{http_code} %{redirect_url}' ${4:+-H "$4"} "$base$2")
|
||||
[ "$out" = "$1 $base$3" ] || { echo "FALHOU $2 ${4:-}: esperado '$1 $3', veio '${out#* }'" ; falhas=$((falhas + 1)); }
|
||||
}
|
||||
|
||||
# O servidor leva alguns segundos para subir.
|
||||
for _ in $(seq 1 30); do curl -fsS -o /dev/null "$base/pt" && break; sleep 2; done
|
||||
|
||||
# Páginas que existem em todos os idiomas ativos (a home é a que mais depende do render no servidor).
|
||||
for l in pt en es fr de zh-CN; do status 200 "/$l"; done
|
||||
for p in /series /sobre /livro; do status 200 "/pt$p"; done
|
||||
|
||||
# Negociação de idioma na raiz.
|
||||
destino 307 / /pt 'Accept-Language: pt-BR,pt;q=0.9'
|
||||
destino 307 / /es 'Accept-Language: es-MX,es;q=0.9,en;q=0.5'
|
||||
destino 307 / /fr 'Accept-Language: fr-CA,fr;q=0.9'
|
||||
destino 307 / /de 'Accept-Language: de-AT,de;q=0.8'
|
||||
destino 307 / /zh-CN 'Accept-Language: zh-CN,zh;q=0.9'
|
||||
destino 307 / /en 'Accept-Language: it-IT'
|
||||
destino 307 / /pt 'Accept-Language: en;q=0.5,pt;q=0.9'
|
||||
destino 307 / /es 'Cookie: NEXT_LOCALE=es'
|
||||
|
||||
# URLs antigas (sem prefixo) eram em português.
|
||||
destino 308 /series/ESP32-S3 /pt/series/ESP32-S3 'Accept-Language: en-US'
|
||||
destino 308 /livro /pt/livro 'Accept-Language: en-US'
|
||||
|
||||
# O livro existe só em português.
|
||||
for l in en es fr de zh-CN; do status 404 "/$l/livro"; done
|
||||
|
||||
# Metadata no <head> inicial (title, canonical, hreflang), para qualquer cliente.
|
||||
html=$(curl -s -A 'Mozilla/5.0 Chrome/130' "$base/pt/sobre")
|
||||
head=${html%%</head>*}
|
||||
for marca in '<title>' 'rel="canonical"'; do
|
||||
case "$head" in *"$marca"*) ;; *) echo "FALHOU /pt/sobre: $marca fora do <head>"; falhas=$((falhas + 1));; esac
|
||||
done
|
||||
|
||||
exit $((falhas > 0))
|
||||
Reference in new issue
Block a user