#!/usr/bin/env batssetup() {release_script="$BATS_TEST_DIRNAME/../script/release"}make_release_repo() {release_repo="$BATS_TEST_TMPDIR/release-repo"release_origin="$BATS_TEST_TMPDIR/release-origin.git"fake_bin="$BATS_TEST_TMPDIR/bin"mkdir -p "$release_repo/script" "$fake_bin"cp "$release_script" "$release_repo/script/release"printf '%s\n' '# V0.6.0' > "$release_repo/bash-preexec.sh"git init -q "$release_repo"git -C "$release_repo" symbolic-ref HEAD refs/heads/mastergit -C "$release_repo" config user.name 'Release Test'git -C "$release_repo" config user.email 'release-test@example.com'git -C "$release_repo" add bash-preexec.sh script/releasegit -C "$release_repo" commit -qm 'Initial commit'git init -q --bare "$release_origin"git -C "$release_repo" remote add origin "$release_origin"git -C "$release_repo" push -qu origin masterprintf '%s\n' \'#!/bin/sh' \'if [ "$1" = release ] && [ "$2" = view ]; then exit 1; fi' \'if [ "$1" = release ] && [ "$2" = list ]; then printf "%s\\n" "Black Toad"; exit 0; fi' \'exit 2' > "$fake_bin/gh"printf '%s\n' '#!/bin/sh' 'exit 0' > "$fake_bin/bats"chmod +x "$fake_bin/gh" "$fake_bin/bats"}@test "release script has valid Bash syntax" {run bash -n "$release_script"[ "$status" -eq 0 ]}@test "release script documents its command-line interface" {run "$release_script" --help[ "$status" -eq 0 ][[ "$output" == *'Usage: script/release'* ]][[ "$output" == *'--dry-run'* ]]}@test "release script rejects an invalid version" {run "$release_script" not-a-version[ "$status" -eq 1 ][[ "$output" == *'version must look like'* ]]}@test "release dry run validates a unique title without changing the repository" {make_release_repocd "$release_repo"run env PATH="$fake_bin:$PATH" script/release --dry-run 0.7.0 "Teal Otter"[ "$status" -eq 0 ][[ "$output" == *'Version: 0.6.0 -> 0.7.0'* ]][[ "$output" == *'Title: Teal Otter'* ]][[ "$output" == *'Dry run complete'* ]][ "$(sed -n 's/^# V//p' bash-preexec.sh)" = '0.6.0' ][ -z "$(git status --porcelain)" ]}