#!/usr/bin/env bash # Test sanntidsflyt: STDB node/edge CRUD via HTTP API # # Verifiserer at maskinrommet kan skrive til STDB, og at data # er tilgjengelig for subscribers (grunnlaget for at to faner # kan se hverandres endringer i sanntid). # # Kjøres fra lokal maskin. SSH-er til serveren for å nå Docker-nettverket. # # Bruk: ./scripts/test-sanntid.sh set -euo pipefail SERVER="claude@157.180.81.26" NETWORK="sidelinja_sidelinja-net" STDB_URL="http://spacetimedb:3000/v1/database/synops" VEGARD_NODE="a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" # Les STDB-token fra .env STDB_TOKEN=$(ssh "$SERVER" "grep SPACETIMEDB_TOKEN /srv/synops/.env | cut -d= -f2-") if [ -z "$STDB_TOKEN" ]; then echo "FEIL: Fant ikke SPACETIMEDB_TOKEN i .env" exit 1 fi TEST_NODE_ID="test-sanntid-$(date +%s)" TEST_EDGE_ID="test-edge-$(date +%s)" # Hjelpefunksjon: kall STDB reducer via curl i Docker-nettverket stdb_call() { local reducer=$1 local data=$2 ssh "$SERVER" "docker run --rm --network $NETWORK curlimages/curl:latest \ -s -w '%{http_code}' -X POST $STDB_URL/call/$reducer \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer $STDB_TOKEN' \ -d '$data'" 2>/dev/null } # Hjelpefunksjon: spør STDB via SQL stdb_sql() { ssh "$SERVER" "docker exec sidelinja-spacetimedb-1 spacetime sql synops \"$1\"" 2>/dev/null | grep -v WARNING } echo "=== Sanntidstest: STDB node/edge CRUD ===" echo "" # 1. Opprett testnode echo -n "1. Oppretter testnode ($TEST_NODE_ID)... " RESULT=$(stdb_call "create_node" "{\"id\": \"$TEST_NODE_ID\", \"node_kind\": \"content\", \"title\": \"Sanntidstest\", \"content\": \"Automatisk test av sanntidsflyt\", \"visibility\": \"hidden\", \"metadata\": \"{}\", \"created_by\": \"$VEGARD_NODE\"}") if [ "$RESULT" = "200" ]; then echo "OK" else echo "FEIL (HTTP $RESULT)" exit 1 fi # 2. Verifiser node finnes i STDB echo -n "2. Verifiserer node i STDB... " NODE_RESULT=$(stdb_sql "SELECT id FROM node WHERE id = '$TEST_NODE_ID'") if echo "$NODE_RESULT" | grep -q "$TEST_NODE_ID"; then echo "OK" else echo "FEIL: Node ikke funnet" exit 1 fi # 3. Opprett owner-edge (Vegard → testnode) echo -n "3. Oppretter owner-edge... " RESULT=$(stdb_call "create_edge" "{\"id\": \"$TEST_EDGE_ID\", \"source_id\": \"$VEGARD_NODE\", \"target_id\": \"$TEST_NODE_ID\", \"edge_type\": \"owner\", \"metadata\": \"{}\", \"system\": false, \"created_by\": \"$VEGARD_NODE\"}") if [ "$RESULT" = "200" ]; then echo "OK" else echo "FEIL (HTTP $RESULT)" exit 1 fi # 4. Verifiser edge finnes echo -n "4. Verifiserer edge i STDB... " EDGE_RESULT=$(stdb_sql "SELECT id FROM edge WHERE id = '$TEST_EDGE_ID'") if echo "$EDGE_RESULT" | grep -q "$TEST_EDGE_ID"; then echo "OK" else echo "FEIL: Edge ikke funnet" exit 1 fi # 5. Oppdater noden echo -n "5. Oppdaterer nodetittel... " RESULT=$(stdb_call "update_node" "{\"id\": \"$TEST_NODE_ID\", \"node_kind\": \"content\", \"title\": \"Sanntidstest (oppdatert)\", \"content\": \"Automatisk test av sanntidsflyt\", \"visibility\": \"hidden\", \"metadata\": \"{}\"}") if [ "$RESULT" = "200" ]; then echo "OK" else echo "FEIL (HTTP $RESULT)" exit 1 fi # 6. Verifiser oppdateringen echo -n "6. Verifiserer oppdatert tittel... " TITLE_RESULT=$(stdb_sql "SELECT title FROM node WHERE id = '$TEST_NODE_ID'") if echo "$TITLE_RESULT" | grep -q "oppdatert"; then echo "OK" else echo "FEIL: Tittel ikke oppdatert" exit 1 fi # 7. Slett testnode (kaskade-sletter edges) echo -n "7. Sletter testnode (kaskaderer edges)... " RESULT=$(stdb_call "delete_node" "{\"id\": \"$TEST_NODE_ID\"}") if [ "$RESULT" = "200" ]; then echo "OK" else echo "FEIL (HTTP $RESULT)" exit 1 fi # 8. Verifiser at node og edge er borte echo -n "8. Verifiserer opprydding... " NODE_GONE=$(stdb_sql "SELECT id FROM node WHERE id = '$TEST_NODE_ID'" | grep -c "$TEST_NODE_ID" || true) EDGE_GONE=$(stdb_sql "SELECT id FROM edge WHERE id = '$TEST_EDGE_ID'" | grep -c "$TEST_EDGE_ID" || true) if [ "$NODE_GONE" = "0" ] && [ "$EDGE_GONE" = "0" ]; then echo "OK" else echo "FEIL: Data ikke ryddet opp" exit 1 fi echo "" echo "=== Alle 8 tester bestått ===" echo "" echo "Backend-sanntidsflyt fungerer: STDB mottar og serverer" echo "node/edge-operasjoner korrekt. WebSocket-subscribers" echo "(frontend-faner) vil motta disse endringene i sanntid." echo "" echo "For å teste i browser:" echo " 1. Start frontend: cd frontend && npm run dev" echo " 2. Åpne to faner: http://localhost:5173" echo " 3. Logg inn i begge" echo " 4. Skriv en node i fane 1, se den dukke opp i fane 2"