#!/bin/sh
# Jetable. Casse une garantie à la fois et compte les tests qui tombent.
set -eu

F=lib/first-password.ts
cp "$F" /tmp/fp.orig

run() {
  printf '%-42s ' "$1"
  bun test lib/first-password.test.ts 2>&1 | grep -E '^ *[0-9]+ (pass|fail)' | tr '\n' ' '
  echo
  cp /tmp/fp.orig "$F"
}

echo "témoin"
run "aucune mutation"

# 1. Le repli par reste, celui que le plafond existe pour éviter.
sed -i '' 's/if (b >= CEILING) continue/if (false) continue/' "$F"
run "1. plafond retiré, biais du reste"

# 2. L'alphabet reprend les caractères qui se lisent mal.
sed -i '' 's/"ABCDEFGHJKMNPQRSTUVWXYZ23456789"/"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"/' "$F"
run "2. O, 0, I, l, 1 remis"

# 3. Deux groupes au lieu de trois.
sed -i '' 's/const GROUPS = 3/const GROUPS = 2/' "$F"
run "3. deux groupes"

# 4. Trois caractères par groupe.
sed -i '' 's/const PER_GROUP = 4/const PER_GROUP = 3/' "$F"
run "4. trois par groupe"

# 5. Le même mot de passe à chaque appel.
sed -i '' 's/const bytes = randomBytes/const bytes = Buffer.alloc/' "$F" 2>/dev/null || true
sed -i '' 's/randomBytes(GROUPS \* PER_GROUP)/Buffer.alloc(GROUPS * PER_GROUP, 7)/' "$F"
run "5. constant, plus aléatoire du tout"

rm -f /tmp/fp.orig
