record-manager-solved/tests/smoke.sh
trevon 8c08fb626f
Some checks are pending
grade / grade (push) Waiting to run
push (solved)
2026-08-26 01:12:23 +00:00

84 lines
1.5 KiB
Bash

#!/bin/sh
# End-to-end CLI session for the Record Manager reference.
# Usage: sh tests/smoke.sh <path-to-recman-binary>
set -eu
BIN="${1:?usage: smoke.sh <binary>}"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
run_session() {
"$BIN" <<EOF
add
Ada Lovelace
ada@analytical.engine
555-0100
add
Grace Hopper
grace@navy.mil
444-0200
list
search
hopper
delete
Grace Hopper
list
save
$TMP/data.txt
quit
EOF
}
# added twice
OUT="$(run_session)"
echo "$OUT" | grep -q "added: Ada Lovelace" || {
echo "FAIL: add missing"
exit 1
}
echo "$OUT" | grep -q "added: Grace Hopper" || {
echo "FAIL: add missing"
exit 1
}
# search is case-insensitive substring across fields
if echo "$OUT" | grep -q "grace@navy.mil"; then :; else {
echo "FAIL: search field match"
exit 1
}; fi
# delete reports the removal
if echo "$OUT" | grep -q "deleted: Grace Hopper"; then :; else {
echo "FAIL: delete"
exit 1
}; fi
# save wrote the file
[ -s "$TMP/data.txt" ] || {
echo "FAIL: save produced empty file"
exit 1
}
# reload in a fresh session and confirm the surviving record round-trips
OUT2="$(
"$BIN" <<EOF
load
$TMP/data.txt
list
quit
EOF
)"
echo "$OUT2" | grep -q "loaded 1 records" || {
echo "FAIL: load count"
exit 1
}
echo "$OUT2" | grep -q "Ada Lovelace" || {
echo "FAIL: round-trip name"
exit 1
}
echo "$OUT2" | grep -q "ada@analytical.engine" || {
echo "FAIL: round-trip field1"
exit 1
}
echo "$OUT2" | grep -q "555-0100" || {
echo "FAIL: round-trip field2"
exit 1
}
echo "smoke ($(basename "$BIN")): pass"