Files
rename-mvp/feature_tests_remembered_series.sh
T
2026-03-09 14:45:24 +01:00

123 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if [ -z "${BASE_URL:-}" ]; then
if curl --silent --fail http://127.0.0.1:8085/api/health >/dev/null 2>&1; then
BASE_URL="http://127.0.0.1:8085"
elif curl --silent --fail http://host.containers.internal:8085/api/health >/dev/null 2>&1; then
BASE_URL="http://host.containers.internal:8085"
else
echo "ERROR: could not determine BASE_URL. Tried 127.0.0.1 and host.containers.internal." >&2
exit 1
fi
fi
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT
echo "== Feature test 1: remembered series list can be purged and starts empty =="
curl --fail --silent --show-error \
-X DELETE "${BASE_URL}/api/session/remembered-series" \
-o "${TMP_DIR}/purge.json"
curl --fail --silent --show-error \
"${BASE_URL}/api/session/remembered-series" \
-o "${TMP_DIR}/remembered_empty.json"
cat "${TMP_DIR}/remembered_empty.json"
python3 - "${TMP_DIR}/remembered_empty.json" <<'PY'
import json
import sys
from pathlib import Path
data = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
items = data.get("items")
assert isinstance(items, list), "items must be list"
assert len(items) == 0, "items should be empty after purge"
print("purge baseline validation passed")
PY
echo
echo "== Feature test 2: MRU and dedupe by series id =="
cat > "${TMP_DIR}/s1.json" <<'JSON'
{"item":{"id":"100","name":"Series A","year":"2020","display_name":"Series A (2020)","raw":{"slug":"series-a"}}}
JSON
cat > "${TMP_DIR}/s2.json" <<'JSON'
{"item":{"id":"200","name":"Series B","year":"2021","display_name":"Series B (2021)","raw":{"slug":"series-b"}}}
JSON
cat > "${TMP_DIR}/s1b.json" <<'JSON'
{"item":{"id":"100","name":"Series A","year":"2020","display_name":"Series A (2020)","raw":{"slug":"series-a"}}}
JSON
curl --fail --silent --show-error -X POST "${BASE_URL}/api/session/remembered-series" -H "Content-Type: application/json" --data @"${TMP_DIR}/s1.json" >/dev/null
curl --fail --silent --show-error -X POST "${BASE_URL}/api/session/remembered-series" -H "Content-Type: application/json" --data @"${TMP_DIR}/s2.json" >/dev/null
curl --fail --silent --show-error -X POST "${BASE_URL}/api/session/remembered-series" -H "Content-Type: application/json" --data @"${TMP_DIR}/s1b.json" >/dev/null
curl --fail --silent --show-error \
"${BASE_URL}/api/session/remembered-series" \
-o "${TMP_DIR}/remembered_mru.json"
cat "${TMP_DIR}/remembered_mru.json"
python3 - "${TMP_DIR}/remembered_mru.json" <<'PY'
import json
import sys
from pathlib import Path
data = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
items = data.get("items") or []
assert len(items) == 2, "expected deduped list of 2"
assert items[0]["series"]["id"] == "100", "series 100 should be most-recent after reselection"
assert items[1]["series"]["id"] == "200", "series 200 should be second"
print("MRU and dedupe validation passed")
PY
echo
echo "== Feature test 3: remember_max_series limit evicts oldest =="
cat > "${TMP_DIR}/settings_limit_2.json" <<'JSON'
{"remember_max_series":2}
JSON
curl --fail --silent --show-error \
-X PUT "${BASE_URL}/api/session/settings" \
-H "Content-Type: application/json" \
--data @"${TMP_DIR}/settings_limit_2.json" \
-o "${TMP_DIR}/settings_limit_resp.json"
cat > "${TMP_DIR}/s3.json" <<'JSON'
{"item":{"id":"300","name":"Series C","year":"2022","display_name":"Series C (2022)","raw":{"slug":"series-c"}}}
JSON
curl --fail --silent --show-error -X POST "${BASE_URL}/api/session/remembered-series" -H "Content-Type: application/json" --data @"${TMP_DIR}/s3.json" >/dev/null
curl --fail --silent --show-error \
"${BASE_URL}/api/session/remembered-series" \
-o "${TMP_DIR}/remembered_limited.json"
cat "${TMP_DIR}/remembered_limited.json"
python3 - "${TMP_DIR}/remembered_limited.json" <<'PY'
import json
import sys
from pathlib import Path
data = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
items = data.get("items") or []
ids = [str(i["series"]["id"]) for i in items]
assert len(items) == 2, f"limit should keep 2, got {len(items)}"
assert ids[0] == "300", "latest should be first"
assert "200" not in ids, "oldest series should be evicted"
print("limit enforcement validation passed")
PY
cat > "${TMP_DIR}/settings_reset_10.json" <<'JSON'
{"remember_max_series":10}
JSON
curl --fail --silent --show-error \
-X PUT "${BASE_URL}/api/session/settings" \
-H "Content-Type: application/json" \
--data @"${TMP_DIR}/settings_reset_10.json" \
>/dev/null
echo
echo "All remembered series feature tests passed."