#!/usr/bin/env bats # raw-commit-quiet.bats — quiet-window behaviour of genome-raw-commit.sh. # No Syncthing (no API key -> default author); pushes to a local bare repo via GENOME_PUSH_URL. setup() { SCRIPT="${BATS_TEST_DIRNAME}/../deploy/nexus/genome-raw-commit.sh" export HOME="${BATS_TEST_TMPDIR}/home"; mkdir -p "$HOME/.config" root="${BATS_TEST_TMPDIR}/vaults"; mkdir -p "$root" bare="${BATS_TEST_TMPDIR}/origin.git"; git init -q --bare "$bare" cat > "$HOME/.config/knowledge-genome.env" </dev/null || mkdir -p "$vault" ( cd "$vault" git init -q 2>/dev/null || true git config user.name n8n-bot; git config user.email n8n-bot@homelab; git config commit.gpgsign false git checkout -q -b main 2>/dev/null || git switch -q main mkdir -p raw/articles; echo seed > raw/articles/.gitkeep git add -A; git commit -q -m init git remote add origin "$bare" 2>/dev/null || git remote set-url origin "$bare" git push -q -u origin main ) export GENOME_PUSH_URL="$bare" # test seam -> push to the local bare repo } files() { ( cd "$vault" && git ls-files raw/ ) > "${BATS_TEST_TMPDIR}/f.txt"; } @test "raw-commit: holds a freshly-written raw, commits it once it settles" { command -v jq >/dev/null 2>&1 || skip "jq not installed" echo "still typing" > "$vault/raw/articles/hot.md" # fresh -> hot echo "finished" > "$vault/raw/articles/stable.md" touch -d "10 minutes ago" "$vault/raw/articles/stable.md" # settled run bash "$SCRIPT" "$g" [ "$status" -eq 0 ] echo "$output" | jq -e '.status=="ok"' files grep -q 'raw/articles/stable.md' "${BATS_TEST_TMPDIR}/f.txt" # committed ! grep -q 'raw/articles/hot.md' "${BATS_TEST_TMPDIR}/f.txt" # held back touch -d "10 minutes ago" "$vault/raw/articles/hot.md" # now it settles run bash "$SCRIPT" "$g" [ "$status" -eq 0 ] files grep -q 'raw/articles/hot.md' "${BATS_TEST_TMPDIR}/f.txt" # now committed } @test "raw-commit: noop with held count while everything is still settling" { command -v jq >/dev/null 2>&1 || skip "jq not installed" echo "typing" > "$vault/raw/articles/wip.md" # fresh -> hot run bash "$SCRIPT" "$g" [ "$status" -eq 0 ] echo "$output" | jq -e '.status=="noop"' echo "$output" | jq -e '.held==1' } @test "raw-commit: a deletion is committed immediately (not subject to the quiet window)" { command -v jq >/dev/null 2>&1 || skip "jq not installed" # commit a settled file first echo done > "$vault/raw/articles/old.md"; touch -d "10 minutes ago" "$vault/raw/articles/old.md" run bash "$SCRIPT" "$g"; [ "$status" -eq 0 ] files; grep -q 'raw/articles/old.md' "${BATS_TEST_TMPDIR}/f.txt" # now delete it -> should commit the removal even though "just changed" rm "$vault/raw/articles/old.md" run bash "$SCRIPT" "$g" [ "$status" -eq 0 ] echo "$output" | jq -e '.status=="ok"' files; ! grep -q 'raw/articles/old.md' "${BATS_TEST_TMPDIR}/f.txt" }