From 6c4468cc12880af90a3832521808376b767d17b8 Mon Sep 17 00:00:00 2001 From: Matteo Cherubini Date: Wed, 1 Jul 2026 19:56:41 +0200 Subject: [PATCH] test(raw-commit): add tests for quiet window behavior --- tests/raw-commit-quiet.bats | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 tests/raw-commit-quiet.bats diff --git a/tests/raw-commit-quiet.bats b/tests/raw-commit-quiet.bats new file mode 100644 index 0000000..ee6a932 --- /dev/null +++ b/tests/raw-commit-quiet.bats @@ -0,0 +1,75 @@ +#!/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" +}