diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats new file mode 100644 index 0000000..d145c25 --- /dev/null +++ b/tests/git-auto-commit.bats @@ -0,0 +1,98 @@ +#!/usr/bin/env bats + +setup() { + . shellmock + + # Build World + export test_repository="${BATS_TEST_DIRNAME}/test_repo" + + rm -rf "${test_repository}" + mkdir "${test_repository}" + touch "${test_repository}"/{a,b,c}.txt + cd "${test_repository}" + + git init --quiet + git add . > /dev/null 2>&1 + + if [[ -z $(git config user.name) ]]; then + git config --global user.email "test@github.com" + git config --global user.name "Test Suite" + fi + + git commit --quiet -m "Init Repo" + git remote add origin git@github.com:stefanzweifel/git-auto-commit-action-demo-app.git + + # Set default INPUT variables + export INPUT_REPOSITORY="${BATS_TEST_DIRNAME}/test_repo" + export INPUT_COMMIT_MESSAGE="Commit Message" + export INPUT_BRANCH="master" + export INPUT_COMMIT_OPTIONS="" + export INPUT_FILE_PATTERN="." + export INPUT_COMMIT_USER_NAME="GitHub Actions" + export INPUT_COMMIT_USER_EMAIL="actions@github.com" + export INPUT_COMMIT_AUTHOR="GitHub Actions " + export INPUT_TAGGING_MESSAGE="" + export INPUT_PUSH_OPTIONS="" + export INPUT_SKIP_DIRTY_CHECK=false + + skipIfNot "$BATS_TEST_DESCRIPTION" + + if [ -z "$TEST_FUNCTION" ]; then + shellmock_clean + fi +} + +teardown() { + + if [ -z "$TEST_FUNCTION" ]; then + shellmock_clean + fi + + rm -rf "${test_repository}" +} + +main() { + bash "${BATS_TEST_DIRNAME}"/../entrypoint.sh +} + + +@test "clean-repo-prints-nothing-to-commit-message" { + + run main + + [ "$status" -eq 0 ] + [ "${lines[0]}" = "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" ] + [ "${lines[1]}" = "::set-output name=changes_detected::false" ] + [ "${lines[2]}" = "Working tree clean. Nothing to commit." ] +} + +@test "commit-changed-files-and-push-to-remote-for-real" { + + TIMESTAMP="$(date +%s)" + + INPUT_BRANCH="ci-test-$TIMESTAMP" + INPUT_BRANCH="master" + INPUT_PUSH_OPTIONS="--force" + + touch "${test_repository}"/new-file-{1,2,3}.txt + + run main + + echo "$output" + + # Success Exit Code + [ "$status" = 0 ] + + [ "${lines[0]}" = "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" ] + [ "${lines[1]}" = "::set-output name=changes_detected::true" ] + [ "${lines[2]}" = "INPUT_BRANCH value: $INPUT_BRANCH" ] + # [ "${lines[3]}" = "INPUT_FILE_PATTERN: ." ] + # [ "${lines[4]}" = "INPUT_COMMIT_OPTIONS: " ] + # [ "${lines[5]}" = "::debug::Apply commit options " ] + # [ "${lines[6]}" = "INPUT_TAGGING_MESSAGE: " ] + # [ "${lines[7]}" = "No tagging message supplied. No tag will be added." ] + # [ "${lines[8]}" = "INPUT_PUSH_OPTIONS: --force" ] + # [ "${lines[9]}" = "::debug::Apply push options --force" ] + # [ "${lines[10]}" = "::debug::Push commit to remote branch ci-target" ] + +}