91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
|
|
#!/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$'
|
||
|
|
}
|