Files
josh-sync/tests/unit/sync.bats

91 lines
2.6 KiB
Plaintext
Raw Permalink Normal View History

#!/usr/bin/env bats
# tests/unit/sync.bats — Sync/import algorithm tests
setup() {
export JOSH_SYNC_ROOT="$(cd "$BATS_TEST_DIRNAME/../.." && pwd)"
source "$JOSH_SYNC_ROOT/lib/core.sh"
source "$JOSH_SYNC_ROOT/lib/sync.sh"
TEST_ROOT="$(mktemp -d)"
export BOT_NAME="test-bot"
export BOT_EMAIL="test-bot@test.local"
export BOT_TRAILER="Josh-Sync-Origin"
export GITEA_TOKEN="test-token"
export MONOREPO_API="https://gitea.test.local/api/v1/repos/org/mono"
export JOSH_SYNC_TARGET_NAME="crm"
export JOSH_SYNC_TARGETS='[{"name":"crm","subfolder":"apps/crm"}]'
export SYNC_BRANCH_MONO="main"
export SYNC_BRANCH_SUBREPO="main"
}
teardown() {
rm -rf "$TEST_ROOT"
}
make_mono_repo() {
local work="${TEST_ROOT}/mono-work"
local bare="${TEST_ROOT}/mono.git"
git init "$work" >/dev/null
git -C "$work" checkout -b main >/dev/null
git -C "$work" config user.name "Test User"
git -C "$work" config user.email "test@test.local"
printf 'mono\n' > "${work}/README.md"
git -C "$work" add README.md
git -C "$work" commit -m "mono base" >/dev/null
git init --bare "$bare" >/dev/null
git -C "$work" remote add origin "$bare"
git -C "$work" push origin main >/dev/null
printf '%s\n' "$bare"
}
make_subrepo_with_tracked_ignored_file() {
local work="${TEST_ROOT}/subrepo-work"
local bare="${TEST_ROOT}/subrepo.git"
git init "$work" >/dev/null
git -C "$work" checkout -b main >/dev/null
git -C "$work" config user.name "Test User"
git -C "$work" config user.email "test@test.local"
mkdir -p "${work}/.dependencies"
printf '.dependencies/\n' > "${work}/.gitignore"
printf 'visible\n' > "${work}/visible.txt"
printf 'tracked even though ignored\n' > "${work}/.dependencies/tracked.txt"
git -C "$work" add .gitignore visible.txt
git -C "$work" add -f .dependencies/tracked.txt
git -C "$work" commit -m "subrepo with tracked ignored file" >/dev/null
git init --bare "$bare" >/dev/null
git -C "$work" remote add origin "$bare"
git -C "$work" push origin main >/dev/null
printf '%s\n' "$bare"
}
mono_auth_url() {
printf '%s\n' "$MONO_BARE"
}
subrepo_auth_url() {
printf '%s\n' "$SUBREPO_BARE"
}
create_pr() {
printf '%s\n' "$4" > "${TEST_ROOT}/created-pr-head"
}
@test "initial_import stages files tracked in subrepo even when ignored by copied .gitignore" {
MONO_BARE="$(make_mono_repo)"
SUBREPO_BARE="$(make_subrepo_with_tracked_ignored_file)"
local result import_branch
result="$(initial_import)"
import_branch="$(cat "${TEST_ROOT}/created-pr-head")"
[ "$result" = "pr-created" ]
git --git-dir="$MONO_BARE" ls-tree -r --name-only "$import_branch" \
| grep -q '^apps/crm/.dependencies/tracked.txt$'
}