75 lines
3.3 KiB
Bash
75 lines
3.3 KiB
Bash
#!/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" <<EOF
|
|
GENOME_VAULTS_ROOT=$root
|
|
GENOME_BASE=main
|
|
FORGEJO_USER=n8n-bot
|
|
FORGEJO_HOST=127.0.0.1:3001
|
|
FORGEJO_OWNER=Keru
|
|
COMMITTER_NAME=n8n-bot
|
|
COMMITTER_EMAIL=n8n-bot@homelab
|
|
DEFAULT_AUTHOR_NAME=Tester
|
|
DEFAULT_AUTHOR_EMAIL=tester@local
|
|
EOF
|
|
export g="genome-test"; export vault="$root/$g"
|
|
git clone -q "$bare" "$vault" 2>/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"
|
|
}
|