feat (ui): series onthouden
This commit is contained in:
Executable
+122
@@ -0,0 +1,122 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user