#!/usr/bin/env bats source "$BATS_TEST_DIRNAME/helpers/mock-api.sh" setup() { export GITEA_TOKEN=test-token export GIT_TAG_PREFIX="" export SERVER_URL="http://localhost:18080" export REPO="niko/test" export SHA="abc123" rm -rf /tmp/build-ctx } teardown() { mock_stop 2>/dev/null || true rm -rf /tmp/build-ctx } @test "VERSION_FILE=Chart.yaml extracts version from YAML" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/Chart.yaml" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "false" ] [ "$NEXT_VERSION" = "0.3.0" ] } @test "VERSION_FILE=VERSION extracts version from plain text" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/VERSION" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "false" ] [ "$NEXT_VERSION" = "0.3.0" ] } @test "VERSION_FILE=package.json extracts version from JSON" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/package.json" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "false" ] [ "$NEXT_VERSION" = "0.3.0" ] } @test "VERSION_FILE=subdir/Chart.yaml extracts version from monorepo" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/subdir/Chart.yaml" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "false" ] [ "$NEXT_VERSION" = "0.4.0" ] } @test "no VERSION_FILE, root VERSION found" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start WORKDIR=$(mktemp -d) cp "$BATS_TEST_DIRNAME/fixtures/check-version/VERSION" "$WORKDIR/VERSION" SCRIPT="$PWD/scripts/check-version.sh" run bash -c "cd '$WORKDIR' && exec bash '$SCRIPT'" rm -rf "$WORKDIR" [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$NEXT_VERSION" = "0.3.0" ] } @test "no VERSION_FILE, root Chart.yaml found" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start WORKDIR=$(mktemp -d) cp "$BATS_TEST_DIRNAME/fixtures/check-version/Chart.yaml" "$WORKDIR/Chart.yaml" SCRIPT="$PWD/scripts/check-version.sh" run bash -c "cd '$WORKDIR' && exec bash '$SCRIPT'" rm -rf "$WORKDIR" [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$NEXT_VERSION" = "0.3.0" ] } @test "tag exists for commit sets ARTIFACT_EXISTS=true" { mock_set_sequence '[{"code": 200, "body": [{"name": "0.3.0", "commit": {"sha": "abc123"}}]}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/VERSION" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "true" ] [ "$NEXT_VERSION" = "0.3.0" ] } @test "tag with prefix filters correctly" { mock_set_sequence '[{"code": 200, "body": [{"name": "git-pages/0.3.0", "commit": {"sha": "abc123"}}, {"name": "docker/0.3.0", "commit": {"sha": "abc123"}}]}]' mock_start export GIT_TAG_PREFIX="git-pages/" export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/VERSION" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "true" ] [ "$NEXT_VERSION" = "git-pages/0.3.0" ] } @test "no tag, new version calculated" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/VERSION" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "false" ] [ "$NEXT_VERSION" = "0.3.0" ] } @test "highest patch calculated correctly" { mock_set_sequence '[{"code": 200, "body": [{"name": "0.3.0", "commit": {"sha": "def456"}}, {"name": "0.3.1", "commit": {"sha": "def456"}}]}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/VERSION" run bash scripts/check-version.sh [ "$status" -eq 0 ] source /tmp/build-ctx/build.env [ "$ARTIFACT_EXISTS" = "false" ] [ "$NEXT_VERSION" = "0.3.2" ] } @test "VERSION_FILE=Chart-umbrella.yaml extracts only top-level version" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/Chart-umbrella.yaml" run bash scripts/check-version.sh echo "STATUS=$status" echo "OUTPUT=$output" [ "$status" -eq 0 ] source /tmp/build-ctx/build.env echo "NEXT_VERSION=$NEXT_VERSION" [ "$NEXT_VERSION" = "0.1.0" ] } @test "no version source exits with error" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start WORKDIR=$(mktemp -d) SCRIPT="$PWD/scripts/check-version.sh" run bash -c "cd '$WORKDIR' && exec bash '$SCRIPT'" rm -rf "$WORKDIR" [ "$status" -eq 1 ] [[ "$output" == *"ERROR"* ]] }