From 12a23178d8c2cdb0d08584e62770eb3f0c7f5159 Mon Sep 17 00:00:00 2001 From: Tim Byrne Date: Tue, 24 Jan 2017 17:43:18 -0600 Subject: [PATCH] Tests for offering bootstrap during clone (#45) --- test/105_accept_clone.bats | 247 +++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) diff --git a/test/105_accept_clone.bats b/test/105_accept_clone.bats index a55e0c9..e25623c 100644 --- a/test/105_accept_clone.bats +++ b/test/105_accept_clone.bats @@ -12,6 +12,16 @@ setup() { cp -rp "$T_DIR_REPO" "$T_DIR_REMOTE" } +create_bootstrap() { + make_parents "$T_YADM_BOOTSTRAP" + { + echo "#!/bin/bash" + echo "echo Bootstrap successful" + echo "exit 123" + } > "$T_YADM_BOOTSTRAP" + chmod a+x "$T_YADM_BOOTSTRAP" +} + @test "Command 'clone' (bad remote)" { echo " When 'clone' command is provided, @@ -193,3 +203,240 @@ setup() { [[ "$stashed_conflicts" =~ \+conflict ]] } + +@test "Command 'clone' (force bootstrap, missing)" { + echo " + When 'clone' command is provided, + with the --bootstrap parameter + and bootstrap does not exists + Create new repo with attributes: + - 0600 permissions + - not bare + - worktree = \$YADM_WORK + - showUntrackedFiles = no + - yadm.managed = true + Report the repo as cloned + A remote named origin exists + Exit with 0 + " + + #; remove existing worktree and repo + rm -rf "$T_DIR_WORK" + mkdir -p "$T_DIR_WORK" + rm -rf "$T_DIR_REPO" + + #; run clone + run "${T_YADM_Y[@]}" clone --bootstrap -w "$T_DIR_WORK" "$REMOTE_URL" + + #; validate status and output + [ "$status" -eq 0 ] + [[ "$output" =~ Initialized ]] + + #; validate repo attributes + test_perms "$T_DIR_REPO" "drw.--.--." + test_repo_attribute "$T_DIR_REPO" core.bare false + test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" + test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no + test_repo_attribute "$T_DIR_REPO" yadm.managed true + + #; test the remote + local remote_output + remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) + [ "$remote_output" = "origin" ] +} + +@test "Command 'clone' (force bootstrap, existing)" { + echo " + When 'clone' command is provided, + with the --bootstrap parameter + and bootstrap exists + Create new repo with attributes: + - 0600 permissions + - not bare + - worktree = \$YADM_WORK + - showUntrackedFiles = no + - yadm.managed = true + Report the repo as cloned + A remote named origin exists + Run the bootstrap + Exit with bootstrap's exit code + " + + #; remove existing worktree and repo + rm -rf "$T_DIR_WORK" + mkdir -p "$T_DIR_WORK" + rm -rf "$T_DIR_REPO" + + #; create the bootstrap + create_bootstrap + + #; run clone + run "${T_YADM_Y[@]}" clone --bootstrap -w "$T_DIR_WORK" "$REMOTE_URL" + + #; validate status and output + [ "$status" -eq 123 ] + [[ "$output" =~ Initialized ]] + [[ "$output" =~ Bootstrap\ successful ]] + + #; validate repo attributes + test_perms "$T_DIR_REPO" "drw.--.--." + test_repo_attribute "$T_DIR_REPO" core.bare false + test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" + test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no + test_repo_attribute "$T_DIR_REPO" yadm.managed true + + #; test the remote + local remote_output + remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) + [ "$remote_output" = "origin" ] +} + +@test "Command 'clone' (prevent bootstrap)" { + echo " + When 'clone' command is provided, + with the --no-bootstrap parameter + and bootstrap exists + Create new repo with attributes: + - 0600 permissions + - not bare + - worktree = \$YADM_WORK + - showUntrackedFiles = no + - yadm.managed = true + Report the repo as cloned + A remote named origin exists + Do NOT run bootstrap + Exit with 0 + " + + #; remove existing worktree and repo + rm -rf "$T_DIR_WORK" + mkdir -p "$T_DIR_WORK" + rm -rf "$T_DIR_REPO" + + #; create the bootstrap + create_bootstrap + + #; run clone + run "${T_YADM_Y[@]}" clone --no-bootstrap -w "$T_DIR_WORK" "$REMOTE_URL" + + #; validate status and output + [ "$status" -eq 0 ] + [[ $output =~ Initialized ]] + [[ ! $output =~ Bootstrap\ successful ]] + + #; validate repo attributes + test_perms "$T_DIR_REPO" "drw.--.--." + test_repo_attribute "$T_DIR_REPO" core.bare false + test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" + test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no + test_repo_attribute "$T_DIR_REPO" yadm.managed true + + #; test the remote + local remote_output + remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) + [ "$remote_output" = "origin" ] +} + +@test "Command 'clone' (existing bootstrap, answer n)" { + echo " + When 'clone' command is provided, + and bootstrap exists + Create new repo with attributes: + - 0600 permissions + - not bare + - worktree = \$YADM_WORK + - showUntrackedFiles = no + - yadm.managed = true + Report the repo as cloned + A remote named origin exists + Do NOT run bootstrap + Exit with 0 + " + + #; remove existing worktree and repo + rm -rf "$T_DIR_WORK" + mkdir -p "$T_DIR_WORK" + rm -rf "$T_DIR_REPO" + + #; create the bootstrap + create_bootstrap + + #; run clone + run expect <